dockerisation
This commit is contained in:
parent
70c5f754c5
commit
ace492f665
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
55
env.example
Normal 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
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user