Pythondiscord.pyDeploy5 min de lectura

Deploy de bot Discord con Python

Configurar y ejecutar un bot Python (discord.py) con entorno virtual y systemd.


Requisitos

  • VPS con Ubuntu/Debian
  • Python 3.10+ instalado
  • Tu bot desarrollado con discord.py o similar
  • Token del bot desde Discord Developer Portal

Paso 1: Instalar Python y dependencias del sistema

bash
sudo apt update
sudo apt install -y python3 python3-pip python3-venv git
python3 --version

Paso 2: Crear usuario dedicado para el bot

bash
sudo useradd -m -s /bin/bash botuser
sudo su - botuser

Paso 3: Subir el código

bash
mkdir -p ~/bots && cd ~/bots
git clone https://github.com/tu-usuario/mi-bot-python.git
cd mi-bot-python

Paso 4: Crear entorno virtual

Siempre usá un virtualenv para aislar dependencias:

bash
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Paso 5: Configurar variables de entorno

Creá un archivo .env:

bash
DISCORD_TOKEN=tu_token_aqui
BOT_PREFIX=!
DATABASE_URL=sqlite:///bot.db

En tu código, cargá las variables con python-dotenv:

python
import os
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

Paso 6: Verificar que el bot funciona

bash
source venv/bin/activate
python3 bot.py

Si el bot se conecta correctamente, detenelo con Ctrl+C y continuá con el servicio.

Paso 7: Crear servicio systemd

Salí del usuario botuser y creá el servicio como root:

bash
sudo nano /etc/systemd/system/discord-bot-python.service
ini
[Unit]
Description=Discord Bot Python
After=network.target

[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bots/mi-bot-python
ExecStart=/home/botuser/bots/mi-bot-python/venv/bin/python3 bot.py
Restart=always
RestartSec=10
EnvironmentFile=/home/botuser/bots/mi-bot-python/.env

# Seguridad adicional
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Paso 8: Activar y arrancar el servicio

bash
sudo systemctl daemon-reload
sudo systemctl enable discord-bot-python
sudo systemctl start discord-bot-python

Paso 9: Verificar estado y logs

bash
# Estado del servicio
sudo systemctl status discord-bot-python

# Logs en tiempo real
journalctl -u discord-bot-python -f

# Últimas 50 líneas de log
journalctl -u discord-bot-python -n 50

Paso 10: Script de actualización

Creá /home/botuser/bots/update-bot.sh:

bash
#!/bin/bash
cd /home/botuser/bots/mi-bot-python
git pull origin main
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart discord-bot-python
echo "Bot actualizado: $(date)"

Estructura recomendada del proyecto

terminal
mi-bot-python/
├── bot.py              # Archivo principal
├── cogs/               # Módulos/comandos
│   ├── moderation.py
│   ├── fun.py
│   └── admin.py
├── utils/              # Utilidades
├── .env                # Variables (no commitear)
├── .gitignore
├── requirements.txt
└── README.md

Recomendaciones

  • Usá discord.py 2.x con slash commands para bots modernos
  • Implementá logging con el módulo logging de Python para debugging
  • Configurá Restart=always en systemd para que el bot se recupere de crashes
  • Actualizá las dependencias regularmente por seguridad

¿Te resultó útil esta guía?