Skip to content

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 boot

Configuration 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 :

  1. git pull origin main
  2. npm ci --omit=dev
  3. npx prisma generate
  4. npx prisma migrate deploy
  5. npm run build
  6. 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-bot

Option 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-bot

Docker 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 -d

Health check

Le bot expose un endpoint HTTP pour le monitoring :

bash
curl http://localhost:3000/health

Reponse (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

SourceDescriptionAcces
Health check HTTPEtat du bot et de la DBGET /health
Salon admin DiscordErreurs et evenements en temps reelCanal Discord
pm2 logsLogs stdout/stderrpm2 logs igb-bot
pm2 monitCPU, RAM, event looppm2 monit
SystemLog (DB)Logs applicatifs persistantsTable PostgreSQL
AuditLog (DB)Actions utilisateurTable PostgreSQL

Graceful shutdown

Le bot gere proprement les signaux d'arret :

  1. SIGTERM / SIGINT recu.
  2. Sauvegarde des sessions vocales actives (parcourt tous les membres en vocal, cloture leurs sessions, calcule l'XP).
  3. Destruction du client Discord (deconnexion du gateway).
  4. Deconnexion de Prisma (fermeture du pool PostgreSQL).
  5. process.exit(0).

pm2 envoie SIGTERM pour les arrets normaux. Le graceful shutdown garantit qu'aucune donnee n'est perdue.

Checklist de securite

  • [ ] DISCORD_TOKEN jamais commite (verifie dans .gitignore)
  • [ ] .env jamais commite
  • [ ] BOT_OWNER_ID configure pour restreindre les commandes admin
  • [ ] PostgreSQL avec mot de passe fort en production
  • [ ] GITHUB_TOKEN avec scope minimal (repo pour les issues)
  • [ ] HENRIK_API_KEY avec rate limiting respecte
  • [ ] GROQ_API_KEY optionnel, retirable pour desactiver le chat
  • [ ] Pare-feu : seul le port SSH et le port health check ouverts
  • [ ] pm2 configure avec max_memory_restart pour eviter les OOM
  • [ ] Mises a jour automatiques des dependances via Dependabot
  • [ ] CI obligatoire avant merge sur main