dockerisation

This commit is contained in:
alma 2026-01-18 20:36:30 +01:00
parent 70c5f754c5
commit ace492f665
5 changed files with 113 additions and 48 deletions

View File

@ -27,6 +27,16 @@ nano .env.production # Éditez avec vos valeurs
Créez un fichier `.env.production` avec toutes les variables nécessaires : Créez un fichier `.env.production` avec toutes les variables nécessaires :
```bash
# Copier le fichier d'exemple
cp env.production.example .env.production
# Éditer avec vos valeurs
nano .env.production
```
**Important** : Toutes les commandes `docker-compose` doivent utiliser `--env-file .env.production` pour charger les variables.
```env ```env
# Database # Database
POSTGRES_USER=neah_user POSTGRES_USER=neah_user
@ -58,22 +68,22 @@ NODE_ENV=production
```bash ```bash
# Build l'image Docker # Build l'image Docker
docker-compose -f docker-compose.prod.yml build docker-compose -f docker-compose.prod.yml --env-file .env.production build
# Démarrer les services (base de données et Redis) # Démarrer les services (base de données et Redis)
docker-compose -f docker-compose.prod.yml up -d db redis docker-compose -f docker-compose.prod.yml --env-file .env.production up -d db redis
# Attendre que les services soient prêts (environ 10 secondes) # Attendre que les services soient prêts (environ 10 secondes)
sleep 10 sleep 10
# Appliquer les migrations Prisma # Appliquer les migrations Prisma
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy
# Démarrer l'application # Démarrer l'application
docker-compose -f docker-compose.prod.yml up -d app docker-compose -f docker-compose.prod.yml --env-file .env.production up -d app
# Vérifier les logs # Vérifier les logs
docker-compose -f docker-compose.prod.yml logs -f app docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f app
``` ```
## 🔧 Configuration Avancée ## 🔧 Configuration Avancée
@ -123,10 +133,10 @@ Pour sauvegarder :
```bash ```bash
# Sauvegarder PostgreSQL # Sauvegarder PostgreSQL
docker exec neah-postgres-prod pg_dump -U neah_user calendar_db > backup.sql docker exec neah-postgres-prod pg_dump -U ${POSTGRES_USER:-neah_user} ${POSTGRES_DB:-calendar_db} > backup.sql
# Restaurer PostgreSQL # Restaurer PostgreSQL
docker exec -i neah-postgres-prod psql -U neah_user calendar_db < backup.sql docker exec -i neah-postgres-prod psql -U ${POSTGRES_USER:-neah_user} ${POSTGRES_DB:-calendar_db} < backup.sql
``` ```
## 🔄 Mises à jour ## 🔄 Mises à jour
@ -135,26 +145,26 @@ docker exec -i neah-postgres-prod psql -U neah_user calendar_db < backup.sql
```bash ```bash
# Arrêter l'application # Arrêter l'application
docker-compose -f docker-compose.prod.yml stop app docker-compose -f docker-compose.prod.yml --env-file .env.production stop app
# Rebuild l'image # Rebuild l'image
docker-compose -f docker-compose.prod.yml build app docker-compose -f docker-compose.prod.yml --env-file .env.production build app
# Appliquer les migrations si nécessaire # Appliquer les migrations si nécessaire
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy
# Redémarrer # Redémarrer
docker-compose -f docker-compose.prod.yml up -d app docker-compose -f docker-compose.prod.yml --env-file .env.production up -d app
``` ```
### Appliquer les migrations Prisma ### Appliquer les migrations Prisma
```bash ```bash
# Vérifier le statut des migrations # Vérifier le statut des migrations
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate status docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate status
# Appliquer les migrations # Appliquer les migrations
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy
``` ```
## 📊 Monitoring et Logs ## 📊 Monitoring et Logs
@ -163,12 +173,12 @@ docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy
```bash ```bash
# Tous les services # Tous les services
docker-compose -f docker-compose.prod.yml logs -f docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f
# Un service spécifique # Un service spécifique
docker-compose -f docker-compose.prod.yml logs -f app docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f app
docker-compose -f docker-compose.prod.yml logs -f db docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f db
docker-compose -f docker-compose.prod.yml logs -f redis docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f redis
``` ```
### Health Check ### Health Check
@ -241,30 +251,30 @@ server {
```bash ```bash
# Vérifier les logs # Vérifier les logs
docker-compose -f docker-compose.prod.yml logs app docker-compose -f docker-compose.prod.yml --env-file .env.production logs app
# Vérifier que les services dépendants sont démarrés # Vérifier que les services dépendants sont démarrés
docker-compose -f docker-compose.prod.yml ps docker-compose -f docker-compose.prod.yml --env-file .env.production ps
# Vérifier la santé des services # Vérifier la santé des services
docker-compose -f docker-compose.prod.yml exec app curl http://localhost:3000/api/health docker-compose -f docker-compose.prod.yml --env-file .env.production exec app curl http://localhost:3000/api/health
``` ```
### Problèmes de connexion à la base de données ### Problèmes de connexion à la base de données
```bash ```bash
# Tester la connexion PostgreSQL # Tester la connexion PostgreSQL
docker-compose -f docker-compose.prod.yml exec db psql -U neah_user -d calendar_db -c "SELECT 1;" docker-compose -f docker-compose.prod.yml --env-file .env.production exec db psql -U neah_user -d calendar_db -c "SELECT 1;"
# Vérifier les variables d'environnement # Vérifier les variables d'environnement
docker-compose -f docker-compose.prod.yml exec app env | grep DATABASE docker-compose -f docker-compose.prod.yml --env-file .env.production exec app env | grep DATABASE
``` ```
### Problèmes de connexion Redis ### Problèmes de connexion Redis
```bash ```bash
# Tester Redis # Tester Redis
docker-compose -f docker-compose.prod.yml exec redis redis-cli -a VOTRE_MOT_DE_PASSE ping docker-compose -f docker-compose.prod.yml --env-file .env.production exec redis redis-cli -a VOTRE_MOT_DE_PASSE ping
``` ```
### Rebuild complet ### Rebuild complet
@ -273,16 +283,16 @@ Si vous avez des problèmes persistants :
```bash ```bash
# Arrêter tous les services # Arrêter tous les services
docker-compose -f docker-compose.prod.yml down docker-compose -f docker-compose.prod.yml --env-file .env.production down
# Supprimer les volumes (⚠️ PERDREZ LES DONNÉES) # Supprimer les volumes (⚠️ PERDREZ LES DONNÉES)
docker-compose -f docker-compose.prod.yml down -v docker-compose -f docker-compose.prod.yml --env-file .env.production down -v
# Rebuild tout # Rebuild tout
docker-compose -f docker-compose.prod.yml build --no-cache docker-compose -f docker-compose.prod.yml --env-file .env.production build --no-cache
# Redémarrer # Redémarrer
docker-compose -f docker-compose.prod.yml up -d docker-compose -f docker-compose.prod.yml --env-file .env.production up -d
``` ```
## 📦 Sauvegardes ## 📦 Sauvegardes

View File

@ -24,11 +24,11 @@ nano .env.production
./scripts/deploy-prod.sh ./scripts/deploy-prod.sh
# Option B: Commandes manuelles # Option B: Commandes manuelles
docker-compose -f docker-compose.prod.yml build docker-compose -f docker-compose.prod.yml --env-file .env.production build
docker-compose -f docker-compose.prod.yml up -d db redis docker-compose -f docker-compose.prod.yml --env-file .env.production up -d db redis
sleep 15 sleep 15
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy
docker-compose -f docker-compose.prod.yml up -d app docker-compose -f docker-compose.prod.yml --env-file .env.production up -d app
``` ```
### 3. Vérifier ### 3. Vérifier
@ -45,19 +45,19 @@ docker-compose -f docker-compose.prod.yml logs -f app
```bash ```bash
# Arrêter # Arrêter
docker-compose -f docker-compose.prod.yml down docker-compose -f docker-compose.prod.yml --env-file .env.production down
# Redémarrer # Redémarrer
docker-compose -f docker-compose.prod.yml restart app docker-compose -f docker-compose.prod.yml --env-file .env.production restart app
# Voir les logs # Voir les logs
docker-compose -f docker-compose.prod.yml logs -f docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f
# Appliquer les migrations # Appliquer les migrations
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy
# Accéder à la base de données # Accéder à la base de données
docker-compose -f docker-compose.prod.yml exec db psql -U neah_user -d calendar_db docker-compose -f docker-compose.prod.yml --env-file .env.production exec db psql -U neah_user -d calendar_db
``` ```
## 📖 Documentation complète ## 📖 Documentation complète

View File

@ -140,11 +140,11 @@ services:
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:-CHANGE_ME_IN_PRODUCTION} NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:-CHANGE_ME_IN_PRODUCTION}
# Keycloak # Keycloak
KEYCLOAK_ISSUER: ${KEYCLOAK_ISSUER} KEYCLOAK_ISSUER: ${KEYCLOAK_ISSUER:-}
KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID} KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID:-}
KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET} KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET:-}
KEYCLOAK_REALM: ${KEYCLOAK_REALM} KEYCLOAK_REALM: ${KEYCLOAK_REALM:-}
NEXT_PUBLIC_KEYCLOAK_ISSUER: ${NEXT_PUBLIC_KEYCLOAK_ISSUER} NEXT_PUBLIC_KEYCLOAK_ISSUER: ${NEXT_PUBLIC_KEYCLOAK_ISSUER:-}
# Node environment # Node environment
NODE_ENV: production NODE_ENV: production
@ -154,7 +154,7 @@ services:
# MINIO_S3_UPLOAD_BUCKET_URL: ${MINIO_S3_UPLOAD_BUCKET_URL} # MINIO_S3_UPLOAD_BUCKET_URL: ${MINIO_S3_UPLOAD_BUCKET_URL}
# MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY} # MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
# MINIO_SECRET_KEY: ${MINIO_SECRET_KEY} # MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
volumes: # volumes:
# Optionnel: monter des fichiers de configuration ou des uploads # Optionnel: monter des fichiers de configuration ou des uploads
# - ./uploads:/app/uploads # - ./uploads:/app/uploads
healthcheck: healthcheck:

55
env.example Normal file
View File

@ -0,0 +1,55 @@
# ============================================
# Configuration Développement Neah
# ============================================
# Copiez ce fichier vers .env et remplissez les valeurs
# ⚠️ NE COMMITEZ JAMAIS .env DANS GIT !
# ============================================
# Base de données PostgreSQL
# ============================================
# Pour développement local avec Docker
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/calendar_db?schema=public
# ============================================
# Redis
# ============================================
REDIS_URL=redis://:mySecretPassword@localhost:6379
# ============================================
# NextAuth
# ============================================
NEXTAUTH_URL=http://localhost:3000
# Générez un secret avec: openssl rand -base64 32
NEXTAUTH_SECRET=GENERER_UN_SECRET_TRES_LONG_ET_SECURISE
# ============================================
# Keycloak
# ============================================
KEYCLOAK_ISSUER=https://connect.slm-lab.net/realms/cercle
KEYCLOAK_CLIENT_ID=lab
KEYCLOAK_CLIENT_SECRET=VOTRE_CLIENT_SECRET_KEYCLOAK
KEYCLOAK_REALM=cercle
NEXT_PUBLIC_KEYCLOAK_ISSUER=https://connect.slm-lab.net/realms/cercle
# ============================================
# Application
# ============================================
NODE_ENV=development
NEXT_TELEMETRY_DISABLED=1
# ============================================
# MinIO / S3 (si utilisé)
# ============================================
# MINIO_S3_UPLOAD_BUCKET_URL=http://localhost:9000
# MINIO_AWS_REGION=us-east-1
# MINIO_AWS_S3_UPLOAD_BUCKET_NAME=missions
# MINIO_ACCESS_KEY=minioadmin
# MINIO_SECRET_KEY=minioadmin
# ============================================
# Autres services (ajoutez selon vos besoins)
# ============================================
# LEANTIME_API_URL=https://leantime.example.com/api
# LEANTIME_TOKEN=votre_token
# N8N_API_KEY=votre_api_key
# N8N_WEBHOOK_URL=https://brain.slm-lab.net/webhook/mission-created

View File

@ -31,34 +31,34 @@ fi
export $(cat .env.production | grep -v '^#' | xargs) export $(cat .env.production | grep -v '^#' | xargs)
echo "📦 Build de l'image Docker..." echo "📦 Build de l'image Docker..."
docker-compose -f docker-compose.prod.yml build --no-cache app docker-compose -f docker-compose.prod.yml --env-file .env.production build --no-cache app
echo "🔄 Démarrage des services de base (PostgreSQL, Redis)..." echo "🔄 Démarrage des services de base (PostgreSQL, Redis)..."
docker-compose -f docker-compose.prod.yml up -d db redis docker-compose -f docker-compose.prod.yml --env-file .env.production up -d db redis
echo "⏳ Attente que les services soient prêts (15 secondes)..." echo "⏳ Attente que les services soient prêts (15 secondes)..."
sleep 15 sleep 15
echo "🔍 Vérification de la santé des services..." echo "🔍 Vérification de la santé des services..."
# Vérifier PostgreSQL # Vérifier PostgreSQL
if ! docker-compose -f docker-compose.prod.yml exec -T db pg_isready -U ${POSTGRES_USER:-neah_user} > /dev/null 2>&1; then if ! docker-compose -f docker-compose.prod.yml --env-file .env.production exec -T db pg_isready -U ${POSTGRES_USER:-neah_user} > /dev/null 2>&1; then
echo "❌ PostgreSQL n'est pas prêt" echo "❌ PostgreSQL n'est pas prêt"
exit 1 exit 1
fi fi
echo "✅ PostgreSQL est prêt" echo "✅ PostgreSQL est prêt"
# Vérifier Redis # Vérifier Redis
if ! docker-compose -f docker-compose.prod.yml exec -T redis redis-cli -a ${REDIS_PASSWORD} ping > /dev/null 2>&1; then if ! docker-compose -f docker-compose.prod.yml --env-file .env.production exec -T redis redis-cli -a ${REDIS_PASSWORD} ping > /dev/null 2>&1; then
echo "❌ Redis n'est pas prêt" echo "❌ Redis n'est pas prêt"
exit 1 exit 1
fi fi
echo "✅ Redis est prêt" echo "✅ Redis est prêt"
echo "🗄️ Application des migrations Prisma..." echo "🗄️ Application des migrations Prisma..."
docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy
echo "🚀 Démarrage de l'application..." echo "🚀 Démarrage de l'application..."
docker-compose -f docker-compose.prod.yml up -d app docker-compose -f docker-compose.prod.yml --env-file .env.production up -d app
echo "⏳ Attente que l'application démarre (10 secondes)..." echo "⏳ Attente que l'application démarre (10 secondes)..."
sleep 10 sleep 10