Deploiement
Setup VPS
Prerequis
- Ubuntu 22.04+ ou Debian 12+
- Node.js 22 (via nvm ou NodeSource)
- PostgreSQL 16
- Git
- pm2 (
npm install -g pm2)
Installation pas a pas
bash
# 1. Cloner le depot
git clone https://github.com/alxgb5/igbbot.git
cd igbbot
# 2. Installer les dependances
npm ci --omit=dev
# 3. Configurer l'environnement
cp .env.example .env
# Editer .env avec les vraies valeurs
# 4. Creer la base de donnees
sudo -u postgres createdb discord_bot
sudo -u postgres createuser discord_bot
sudo -u postgres psql -c "ALTER USER discord_bot PASSWORD 'your_password';"
# 5. Generer le client Prisma et appliquer les migrations
npx prisma generate
npx prisma migrate deploy
# 6. Build
npm run build
# 7. Deployer les commandes slash
npm run register
# 8. Demarrer avec pm2
pm2 start ecosystem.config.cjs
pm2 save
pm2 startup # Configure le demarrage automatique au bootConfiguration pm2
Le fichier ecosystem.config.cjs :
javascript
module.exports = {
apps: [{
name: 'igb-bot',
script: 'dist/app/bootstrap.js',
node_args: '--enable-source-maps',
env: { NODE_ENV: 'production' },
autorestart: true, // Redemarre automatiquement en cas de crash
max_restarts: 10, // Maximum 10 redemarrages
min_uptime: '10s', // Un process doit tourner 10s pour etre "stable"
restart_delay: 5000, // 5s entre les redemarrages
log_date_format: 'YYYY-MM-DD HH:mm:ss',
error_file: 'logs/pm2-error.log',
out_file: 'logs/pm2-out.log',
merge_logs: true,
max_memory_restart: '512M' // Redemarre si la memoire depasse 512 MB
}]
};Options de mise a jour
Option 1 : /admin update (recommande)
Depuis Discord, executer /admin update. Le bot fait automatiquement :
git pull origin mainnpm ci --omit=devnpx prisma generatenpx prisma migrate deploynpm run build- Redemarre via
process.exit(0)(pm2 relance)
Option 2 : Mise a jour manuelle SSH
bash
cd /path/to/igbbot
git pull origin main
npm ci --omit=dev
npx prisma generate
npx prisma migrate deploy
npm run build
pm2 restart igb-botOption 3 : Release GitHub
bash
# Telecharger l'archive depuis la release GitHub
wget https://github.com/alxgb5/igbbot/releases/download/vX.Y.Z/igb-bot-vX.Y.Z.tar.gz
tar -xzf igb-bot-vX.Y.Z.tar.gz
# L'archive contient dist/, prisma/, package.json, package-lock.json
npm ci --omit=dev
npx prisma generate
npx prisma migrate deploy
pm2 restart igb-botDocker Compose (developpement)
Le docker-compose.yml fournit PostgreSQL et Adminer pour le developpement local :
yaml
services:
postgres:
image: postgres:16
environment:
POSTGRES_DB: discord_bot
POSTGRES_USER: discord_bot
POSTGRES_PASSWORD: discord_bot
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
adminer:
image: adminer
ports:
- "8080:8080"- PostgreSQL accessible sur
localhost:5432 - Adminer (interface web DB) sur
http://localhost:8080
bash
docker compose up -dHealth check
Le bot expose un endpoint HTTP pour le monitoring :
bash
curl http://localhost:3000/healthReponse (HTTP 200) :
json
{
"status": "ok",
"uptime": 3600,
"memory_mb": 85,
"timestamp": "2026-04-03T12:00:00.000Z"
}Le port est configurable via HEALTH_PORT (defaut 3000).
Peut etre integre avec des outils de monitoring (UptimeRobot, Grafana, etc.).
Sources de monitoring
| Source | Description | Acces |
|---|---|---|
| Health check HTTP | Etat du bot et de la DB | GET /health |
| Salon admin Discord | Erreurs et evenements en temps reel | Canal Discord |
| pm2 logs | Logs stdout/stderr | pm2 logs igb-bot |
| pm2 monit | CPU, RAM, event loop | pm2 monit |
| SystemLog (DB) | Logs applicatifs persistants | Table PostgreSQL |
| AuditLog (DB) | Actions utilisateur | Table PostgreSQL |
Graceful shutdown
Le bot gere proprement les signaux d'arret :
- SIGTERM / SIGINT recu.
- Sauvegarde des sessions vocales actives (parcourt tous les membres en vocal, cloture leurs sessions, calcule l'XP).
- Destruction du client Discord (deconnexion du gateway).
- Deconnexion de Prisma (fermeture du pool PostgreSQL).
process.exit(0).
pm2 envoie SIGTERM pour les arrets normaux. Le graceful shutdown garantit qu'aucune donnee n'est perdue.
Checklist de securite
- [ ]
DISCORD_TOKENjamais commite (verifie dans.gitignore) - [ ]
.envjamais commite - [ ]
BOT_OWNER_IDconfigure pour restreindre les commandes admin - [ ] PostgreSQL avec mot de passe fort en production
- [ ]
GITHUB_TOKENavec scope minimal (repopour les issues) - [ ]
HENRIK_API_KEYavec rate limiting respecte - [ ]
GROQ_API_KEYoptionnel, retirable pour desactiver le chat - [ ] Pare-feu : seul le port SSH et le port health check ouverts
- [ ] pm2 configure avec
max_memory_restartpour eviter les OOM - [ ] Mises a jour automatiques des dependances via Dependabot
- [ ] CI obligatoire avant merge sur
main
