mirror of
https://github.com/R0m1k3/Regisflow.git
synced 2026-10-20 05:38:18 +02:00
Integrate internal database within Docker for simplified setup and deployment
Configures PostgreSQL to run inside Docker, streamlining deployment and simplifying database management using Drizzle ORM. 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:
1 parent
e8977554e1
commit
a4c5301d74
7 files changed
+69
-70
No files matched your search
+10
-12
@@ -1,22 +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 (EXTERNE)
|
# Configuration de la base de données (DOCKER INTERNE)
|
||||||
# PRÉCONFIGURÉE - Changez seulement l'IP de votre serveur PostgreSQL
|
# PRÉCONFIGURÉE - PostgreSQL et RegisFlow dans Docker
|
||||||
DATABASE_URL=postgresql://regisflow:RegisFlow2024!@192.168.1.100:5433/regisflow
|
# Communication via nom de container : regisflow-db:5432
|
||||||
|
|
||||||
# Configuration standard préconfigurée :
|
# Configuration PostgreSQL
|
||||||
|
POSTGRES_PASSWORD=RegisFlow2024!
|
||||||
|
|
||||||
|
# Configuration automatique (NE PAS CHANGER) :
|
||||||
|
# - Container PostgreSQL : regisflow-db
|
||||||
# - Utilisateur: regisflow
|
# - Utilisateur: regisflow
|
||||||
# - Mot de passe: RegisFlow2024!
|
# - Mot de passe: RegisFlow2024!
|
||||||
# - Base de données: regisflow
|
# - Base de données: regisflow
|
||||||
# - Port: 5433
|
# - Port interne: 5432 (communication Docker)
|
||||||
#
|
# - Port externe: 5433 (accès depuis l'hôte)
|
||||||
# SEULE MODIFICATION NÉCESSAIRE: Remplacez 192.168.1.100 par l'IP de votre serveur PostgreSQL
|
|
||||||
#
|
|
||||||
# Instructions pour votre serveur PostgreSQL :
|
|
||||||
# 1. Créer l'utilisateur : CREATE USER regisflow WITH PASSWORD 'RegisFlow2024!';
|
|
||||||
# 2. Créer la base : CREATE DATABASE regisflow OWNER regisflow;
|
|
||||||
# 3. Donner les permissions : GRANT ALL PRIVILEGES ON DATABASE regisflow TO regisflow;
|
|
||||||
|
|
||||||
# Configuration de l'application
|
# Configuration de l'application
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
|
|||||||
+14
-11
@@ -30,8 +30,8 @@ nano .env
|
|||||||
Éditez le fichier `.env` avec votre serveur PostgreSQL externe :
|
Éditez le fichier `.env` avec votre serveur PostgreSQL externe :
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Configuration de la base de données EXTERNE (PRÉCONFIGURÉE)
|
# Configuration PostgreSQL (PRÉCONFIGURÉE)
|
||||||
DATABASE_URL=postgresql://regisflow:RegisFlow2024!@VOTRE_IP_POSTGRES:5433/regisflow
|
POSTGRES_PASSWORD=RegisFlow2024!
|
||||||
|
|
||||||
# Configuration de l'application
|
# Configuration de l'application
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
@@ -100,18 +100,21 @@ docker-compose logs -f
|
|||||||
|
|
||||||
## 📋 Services Inclus
|
## 📋 Services Inclus
|
||||||
|
|
||||||
### RegisFlow (Application)
|
### 1. PostgreSQL (Base de données)
|
||||||
|
- **Container**: regisflow-db
|
||||||
|
- **Port externe**: 5433 (accès depuis l'hôte)
|
||||||
|
- **Port interne**: 5432 (communication Docker)
|
||||||
|
- **Database**: regisflow
|
||||||
|
- **Utilisateur**: regisflow
|
||||||
|
- **Données persistantes**: Volume `postgres_data`
|
||||||
|
|
||||||
|
### 2. RegisFlow (Application)
|
||||||
|
- **Container**: regisflow-app
|
||||||
- **Port**: 5000
|
- **Port**: 5000
|
||||||
- **Base de données**: PostgreSQL externe (configurée via DATABASE_URL)
|
- **Dépendances**: regisflow-db
|
||||||
- **Sauvegardes**: Volume `backup_data`
|
- **Sauvegardes**: Volume `backup_data`
|
||||||
- **Health check**: `/health`
|
- **Health check**: `/health`
|
||||||
|
- **Connexion DB**: Via nom de container `regisflow-db:5432`
|
||||||
### Configuration PostgreSQL Externe
|
|
||||||
- **Prérequis**: Serveur PostgreSQL accessible depuis Docker
|
|
||||||
- **Port**: 5433 (standard pour PostgreSQL externe)
|
|
||||||
- **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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
+27
-2
@@ -1,14 +1,37 @@
|
|||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Application RegisFlow seule (base de données externe)
|
# 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!}
|
||||||
|
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:
|
||||||
|
regisflow-db:
|
||||||
|
condition: service_healthy
|
||||||
environment:
|
environment:
|
||||||
NODE_ENV: production
|
NODE_ENV: production
|
||||||
PORT: 5000
|
PORT: 5000
|
||||||
DATABASE_URL: ${DATABASE_URL}
|
DATABASE_URL: postgresql://regisflow:${POSTGRES_PASSWORD:-RegisFlow2024!}@regisflow-db:5432/regisflow
|
||||||
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:
|
||||||
@@ -24,5 +47,7 @@ services:
|
|||||||
start_period: 60s
|
start_period: 60s
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
postgres_data:
|
||||||
|
driver: local
|
||||||
backup_data:
|
backup_data:
|
||||||
driver: local
|
driver: local
|
||||||
+10
-26
@@ -4,43 +4,27 @@ 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 externe soit prête
|
# Attendre que la base de données Docker soit prête
|
||||||
echo "📡 Attente de la base de données externe..."
|
echo "📡 Attente de la base de données regisflow-db..."
|
||||||
|
echo "🔍 Test de connexion à regisflow-db:5432..."
|
||||||
|
|
||||||
# Extraire l'hôte et le port depuis DATABASE_URL
|
# Attendre jusqu'à 120 secondes pour PostgreSQL Docker
|
||||||
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 "$DB_HOST" -p "$DB_PORT" -U "$DB_USER"; then
|
if pg_isready -h regisflow-db -p 5432 -U regisflow; then
|
||||||
echo "✅ PostgreSQL externe est prêt!"
|
echo "✅ PostgreSQL regisflow-db est prêt!"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
echo "⏳ Base de données externe non prête, tentative $((25-RETRIES))/24, attente de 5 secondes..."
|
echo "⏳ Base de données 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 externe après 2 minutes"
|
echo "❌ Timeout: Impossible de se connecter à regisflow-db après 2 minutes"
|
||||||
echo "🔍 Diagnostic:"
|
echo "🔍 Diagnostic:"
|
||||||
echo " - Host: $DB_HOST"
|
echo " - Vérifiez que le service regisflow-db démarre correctement"
|
||||||
echo " - Port: $DB_PORT"
|
echo " - Vérifiez les logs: docker-compose logs regisflow-db"
|
||||||
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
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,10 @@
|
|||||||
-- Script d'initialisation pour la base de données RegisFlow
|
-- Script d'initialisation PostgreSQL pour RegisFlow
|
||||||
-- Ce script sera exécuté automatiquement lors de la création du container PostgreSQL
|
-- Exécuté automatiquement lors de la création du container
|
||||||
|
|
||||||
-- Créer les extensions nécessaires
|
-- L'utilisateur et la base sont créés automatiquement via les variables d'environnement
|
||||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
-- POSTGRES_USER=regisflow
|
||||||
|
-- POSTGRES_DB=regisflow
|
||||||
|
-- POSTGRES_PASSWORD=RegisFlow2024!
|
||||||
|
|
||||||
-- Créer la table des sessions (nécessaire pour express-session)
|
-- Configuration additionnelle si nécessaire
|
||||||
CREATE TABLE IF NOT EXISTS sessions (
|
-- (Actuellement vide car Drizzle ORM gère la création des tables)
|
||||||
sid varchar NOT NULL COLLATE "default",
|
|
||||||
sess json NOT NULL,
|
|
||||||
expire timestamp(6) NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Créer un index sur la colonne d'expiration
|
|
||||||
CREATE INDEX IF NOT EXISTS "IDX_session_expire" ON sessions ("expire");
|
|
||||||
|
|
||||||
-- Créer la clé primaire pour la table des sessions
|
|
||||||
ALTER TABLE sessions ADD CONSTRAINT "session_pkey" PRIMARY KEY (sid) NOT DEFERRABLE INITIALLY IMMEDIATE;
|
|
||||||
|
|
||||||
-- Créer un utilisateur pour l'application (optionnel, déjà créé par les variables d'environnement)
|
|
||||||
-- Les autres tables seront créées automatiquement par Drizzle lors du démarrage de l'application
|
|
||||||
Reference in new issue
Block a user