Introduce a complete `.env.example` covering Telegram, AI provider, proactive messaging, web search, and vision settings so new users can bootstrap configuration without reading the source. Rework README.md with a feature list, project structure, and variable reference tables; restructure DEPLOY.md with a table of contents, prerequisites, and env var tables; update RULES.md to declare English as the interface and documentation language and to document the `iniciar.sh` entry script. Also add docstrings to schedule and web search helpers and rename `schedule_data` to `schedule_answers` for consistency with the other wizard state variables.
11 KiB
PsAgentAI - Server Deployment
Deploy PsAgentAI as a systemd service on Debian/Ubuntu to run 24/7 on a VPS.
Table of Contents
- Prerequisites
- Copy Project to Server
- Configure Environment
- Install Dependencies
- Install systemd Service
- Service Management
- Updates
- Multi-User Deployment
- Environment Variables Reference
- Backups
- Security
Prerequisites
A fresh Debian/Ubuntu server with:
python3,python3-venv,python3-pipgit(if cloning from repository)ffmpeg(for voice message processing)systemd-journal-remote(optional, for persistent logs)
sudo apt update
sudo apt install -y python3 python3-venv python3-pip git ffmpeg
Optional: enable persistent journal logs:
sudo apt install -y systemd-journal-remote
1) Copy Project to Server
Using git
cd /opt
sudo git clone <REPOSITORY_URL> psagentai
sudo chown -R $USER:$USER /opt/psagentai
cd /opt/psagentai/app
Using scp/rsync
# From your local machine:
scp -r psagentai/ user@server:/opt/psagentai/
Adjust paths in the systemd service file to match your actual installation directory.
2) Configure Environment
# If .env.example exists, copy it:
cp .env.example .env
# Otherwise create .env manually:
nano .env
Required settings
| Variable | Description |
|---|---|
TELEGRAM_BOT_TOKEN |
Token from @BotFather |
TELEGRAM_CHAT_ID |
Your Telegram chat ID |
AI_PROVIDER |
openrouter, stepfun, qwencloud or llamacpp |
DEFAULT_MODEL |
Model identifier for the chosen provider |
OPENROUTER_API_KEY or STEPFUN_API_KEY or QWENCLOUD_API_KEY |
At least one AI provider key |
Optional settings
| Variable | Default | Description |
|---|---|---|
MIN_INTERVAL_MINUTES |
3 |
Minimum minutes between proactive messages |
MAX_INTERVAL_MINUTES |
30 |
Maximum minutes between proactive messages |
MIN_MESSAGE_LINES |
3 |
Minimum lines per agent message |
WEB_SEARCH_ENABLED |
true |
Enable automatic web search |
WEB_SEARCH_MAX_RESULTS |
5 |
Max web search results |
VISION_MODEL |
meta-llama/llama-4-maverick-17b-128b-instruct |
Vision model |
VISION_PROVIDER |
auto | Vision provider |
AUTO_ENRICH_EVERY |
2 |
Profile auto-enrichment frequency (0 = disabled) |
AUTO_IMPROVE_EVERY |
20 |
Auto-improvement frequency (0 = disabled) |
UPLOAD_CONTEXT_MAX_CHARS |
8000 |
Upload context limit (0 = unlimited) |
Important
: Before starting the service, send
/startonce to the bot in Telegram. This allows the bot to resolve the chat and send proactive messages later.
3) Install Dependencies
# Install system dependency for voice processing
sudo apt install -y ffmpeg
# Make setup script executable and run it
chmod +x iniciar.sh
./iniciar.sh
The setup script will:
- Create a Python virtual environment (
venv/) - Upgrade
pip - Install Python dependencies from
requirements.txt - Validate
.envconfiguration - Start the agent
If ffmpeg was not installed by the system package manager, install it separately:
sudo apt install -y ffmpeg
Voice recognition requires
SpeechRecognition+pydub+ffmpeg.
4) Install systemd Service
Create the service file:
sudo nano /etc/systemd/system/psagentai.service
[Unit]
Description=PsAgentAI
After=network.target
[Service]
Type=simple
User=marco
Group=marco
WorkingDirectory=/opt/psagentai/app
Environment="PATH=/opt/psagentai/app/venv/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/opt/psagentai/app/venv/bin/python3 /opt/psagentai/app/psagentai_agent.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Adjust the following to match your setup:
User=andGroup=— the user that will run the serviceWorkingDirectory=— absolute path to theapp/directoryExecStart=— absolute path to the Python executable and agent script
Create the service user if needed:
sudo useradd -m -s /bin/bash marco || true
sudo usermod -aG sudo marco
Or change User= and Group= to an existing user on your VPS.
Reload systemd and enable the service:
sudo systemctl daemon-reload
sudo systemctl enable psagentai
sudo systemctl start psagentai
5) Service Management
# Check status
sudo systemctl status psagentai
# View real-time logs
sudo journalctl -u psagentai -f
# Stop the service
sudo systemctl stop psagentai
# Restart after changes
sudo systemctl restart psagentai
# Disable auto-start
sudo systemctl disable psagentai
6) Updates
cd /opt/psagentai/app
git pull
./iniciar.sh
sudo systemctl restart psagentai
7) Multi-User Deployment
Each PsAgentAI instance is independent by Telegram chat ID. To run multiple instances:
- Create a separate bot via @BotFather (
/newbot) for each user - Copy the project to a separate directory for each instance, e.g.:
/opt/psagentai-user1//opt/psagentai-user2/
- Create a dedicated
.envfor each instance with its ownTELEGRAM_BOT_TOKEN,TELEGRAM_CHAT_ID, and AI keys - Run
./iniciar.shin each directory to set up the environment - Create a separate systemd service file for each instance:
# Example for user2
sudo nano /etc/systemd/system/psagentai-user2.service
[Unit]
Description=PsAgentAI - User 2
After=network.target
[Service]
Type=simple
User=marco
Group=marco
WorkingDirectory=/opt/psagentai-user2/app
Environment="PATH=/opt/psagentai-user2/app/venv/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/opt/psagentai-user2/app/venv/bin/python3 /opt/psagentai-user2/app/psagentai_agent.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
- Enable and start each service:
sudo systemctl daemon-reload
sudo systemctl enable psagentai-user2
sudo systemctl start psagentai-user2
Recommended naming convention to avoid conflicts:
- Directories:
/opt/psagentai-user1/,/opt/psagentai-user2/ - Services:
psagentai-user1.service,psagentai-user2.service
8) Environment Variables Reference
Telegram
| Variable | Required | Description |
|---|---|---|
TELEGRAM_BOT_TOKEN |
Yes | Telegram bot token from @BotFather |
TELEGRAM_CHAT_ID |
Yes | Target chat ID for proactive messages |
AI Providers
| Variable | Required | Description |
|---|---|---|
AI_PROVIDER |
Yes | Preferred provider: openrouter, stepfun, qwencloud or llamacpp |
DEFAULT_MODEL |
Yes | Model identifier (provider-specific) |
OPENROUTER_API_KEY |
Conditional | Required for OpenRouter |
OPENROUTER_API_URL |
No | OpenRouter API base URL |
STEPFUN_API_KEY |
Conditional | Required for StepFun |
STEPFUN_API_URL |
No | StepFun API base URL |
QWENCLOUD_API_KEY |
Conditional | Required for QwenCloud |
QWENCLOUD_API_URL |
No | QwenCloud API base URL |
LLAMA_CPP_API_URL |
No | llama.cpp server URL (default: http://localhost:8080/v1) |
FALLBACK_MODELS |
No | Comma-separated fallback models |
Behavior Tuning
| Variable | Default | Description |
|---|---|---|
MIN_INTERVAL_MINUTES |
3 |
Minimum minutes between proactive messages |
MAX_INTERVAL_MINUTES |
30 |
Maximum minutes between proactive messages |
MIN_MESSAGE_LINES |
3 |
Minimum lines per agent message |
MAX_HISTORY_LENGTH |
50 |
Max messages in conversation context |
UPLOAD_CONTEXT_MAX_CHARS |
8000 |
Max chars from uploads sent to AI (0 = unlimited) |
WEB_SEARCH_ENABLED |
true |
Enable automatic web search |
WEB_SEARCH_MAX_RESULTS |
5 |
Maximum search results returned |
AUTO_ENRICH_EVERY |
2 |
Auto-enrich profiles every N messages (0 = disabled) |
AUTO_IMPROVE_EVERY |
20 |
Auto-improve system every N messages (0 = disabled) |
Vision / Image Analysis
| Variable | Default | Description |
|---|---|---|
VISION_MODEL |
meta-llama/llama-4-maverick-17b-128b-instruct |
Model for image analysis |
VISION_PROVIDER |
auto | Provider for vision model |
Persistence
| Variable | Default | Description |
|---|---|---|
USER_PROFILE_FILE |
user_profile.json |
User profile file path |
AGENT_PROFILE_FILE |
agent_profile.json |
Agent profile file path |
CONTEXTS_DIR |
contexts |
Conversation context directory |
9) Backups
Regularly back up the data files in the app/ directory:
user_profile.json— user profile dataagent_profile.json— agent personality and traitssystem_improvements.json— auto-improvement historyuploads_metadata.json— uploaded files indexconfig.json— schedule configurationcontexts/— conversation history by dateworkspace/— created and edited files
Daily backup example
# Create backups directory
sudo mkdir -p /root/backups
# Run daily backup
BACKUP_FILE="/root/backups/psagentai-$(date +%F).tar.gz"
tar czf "$BACKUP_FILE" -C /opt/psagentai/app \
user_profile.json \
agent_profile.json \
system_improvements.json \
uploads_metadata.json \
config.json \
contexts \
workspace
echo "Backup created: $BACKUP_FILE"
Automated backup with cron
sudo crontab -e
Add:
0 2 * * * /usr/bin/tar czf /root/backups/psagentai-$(date +\%F).tar.gz -C /opt/psagentai/app user_profile.json agent_profile.json system_improvements.json uploads_metadata.json config.json contexts workspace
This creates a backup every day at 2:00 AM.
10) Security
- Never commit
.envto version control. Add it to.gitignore. - Restrict permissions:
chmod 600 .envto prevent other users from reading secrets. - Use dedicated users: Run each instance under its own system user for isolation.
- Firewall: Only expose necessary ports (typically only outbound HTTPS is needed).
- API keys: Rotate keys periodically and monitor usage for anomalies.
- Path validation: The agent validates file paths to prevent directory traversal attacks.
- Sensitive data: Emails and phone numbers in profiles are preserved but not exposed in logs.
Useful Telegram Commands for Administration
/viewai— Check current AI provider and model/configai— Change AI provider/model on the fly/viewvision— Check vision configuration/configvision— Change vision model on the fly/debug— View system debug information/reload— Reload .env without restarting the service/timezone— Check server timezone
Support
- System developed by: Syspanel.com.br
- Author: Marco A. S. Costa
- Email: contato@syspanel.com.br
- License: Proprietary for syspanel.com.br