Enable connection to an external PostgreSQL database for greater flexibility

Refactors Docker configuration to support external PostgreSQL database connections, updating .env, README, docker-compose, and entrypoint script.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 91318273-c764-4fd4-be04-bdc12c38af32
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/6e755801-08e8-4492-805e-ac3610de5a2a.jpg
This commit is contained in:
michaelschal committed 2025-07-09 20:54:09 +00:00
1 parent dccf01e9c8
commit 974684f6d4
4 files changed
+58 -63

No files matched your search

+13 -10
View File
@@ -1,17 +1,20 @@
# Configuration de l'environnement pour RegisFlow # Configuration de l'environnement pour RegisFlow
# Copiez ce fichier en .env et modifiez les valeurs selon vos besoins # Copiez ce fichier en .env et modifiez les valeurs selon vos besoins
# Configuration de la base de données # Configuration de la base de données (EXTERNE)
# IMPORTANT: Pour Docker, utilisez 'postgres:5432' (réseau interne Docker) # IMPORTANT: Utilisez l'IP externe et le port de votre serveur PostgreSQL
DATABASE_URL=postgresql://regisflow:regisflow2024@postgres:5432/regisflow DATABASE_URL=postgresql://username:password@IP_EXTERNE:5432/regisflow
POSTGRES_PASSWORD=regisflow2024
# Explication des ports : # Exemples de configuration :
# - Port 5432 : Communication interne entre containers Docker (RegisFlow → PostgreSQL) # DATABASE_URL=postgresql://regisflow:motdepasse@192.168.1.100:5432/regisflow
# - Port 5433 : Accès externe depuis votre machine (Machine hôte → PostgreSQL) # DATABASE_URL=postgresql://postgres:secret@10.0.0.5:5432/regisflow
# # DATABASE_URL=postgresql://user:pass@db.example.com:5432/regisflow
# L'application RegisFlow utilise TOUJOURS postgres:5432 en interne
# Vous accédez à PostgreSQL depuis votre machine via localhost:5433 # Note: La base PostgreSQL est externe, pas dans Docker
# Assurez-vous que :
# - La base de données PostgreSQL est accessible depuis le container Docker
# - Le firewall autorise les connexions depuis Docker
# - L'utilisateur a les permissions nécessaires
# Configuration de l'application # Configuration de l'application
NODE_ENV=production NODE_ENV=production
+17 -14
View File
@@ -27,12 +27,15 @@ nano .env
### 2. Configurer les variables d'environnement ### 2. Configurer les variables d'environnement
Éditez le fichier `.env` : Éditez le fichier `.env` avec votre serveur PostgreSQL externe :
```env ```env
# Configuration de la base de données # Configuration de la base de données EXTERNE
DATABASE_URL=postgresql://regisflow:votre_mot_de_passe@postgres:5432/regisflow DATABASE_URL=postgresql://username:password@IP_SERVEUR:5432/regisflow
POSTGRES_PASSWORD=votre_mot_de_passe_securise
# Exemples :
# DATABASE_URL=postgresql://postgres:motdepasse@192.168.1.100:5432/regisflow
# DATABASE_URL=postgresql://regisflow:secret@10.0.0.50:5432/regisflow
# Configuration de l'application # Configuration de l'application
NODE_ENV=production NODE_ENV=production
@@ -45,6 +48,8 @@ SESSION_SECRET=votre-cle-secrete-super-longue-et-complexe
TZ=Europe/Paris TZ=Europe/Paris
``` ```
**Important**: Remplacez `IP_SERVEUR`, `username`, `password` par les vraies valeurs de votre serveur PostgreSQL.
### 3. Lancer l'application ### 3. Lancer l'application
**Option 1 : Script automatique (recommandé)** **Option 1 : Script automatique (recommandé)**
@@ -68,20 +73,18 @@ docker-compose logs -f
## 📋 Services Inclus ## 📋 Services Inclus
### 1. PostgreSQL (Base de données) ### RegisFlow (Application)
- **Port externe**: 5433 (pour éviter les conflits avec PostgreSQL local)
- **Port interne**: 5432 (communication entre containers Docker)
- **Database**: regisflow
- **Utilisateur**: regisflow
- **Données persistantes**: Volume `postgres_data`
- **Note**: L'application se connecte via le réseau Docker interne sur le port 5432
### 2. RegisFlow (Application)
- **Port**: 5000 - **Port**: 5000
- **Dépendances**: PostgreSQL - **Base de données**: PostgreSQL externe (configurée via DATABASE_URL)
- **Sauvegardes**: Volume `backup_data` - **Sauvegardes**: Volume `backup_data`
- **Health check**: `/health` - **Health check**: `/health`
### Configuration PostgreSQL Externe
- **Prérequis**: Serveur PostgreSQL accessible depuis Docker
- **Configuration**: Via variable d'environnement DATABASE_URL
- **Accès réseau**: Le container doit pouvoir accéder à l'IP de votre serveur PostgreSQL
- **Firewall**: Autoriser les connexions depuis l'IP du container Docker
## 🔧 Commandes Utiles ## 🔧 Commandes Utiles
+2 -29
View File
@@ -1,37 +1,14 @@
version: '3.8' version: '3.8'
services: services:
# Base de données PostgreSQL # Application RegisFlow seule (base de données externe)
postgres:
image: postgres:15-alpine
container_name: regisflow-db
environment:
POSTGRES_DB: regisflow
POSTGRES_USER: regisflow
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-regisflow2024}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
ports:
- "5433:5432"
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U regisflow -d regisflow"]
interval: 10s
timeout: 5s
retries: 5
# Application RegisFlow
regisflow: regisflow:
build: . build: .
container_name: regisflow-app container_name: regisflow-app
depends_on:
postgres:
condition: service_healthy
environment: environment:
NODE_ENV: production NODE_ENV: production
PORT: 5000 PORT: 5000
DATABASE_URL: postgresql://regisflow:${POSTGRES_PASSWORD:-regisflow2024}@postgres:5432/regisflow DATABASE_URL: ${DATABASE_URL}
SESSION_SECRET: ${SESSION_SECRET:-your-super-secret-session-key-change-in-production} SESSION_SECRET: ${SESSION_SECRET:-your-super-secret-session-key-change-in-production}
TZ: Europe/Paris TZ: Europe/Paris
volumes: volumes:
@@ -46,10 +23,6 @@ services:
retries: 3 retries: 3
start_period: 60s start_period: 60s
volumes: volumes:
postgres_data:
driver: local
backup_data: backup_data:
driver: local driver: local
+26 -10
View File
@@ -4,27 +4,43 @@ set -e
# Script d'entrée pour le container RegisFlow # Script d'entrée pour le container RegisFlow
echo "🚀 Démarrage de RegisFlow..." echo "🚀 Démarrage de RegisFlow..."
# Attendre que la base de données soit prête # Attendre que la base de données externe soit prête
echo "📡 Attente de la base de données..." echo "📡 Attente de la base de données externe..."
echo "🔍 Test de connexion à postgres:5432..."
# Attendre jusqu'à 120 secondes pour PostgreSQL # Extraire l'hôte et le port depuis DATABASE_URL
DB_HOST=$(echo $DATABASE_URL | sed -n 's|.*@\([^:]*\):.*|\1|p')
DB_PORT=$(echo $DATABASE_URL | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
DB_USER=$(echo $DATABASE_URL | sed -n 's|.*://\([^:]*\):.*|\1|p')
if [ -z "$DB_HOST" ] || [ -z "$DB_PORT" ]; then
echo "❌ Erreur: DATABASE_URL mal formatée"
echo "Format attendu: postgresql://user:password@host:port/database"
echo "DATABASE_URL actuelle: $DATABASE_URL"
exit 1
fi
echo "🔍 Test de connexion à $DB_HOST:$DB_PORT..."
# Attendre jusqu'à 120 secondes pour PostgreSQL externe
RETRIES=24 RETRIES=24
while [ $RETRIES -gt 0 ]; do while [ $RETRIES -gt 0 ]; do
if pg_isready -h postgres -p 5432 -U regisflow; then if pg_isready -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER"; then
echo "✅ PostgreSQL est prêt!" echo "✅ PostgreSQL externe est prêt!"
break break
fi fi
echo "⏳ Base de données non prête, tentative $((25-RETRIES))/24, attente de 5 secondes..." echo "⏳ Base de données externe non prête, tentative $((25-RETRIES))/24, attente de 5 secondes..."
sleep 5 sleep 5
RETRIES=$((RETRIES-1)) RETRIES=$((RETRIES-1))
done done
if [ $RETRIES -eq 0 ]; then if [ $RETRIES -eq 0 ]; then
echo "❌ Timeout: Impossible de se connecter à PostgreSQL après 2 minutes" echo "❌ Timeout: Impossible de se connecter à PostgreSQL externe après 2 minutes"
echo "🔍 Diagnostic:" echo "🔍 Diagnostic:"
echo " - Vérifiez que le service postgres démarre correctement" echo " - Host: $DB_HOST"
echo " - Vérifiez les logs: docker-compose logs postgres" echo " - Port: $DB_PORT"
echo " - User: $DB_USER"
echo " - Vérifiez que PostgreSQL est accessible depuis Docker"
echo " - Vérifiez le firewall et les permissions réseau"
exit 1 exit 1
fi fi