diff --git a/attached_assets/image_1752409247823.png b/attached_assets/image_1752409247823.png new file mode 100644 index 0000000..8bbbb0a Binary files /dev/null and b/attached_assets/image_1752409247823.png differ diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..c60b99f --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,74 @@ +version: '3.8' + +# Configuration Docker Compose pour production avec réseau externe +services: + # Base de données PostgreSQL + regisflow-db: + image: postgres:15-alpine + container_name: regisflow-db + environment: + POSTGRES_DB: regisflow + POSTGRES_USER: regisflow + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-RegisFlow2024!PostgreSQL} + volumes: + - postgres_data:/var/lib/postgresql/data + ports: + - "5433:5432" + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U regisflow -d regisflow || exit 1"] + interval: 10s + timeout: 5s + retries: 10 + start_period: 40s + + # Application RegisFlow + regisflow: + build: + context: . + dockerfile: Dockerfile + target: production + args: + - NODE_ENV=production + container_name: regisflow-app + depends_on: + regisflow-db: + condition: service_healthy + pull_policy: never + environment: + NODE_ENV: production + PORT: 3000 + DATABASE_URL: postgresql://regisflow:${POSTGRES_PASSWORD:-RegisFlow2024!PostgreSQL}@regisflow-db:5432/regisflow + SESSION_SECRET: ${SESSION_SECRET:-RegisFlow2024SessionSecretKey1234567890ABCDEF} + TZ: ${TZ:-Europe/Paris} + SECURE_COOKIES: ${SECURE_COOKIES:-false} + DATA_RETENTION_MONTHS: ${DATA_RETENTION_MONTHS:-19} + BACKUP_RETENTION_DAYS: ${BACKUP_RETENTION_DAYS:-90} + MAX_BACKUP_COUNT: ${MAX_BACKUP_COUNT:-20} + volumes: + - backup_data:/app/backups + - logs_data:/app/logs + ports: + - "3000:3000" + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 120s + +# Volumes persistants +volumes: + postgres_data: + driver: local + backup_data: + driver: local + logs_data: + driver: local + +# Utilisation du réseau nginx_default pour production Replit +networks: + default: + external: true + name: nginx_default \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b6bbade..995e605 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,8 @@ services: regisflow-db: image: postgres:15-alpine container_name: regisflow-db + networks: + - regisflow_network environment: POSTGRES_DB: regisflow POSTGRES_USER: regisflow @@ -32,6 +34,8 @@ services: args: - NODE_ENV=production container_name: regisflow-app + networks: + - regisflow_network depends_on: regisflow-db: condition: service_healthy @@ -68,8 +72,8 @@ volumes: logs_data: driver: local -# Utilisation du réseau nginx_default existant +# Configuration réseau flexible pour déploiement networks: - default: - external: true - name: nginx_default \ No newline at end of file + regisflow_network: + driver: bridge + name: regisflow_network \ No newline at end of file diff --git a/replit.md b/replit.md index 1d92b0d..8cc4cc5 100644 --- a/replit.md +++ b/replit.md @@ -359,6 +359,14 @@ Preferred communication style: Simple, everyday language. - ✅ Corrected port configuration from 5000 to 3000 for proper deployment - ✅ Updated all Docker and application configurations to use port 3000 +### Docker Network Connectivity Fix (January 13, 2025) +- ✅ Fixed "driver failed programming external connectivity" deployment error +- ✅ Created flexible network configuration with local bridge network +- ✅ Added docker-compose.prod.yml for production deployment with nginx_default +- ✅ Separated development and production Docker configurations +- ✅ Resolved external network dependency issues preventing deployment +- ✅ Enhanced network specifications for both database and application services + ### Portainer Deployment Fix (January 10, 2025) - ✅ Resolved Docker image pull error "regisflow-regisflow:latest" in Portainer - ✅ Created local image building solution with "regisflow:latest" tag