From ace492f665ee2887e13959608c845731b3688439 Mon Sep 17 00:00:00 2001 From: alma Date: Sun, 18 Jan 2026 20:36:30 +0100 Subject: [PATCH] dockerisation --- DEPLOYMENT.md | 64 ++++++++++++++++++++++----------------- QUICK_START_PRODUCTION.md | 18 +++++------ docker-compose.prod.yml | 12 ++++---- env.example | 55 +++++++++++++++++++++++++++++++++ scripts/deploy-prod.sh | 12 ++++---- 5 files changed, 113 insertions(+), 48 deletions(-) create mode 100644 env.example diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 103fb1a..051ac66 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -27,6 +27,16 @@ nano .env.production # Éditez avec vos valeurs 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 # Database POSTGRES_USER=neah_user @@ -58,22 +68,22 @@ NODE_ENV=production ```bash # 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) -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) sleep 10 # 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 -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 -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 @@ -123,10 +133,10 @@ Pour sauvegarder : ```bash # 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 -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 @@ -135,26 +145,26 @@ docker exec -i neah-postgres-prod psql -U neah_user calendar_db < backup.sql ```bash # 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 -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 -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 -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 ```bash # 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 -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 @@ -163,12 +173,12 @@ docker-compose -f docker-compose.prod.yml run --rm app npx prisma migrate deploy ```bash # 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 -docker-compose -f docker-compose.prod.yml logs -f app -docker-compose -f docker-compose.prod.yml 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 app +docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f db +docker-compose -f docker-compose.prod.yml --env-file .env.production logs -f redis ``` ### Health Check @@ -241,30 +251,30 @@ server { ```bash # 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 -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 -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 ```bash # 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 -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 ```bash # 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 @@ -273,16 +283,16 @@ Si vous avez des problèmes persistants : ```bash # 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) -docker-compose -f docker-compose.prod.yml down -v +docker-compose -f docker-compose.prod.yml --env-file .env.production down -v # 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 -docker-compose -f docker-compose.prod.yml up -d +docker-compose -f docker-compose.prod.yml --env-file .env.production up -d ``` ## 📦 Sauvegardes diff --git a/QUICK_START_PRODUCTION.md b/QUICK_START_PRODUCTION.md index 61e9d63..2d0c44e 100644 --- a/QUICK_START_PRODUCTION.md +++ b/QUICK_START_PRODUCTION.md @@ -24,11 +24,11 @@ nano .env.production ./scripts/deploy-prod.sh # Option B: Commandes manuelles -docker-compose -f docker-compose.prod.yml build -docker-compose -f docker-compose.prod.yml up -d db redis +docker-compose -f docker-compose.prod.yml --env-file .env.production build +docker-compose -f docker-compose.prod.yml --env-file .env.production up -d db redis sleep 15 -docker-compose -f docker-compose.prod.yml 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 run --rm app npx prisma migrate deploy +docker-compose -f docker-compose.prod.yml --env-file .env.production up -d app ``` ### 3. Vérifier @@ -45,19 +45,19 @@ docker-compose -f docker-compose.prod.yml logs -f app ```bash # Arrêter -docker-compose -f docker-compose.prod.yml down +docker-compose -f docker-compose.prod.yml --env-file .env.production down # 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 -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 -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 -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 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1f1022a..48cb967 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -140,11 +140,11 @@ services: NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:-CHANGE_ME_IN_PRODUCTION} # Keycloak - KEYCLOAK_ISSUER: ${KEYCLOAK_ISSUER} - KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID} - KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET} - KEYCLOAK_REALM: ${KEYCLOAK_REALM} - NEXT_PUBLIC_KEYCLOAK_ISSUER: ${NEXT_PUBLIC_KEYCLOAK_ISSUER} + KEYCLOAK_ISSUER: ${KEYCLOAK_ISSUER:-} + KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID:-} + KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET:-} + KEYCLOAK_REALM: ${KEYCLOAK_REALM:-} + NEXT_PUBLIC_KEYCLOAK_ISSUER: ${NEXT_PUBLIC_KEYCLOAK_ISSUER:-} # Node environment NODE_ENV: production @@ -154,7 +154,7 @@ services: # MINIO_S3_UPLOAD_BUCKET_URL: ${MINIO_S3_UPLOAD_BUCKET_URL} # MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY} # MINIO_SECRET_KEY: ${MINIO_SECRET_KEY} - volumes: + # volumes: # Optionnel: monter des fichiers de configuration ou des uploads # - ./uploads:/app/uploads healthcheck: diff --git a/env.example b/env.example new file mode 100644 index 0000000..42ef04b --- /dev/null +++ b/env.example @@ -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 diff --git a/scripts/deploy-prod.sh b/scripts/deploy-prod.sh index 957d8c9..64ae437 100755 --- a/scripts/deploy-prod.sh +++ b/scripts/deploy-prod.sh @@ -31,34 +31,34 @@ fi export $(cat .env.production | grep -v '^#' | xargs) 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)..." -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)..." sleep 15 echo "🔍 Vérification de la santé des services..." # 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" exit 1 fi echo "✅ PostgreSQL est prêt" # 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" exit 1 fi echo "✅ Redis est prêt" 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..." -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)..." sleep 10