Ce guide vous explique comment déployer l'application complète, qui se compose d'une API backend (NestJS), d'un bot Discord séparé, et d'une base de données PostgreSQL. Le tout est orchestré avec Docker et Nginx.
Pour déployer ce projet, vous aurez besoin des outils suivants installés sur votre serveur :
- Git
- Docker et Docker Compose
- Nginx (optionnel, inclus dans la configuration Docker)
Le projet se compose de deux dépôts séparés :
bots-discord-api/: L'API backend en NestJSbot-discord-onboarding/: Le bot Discord pour gérer l'onboarding des membres
Suivez ces étapes pour une installation propre et maîtrisée.
Connectez-vous à votre serveur et clonez les deux dépôts :
# Cloner l'API backend
git clone <URL_DU_DEPOT_API_GIT>
cd bots-discord-api
# Cloner le bot Discord (dans un dossier séparé)
cd ..
git clone <URL_DU_DEPOT_BOT_GIT>
cd bot-discord-onboardingL'API backend a besoin de plusieurs variables d'environnement pour fonctionner.
-
Créer le fichier
.env.production:cd ../bots-discord-api cp .env.production.example .env.production -
Remplir les variables : Éditez le fichier
bots-discord-api/.env.productionet renseignez chaque variable :
| Variable | Description | Exemple |
|---|---|---|
POSTGRES_HOST |
Nom du service de la base de données (généralement postgres). |
postgres |
POSTGRES_PORT |
Port de la base de données PostgreSQL. | 5432 |
POSTGRES_USER |
Nom d'utilisateur pour la base de données. | postgres |
POSTGRES_PASSWORD |
Mot de passe pour la base de données. À sécuriser ! | un_mot_de_passe_solide |
POSTGRES_DB |
Nom de la base de données. | bots_api |
NODE_ENV |
Environnement d'exécution (toujours production). |
production |
PORT |
Port sur lequel l'API écoute. | 3000 |
DATABASE_URL |
URL de connexion complète à la base de données. | postgresql://user:pass@host:5432/db |
DISCORD_CLIENT_ID |
ID Client de votre application OAuth2 Discord. | 123456789012345678 |
DISCORD_CLIENT_SECRET |
Secret Client de votre application OAuth2 Discord. À sécuriser ! | un_secret_discord_tres_long |
DISCORD_REDIRECT_URI |
URL de callback configurée dans le portail développeur Discord. | https://votre-domaine.com/auth/callback |
DISCORD_BOT_TOKEN |
Token de votre bot Discord. À sécuriser ! | un_token_de_bot_tres_long |
DISCORD_GUILD_ID |
ID du serveur Discord autorisé à utiliser le bot. | 123456789012345678 |
JWT_SECRET |
Chaîne de caractères longue et aléatoire pour signer les tokens JWT. | une_phrase_secrete_tres_longue_et_aleatoire |
JWT_EXPIRATION |
Durée de validité d'un token JWT. | 24h |
-
Créer le fichier
.env.productionpour le bot :cd ../bot-discord-onboarding cp .env.example .env.production -
Remplir les variables du bot : Éditez le fichier
bot-discord-onboarding/.env.production:
| Variable | Description | Exemple |
|---|---|---|
DISCORD_BOT_TOKEN |
Token de votre bot Discord. | votre_token_de_bot_discord |
DISCORD_CLIENT_ID |
ID Client de votre application Discord. | 123456789012345678 |
DISCORD_GUILD_ID |
ID du serveur Discord. | 123456789012345678 |
API_URL |
URL de l'API backend (en interne via Docker). | http://api:3000 |
NODE_ENV |
Environnement d'exécution. | production |
-
Modifier la configuration Nginx : Éditez le fichier
bots-discord-api/nginx/nginx.confet remplacezyour-domain.compar votre vrai nom de domaine. -
Configurer les certificats SSL : Si vous utilisez Let's Encrypt, assurez-vous que les chemins vers les certificats sont corrects.
Retournez dans le dossier de l'API et lancez l'ensemble de l'application :
cd ../bots-discord-api
docker-compose -f docker-compose.prod.yml up -d --buildCette commande va :
- Construire et démarrer l'API NestJS
- Construire et démarrer le bot Discord
- Démarrer la base de données PostgreSQL
- Démarrer Nginx comme reverse proxy
Vérifiez que tous les services fonctionnent correctement :
# Vérifier l'état des conteneurs
docker-compose -f docker-compose.prod.yml ps
# Voir les logs de l'API
docker-compose -f docker-compose.prod.yml logs api
# Voir les logs du bot
docker-compose -f docker-compose.prod.yml logs bot
# Tester l'endpoint de santé
curl https://votre-domaine.com/healthPour mettre à jour l'application, le processus est simple :
# 1. Récupérer les derniers changements depuis Git
cd bots-discord-api
git pull
cd ../bot-discord-onboarding
git pull
# 2. Reconstruire et relancer les conteneurs
cd ../bots-discord-api
docker-compose -f docker-compose.prod.yml up -d --build
# 3. Vérifier que tout fonctionne
docker-compose -f docker-compose.prod.yml psLe projet est équipé d'un workflow d'intégration et de déploiement continus (CI/CD) qui automatise la mise en production.
Le workflow se déclenche à chaque push sur la branche main et :
- Construit l'image Docker de l'API
- Pousse l'image sur Docker Hub
- Se connecte au serveur via SSH
- Déploie automatiquement la nouvelle version
Dans les paramètres de votre dépôt GitHub (Settings > Secrets and variables > Actions), ajoutez :
| Secret | Description |
|---|---|
DOCKERHUB_USERNAME |
Votre nom d'utilisateur Docker Hub. |
DOCKERHUB_TOKEN |
Un token d'accès généré depuis Docker Hub. |
SSH_HOST |
L'adresse IP ou le nom de domaine de votre serveur. |
SSH_USERNAME |
Le nom d'utilisateur pour la connexion SSH. |
SSH_KEY |
La clé SSH privée pour la connexion. |
SSH_PORT |
Le port SSH de votre serveur (généralement 22). |
POSTGRES_HOST |
Nom du service de la base de données. |
POSTGRES_PORT |
Port de la base de données. |
POSTGRES_USER |
Nom d'utilisateur pour la base de données. |
POSTGRES_PASSWORD |
Mot de passe pour la base de données. |
POSTGRES_DB |
Nom de la base de données de production. |
# Logs de l'API
docker-compose -f docker-compose.prod.yml logs -f api
# Logs du bot
docker-compose -f docker-compose.prod.yml logs -f bot
# Logs de la base de données
docker-compose -f docker-compose.prod.yml logs -f db
# Logs de Nginx
docker-compose -f docker-compose.prod.yml logs -f nginxL'application inclut des health checks automatiques :
- API :
https://votre-domaine.com/health - Base de données : Vérification automatique de la connexion
- Bot : Vérification de la connexion Discord
- Mots de passe forts : Utilisez des mots de passe complexes pour la base de données
- Secrets Discord : Gardez vos tokens Discord secrets et régénérez-les si compromis
- JWT Secret : Utilisez une chaîne très longue et aléatoire
- Firewall : Configurez votre serveur pour n'exposer que les ports nécessaires (80, 443, 22)
- SSL/TLS : Utilisez toujours HTTPS en production
- Mises à jour : Maintenez Docker et les images à jour
Ne commettez jamais les fichiers .env.production dans Git. Ils sont déjà dans .gitignore.
-
L'API ne démarre pas :
docker-compose -f docker-compose.prod.yml logs api
-
Le bot ne se connecte pas :
docker-compose -f docker-compose.prod.yml logs bot
-
Problème de base de données :
docker-compose -f docker-compose.prod.yml logs db
-
Nginx ne fonctionne pas :
docker-compose -f docker-compose.prod.yml logs nginx
# Redémarrer un service spécifique
docker-compose -f docker-compose.prod.yml restart api
# Voir l'utilisation des ressources
docker stats
# Nettoyer les images inutilisées
docker image prune -f
# Sauvegarder la base de données
docker-compose -f docker-compose.prod.yml exec db pg_dump -U postgres bots_api > backup.sqlNote importante : Ce guide couvre le déploiement de l'API et du bot Discord. Si vous avez un frontend séparé, il faudra l'ajouter à la configuration Docker Compose et adapter ce guide en conséquence.