Clean up project by removing unnecessary files and configurations

Removes obsolete deployment guides, scripts, nginx configs, and simplifies the Docker setup, favoring a single docker-compose.yml.

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/99451107-d8a0-4f61-81e0-cae481285260.jpg
This commit is contained in:
michaelschal committed 2025-07-09 22:26:11 +00:00
1 parent 07baa59225
commit 49e15b7e46
33 files changed
+69 -2743

No files matched your search

-244
View File
@@ -1,244 +0,0 @@
# Guide de Déploiement Production RegisFlow
## Pré-requis
1. **Docker et Docker Compose installés**
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install docker.io docker-compose
# CentOS/RHEL
sudo yum install docker docker-compose
```
2. **Cloner le projet**
```bash
git clone <votre-repo-regisflow>
cd regisflow
```
## Configuration de Production
### 1. Créer le fichier d'environnement
```bash
# Copier le fichier d'exemple
cp .env.example .env
# Éditer le fichier .env avec vos valeurs
nano .env
```
### 2. Configurer les variables OBLIGATOIRES
Dans le fichier `.env`, changez OBLIGATOIREMENT :
```bash
# Générer un mot de passe fort pour PostgreSQL
POSTGRES_PASSWORD=VotreMotDePassePostgreSQL2024!
# Générer une clé secrète pour les sessions
SESSION_SECRET=$(openssl rand -base64 32)
```
### 3. Créer les répertoires de données
```bash
# Créer les répertoires nécessaires
mkdir -p data/{postgres,backups,logs,postgres-logs}
chmod 755 data data/*
```
## Déploiement Automatique
### Option 1 : Script de déploiement automatique
```bash
# Rendre le script exécutable
chmod +x deploy-prod.sh
# Exécuter le déploiement
./deploy-prod.sh
```
### Option 2 : Déploiement manuel
```bash
# Construire les images
docker-compose build
# Démarrer les services
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# Vérifier le statut
docker-compose ps
```
## Vérification du Déploiement
1. **Vérifier les services**
```bash
docker-compose ps
```
2. **Accéder à l'application**
- RegisFlow : http://localhost:5000
- PostgreSQL : localhost:5433
3. **Vérifier les logs**
```bash
# Logs application
docker-compose logs regisflow
# Logs base de données
docker-compose logs regisflow-db
```
## Connexion Initiale
1. **Compte administrateur par défaut**
- Utilisateur : `admin`
- Mot de passe : `admin123`
2. **Première connexion**
- Connectez-vous avec les identifiants par défaut
- Changez IMMÉDIATEMENT le mot de passe administrateur
- Créez vos utilisateurs et magasins
## Maintenance
### Sauvegardes
```bash
# Sauvegarde manuelle
docker-compose exec regisflow-db pg_dump -U regisflow regisflow > backup_$(date +%Y%m%d).sql
# Sauvegarde automatique (déjà configurée dans l'app)
# - Toutes les 12 heures
# - Conservation des 10 dernières sauvegardes
```
### Monitoring
```bash
# Utiliser le script de monitoring
./monitoring.sh
# Ou manuellement
docker-compose logs -f
docker stats
```
### Mise à jour
```bash
# Arrêter les services
docker-compose down
# Récupérer les mises à jour
git pull
# Reconstruire et redémarrer
docker-compose build
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
```
## Sécurité Production
### Configuration HTTPS (Recommandé)
1. **Installer Nginx**
```bash
sudo apt install nginx
```
2. **Configurer le reverse proxy**
```bash
# Copier la configuration Nginx
sudo cp nginx-reverse-proxy.conf /etc/nginx/sites-available/regisflow
sudo ln -s /etc/nginx/sites-available/regisflow /etc/nginx/sites-enabled/
# Redémarrer Nginx
sudo systemctl restart nginx
```
3. **Obtenir un certificat SSL**
```bash
# Installer Certbot
sudo apt install certbot python3-certbot-nginx
# Obtenir le certificat
sudo certbot --nginx -d votre-domaine.com
```
### Sécurisation
1. **Firewall**
```bash
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```
2. **Permissions**
```bash
chmod 600 .env
chown root:root .env
```
## Dépannage
### Problèmes courants
1. **Service ne démarre pas**
```bash
docker-compose logs regisflow
```
2. **Base de données non accessible**
```bash
docker-compose exec regisflow-db psql -U regisflow -d regisflow
```
3. **Erreur de migration**
```bash
docker-compose exec regisflow npx drizzle-kit push
```
### Commandes utiles
```bash
# Redémarrer un service
docker-compose restart regisflow
# Accéder au container
docker-compose exec regisflow sh
# Voir les ressources utilisées
docker stats
# Nettoyer les volumes (ATTENTION : supprime les données)
docker-compose down -v
```
## Support
- **Documentation** : README.md
- **Configuration** : .env.example
- **Logs** : `docker-compose logs -f`
- **Monitoring** : `./monitoring.sh`
## Caractéristiques Production
- ✅ Multi-utilisateur avec rôles (Admin, Manager, Employee)
- ✅ Multi-magasins avec isolation des données
- ✅ Sauvegardes automatiques toutes les 12 heures
- ✅ Purge automatique des données > 19 mois
- ✅ Interface responsive mobile/desktop
- ✅ Export PDF et CSV
- ✅ Validation EAN-13 et conformité réglementaire
- ✅ Sécurité par défaut (HTTPS, sessions sécurisées)
- ✅ Monitoring et health checks
- ✅ Conteneurs sécurisés (utilisateur non-root)
-108
View File
@@ -1,108 +0,0 @@
# Guide de Test Docker pour RegisFlow
## ✅ Problème Résolu
Le problème `TypeError [ERR_INVALID_ARG_TYPE]: The "paths[0]" argument must be of type string. Received undefined` a été résolu avec un script de compatibilité Node.js 18.
### Cause du Problème
- Node.js 18 ne supporte pas `import.meta.dirname`
- Le code compilé dans `dist/index.js` utilise cette fonctionnalité non disponible
- L'erreur se produit lors de la résolution des chemins (ligne 955 dans dist/index.js)
### Solution Appliquée
- Création d'un script `server/prod-start.js` qui remplace `import.meta.dirname` par des valeurs statiques
- Modification du script Docker d'entrée pour utiliser ce script de compatibilité
- Le script lit le fichier compilé et remplace les références undefined par des chemins absolus
- Création automatique du répertoire `public` pour les fichiers statiques
## Test du Déploiement Docker
### 1. Construction du Conteneur
```bash
# Construire l'image RegisFlow
docker-compose build regisflow
# Ou reconstruction complète
docker-compose build --no-cache regisflow
```
### 2. Démarrage des Services
```bash
# Démarrer tous les services
docker-compose up -d
# Vérifier les logs
docker-compose logs -f regisflow
docker-compose logs -f regisflow-db
```
### 3. Vérification du Fonctionnement
```bash
# Statut des conteneurs
docker-compose ps
# Test de connexion
curl http://localhost:5000/api/health
# Accès à l'application
# http://localhost:5000
```
### 4. Arrêt et Nettoyage
```bash
# Arrêter les services
docker-compose down
# Nettoyage complet avec volumes
docker-compose down -v
```
## Configuration Finale
### Fichiers Modifiés
- `docker-entrypoint-simple.sh` : Script d'entrée robuste
- `Dockerfile` : Configuration optimisée pour Node.js 18
- `.env` : Variables préconfigurées pour installation automatique
### Variables d'Environnement par Défaut
```env
DATABASE_URL=postgresql://regisflow:RegisFlow2024!PostgreSQL@regisflow-db:5432/regisflow
SESSION_SECRET=RegisFlow2024SessionSecretKey1234567890ABCDEF
NODE_ENV=production
PORT=5000
```
### Fonctionnalités Opérationnelles
- ✅ Application web responsive
- ✅ Base de données PostgreSQL intégrée
- ✅ Authentification multi-utilisateur
- ✅ Gestion des magasins et utilisateurs
- ✅ Enregistrement des ventes conformes
- ✅ Sauvegardes automatiques
- ✅ Purge automatique (19 mois)
- ✅ Export PDF et CSV
## Logs Attendus au Démarrage
```
🚀 Démarrage de RegisFlow (mode simplifié)...
📡 Attente de la base de données...
✅ PostgreSQL prêt!
✅ Base de données configurée
🎯 Démarrage de RegisFlow...
✅ Node.js 18 compatibility fix applied
serving on port 5000
📅 Automatic backup scheduler started
🕐 Planificateur de purge des ventes démarré
```
### Fichiers de Solution
- `server/prod-start.js` : Script de compatibilité Node.js 18
- `docker-entrypoint-simple.sh` : Script d'entrée Docker simplifié
- `Dockerfile` : Configuration optimisée pour production
## Compte par Défaut
- **Utilisateur** : admin
- **Mot de passe** : admin123
⚠️ **Important** : Changez le mot de passe par défaut après la première connexion pour des raisons de sécurité.
-1
View File
@@ -55,7 +55,6 @@ RUN npm cache clean --force && \
# Copier les scripts de configuration
COPY --chown=regisflow:nodejs docker-entrypoint-simple.sh /usr/local/bin/docker-entrypoint.sh
COPY --chown=regisflow:nodejs postgres-prod.conf ./
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Changer vers l'utilisateur non-root
-105
View File
@@ -1,105 +0,0 @@
# Installation Simple RegisFlow
## 🎯 Installation Sans Intervention
RegisFlow est maintenant configuré pour une installation complètement automatique sans aucune intervention manuelle.
## 🚀 Installation en 2 Commandes
### Option 1 : Installation automatique (Recommandé)
```bash
# Installation complète en une commande
./install-simple.sh
```
### Option 2 : Installation manuelle
```bash
# Construire et démarrer
docker-compose build
docker-compose up -d
```
## ✅ Configuration Automatique
- **Mots de passe pré-configurés** : Aucune modification nécessaire
- **Base de données** : Configuration automatique PostgreSQL
- **Sessions** : Clé secrète pré-générée
- **Répertoires** : Création automatique des dossiers de données
- **Migrations** : Exécution automatique au démarrage
## 📊 Accès Immédiat
- **URL** : http://localhost:5000
- **Utilisateur** : admin
- **Mot de passe** : admin123
- **PostgreSQL** : localhost:5433
## 🔧 Mots de Passe Pré-configurés
```bash
# PostgreSQL
POSTGRES_PASSWORD=RegisFlow2024!PostgreSQL
# Sessions
SESSION_SECRET=RegisFlow2024SessionSecretKey1234567890ABCDEF
# Compte admin par défaut
Utilisateur: admin
Mot de passe: admin123
```
## 📋 Commandes de Base
```bash
# Démarrer les services
docker-compose up -d
# Voir les logs
docker-compose logs -f
# Arrêter les services
docker-compose down
# Vérifier le statut
docker-compose ps
```
## 🔒 Sécurité pour Production
Une fois l'installation testée, pour la production :
1. **Changez les mots de passe** dans le fichier `.env`
2. **Configurez HTTPS** avec un reverse proxy
3. **Changez le mot de passe admin** dans l'interface
## 🛠️ Dépannage
```bash
# Si un service ne démarre pas
docker-compose logs regisflow
# Redémarrer tous les services
docker-compose restart
# Nettoyer et redémarrer
docker-compose down
docker-compose up -d
```
## 📱 Fonctionnalités Disponibles
- ✅ Multi-utilisateur (Admin/Manager/Employee)
- ✅ Multi-magasins avec isolation
- ✅ Sauvegardes automatiques
- ✅ Purge automatique (19 mois)
- ✅ Export PDF/CSV
- ✅ Validation EAN-13
- ✅ Interface mobile responsive
## 🎉 Installation Terminée !
L'application RegisFlow est maintenant accessible sur http://localhost:5000 avec le compte admin/admin123.
**Aucune configuration supplémentaire n'est nécessaire pour commencer à utiliser l'application.**
-124
View File
@@ -1,124 +0,0 @@
# Configuration Réseau Docker - RegisFlow
## 🌐 Problématique des Conflits Réseau
Le sous-réseau `172.20.0.0/24` peut créer des conflits avec des réseaux existants sur certains systèmes. Pour éviter ces problèmes, RegisFlow propose plusieurs configurations.
## 🔧 Configuration Simplifiée
### Configuration Unique
**Fichier** : `docker-compose.yml`
```yaml
# Utilise le réseau par défaut de Docker
networks:
default:
driver: bridge
```
**Avantages** :
- Aucun conflit de sous-réseau
- Docker gère automatiquement les adresses IP
- Configuration la plus simple
- Compatible avec tous les environnements
**Utilisation** :
```bash
docker-compose up -d
```
### Configuration Personnalisée (Si Nécessaire)
Si vous avez des exigences spécifiques, modifiez le sous-réseau :
```yaml
networks:
regisflow-internal:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.100.0.0/24 # Votre sous-réseau
```
## 📋 Sous-réseaux Recommandés
### Évitez ces plages (souvent utilisées) :
- `172.16.0.0/12` - Réseaux privés Docker
- `192.168.1.0/24` - Réseaux domestiques
- `10.0.0.0/8` - Réseaux d'entreprise
### Utilisez ces plages (plus sûres) :
- `192.168.200.0/24` - Peu utilisé
- `172.30.0.0/24` - Rarement en conflit
- `10.100.0.0/24` - Espace libre
## 🔍 Vérifier les Conflits
```bash
# Voir les réseaux Docker existants
docker network ls
# Voir les détails d'un réseau
docker network inspect bridge
# Voir les routes système
ip route show
# Vérifier les interfaces réseau
ip addr show
```
## 🛠️ Résolution des Conflits
### Si vous avez un conflit :
1. **Identifier le conflit** :
```bash
docker network inspect regisflow_regisflow-internal
```
2. **Changer le sous-réseau** :
```bash
# Arrêter les services
docker-compose down
# Supprimer le réseau
docker network rm regisflow_regisflow-internal
# Modifier docker-compose.yml avec un nouveau sous-réseau
# Puis redémarrer
docker-compose up -d
```
3. **Ou utiliser la configuration simple** :
```bash
docker-compose -f docker-compose.simple.yml up -d
```
## 🎯 Recommandations
### Pour tous les environnements :
- Utilisez `docker-compose.yml`
- Aucune configuration réseau nécessaire
- Démarrage rapide et compatible
### Si vous avez des besoins spécifiques :
- Modifiez le fichier `docker-compose.yml`
- Ajoutez une configuration réseau personnalisée
- Testez avant déploiement
## 📚 Scripts Inclus
- `install-simple.sh` - Installation automatique
- `deploy-prod.sh` - Déploiement production
- `monitoring.sh` - Surveillance des services
## 🔒 Sécurité
La configuration est sécurisée :
- Communications chiffrées entre conteneurs
- Isolation des services
- Accès contrôlé aux ports
- Réseau Docker par défaut isolé du réseau hôte
-99
View File
@@ -1,99 +0,0 @@
# Démarrage Rapide RegisFlow
## 🚀 Installation Ultra-Simple
RegisFlow est maintenant configuré pour une installation sans aucune configuration réseau complexe.
### Installation en 1 Minute
```bash
# Télécharger le projet
git clone [url-du-projet]
cd regisflow
# Installer immédiatement
docker-compose up -d
```
**C'est tout !** L'application est accessible sur http://localhost:5000
## ✅ Configuration Automatique
- **Mots de passe** : Pré-configurés dans le fichier `.env`
- **Base de données** : PostgreSQL configurée automatiquement
- **Réseau** : Utilise le réseau par défaut Docker (aucun conflit IP)
- **Volumes** : Gérés automatiquement par Docker
- **Migrations** : Exécutées automatiquement au démarrage
## 🎯 Accès Immédiat
- **Application** : http://localhost:5000
- **Utilisateur** : admin
- **Mot de passe** : admin123
- **PostgreSQL** : localhost:5433
## 🔧 Commandes Utiles
```bash
# Voir les logs
docker-compose logs -f
# Redémarrer
docker-compose restart
# Arrêter
docker-compose down
# Statut
docker-compose ps
```
## 🛠️ Problèmes Courants
### Application ne démarre pas
```bash
# Vérifier Docker
docker --version
docker-compose --version
# Nettoyer et redémarrer
docker-compose down
docker-compose up -d
```
### Port 5000 déjà utilisé
```bash
# Changer le port dans docker-compose.yml
ports:
- "5001:5000" # Utiliser port 5001 au lieu de 5000
```
### Conflit PostgreSQL
```bash
# Changer le port PostgreSQL
ports:
- "5434:5432" # Utiliser port 5434 au lieu de 5433
```
## 🔒 Sécurité pour Production
Une fois testé, pour la production :
1. **Changer les mots de passe** dans `.env`
2. **Configurer HTTPS** si nécessaire
3. **Changer le mot de passe admin** dans l'application
## 📱 Fonctionnalités Disponibles
- Multi-utilisateur avec rôles
- Multi-magasins
- Enregistrement des ventes
- Historique complet
- Sauvegardes automatiques
- Purge automatique (19 mois)
- Export PDF/CSV
- Interface mobile
## 🎉 Prêt !
L'application RegisFlow est maintenant prête à l'emploi sans aucune configuration supplémentaire.
+64 -89
View File
@@ -1,110 +1,85 @@
# Registre des Ventes de Pétards
# RegisFlow
Application React complète pour la gestion et le suivi des ventes de feux d'artifice en conformité avec la réglementation française.
Application web complète de gestion des ventes de feux d'artifice en conformité avec la réglementation française.
## Fonctionnalités
### 🔐 Système d'authentification
- Connexion par nom d'utilisateur et mot de passe
- Système de rôles : Administrateur, Manager, Employé
- Sessions sécurisées avec PostgreSQL
- ✅ Authentification multi-utilisateur avec rôles (Admin, Manager, Employee)
- ✅ Gestion multi-magasins avec isolation des données
- ✅ Enregistrement des ventes conforme à la réglementation
- ✅ Sauvegardes automatiques toutes les 12h
- ✅ Purge automatique des données (19 mois de rétention)
- ✅ Export CSV/PDF pour rapports réglementaires
- ✅ Interface responsive avec design moderne
### 👥 Gestion des utilisateurs et magasins
- **Administrateur** : Accès complet à toutes les fonctionnalités
- **Manager** : Accès à toutes les fonctionnalités sauf l'administration et les sauvegardes automatiques
- **Employé** : Création de ventes et consultation de l'historique uniquement
## Démarrage Rapide
### 🏪 Multi-magasins
- Chaque magasin a son propre historique de ventes
- Les utilisateurs sont liés à un magasin spécifique
- Isolation des données par magasin
### Développement
```bash
# Installation des dépendances
npm install
### 📋 Enregistrement des ventes
- Formulaire complet avec validation des champs obligatoires
- Support des codes EAN13 avec validation
- Capture photo des pièces d'identité
- Classification des produits (F2/F3)
# Démarrage en développement
npm run dev
```
### 📊 Historique et export
- Historique des ventes avec filtrage par dates
- Export CSV pour la conformité réglementaire
- Suppression des ventes (Manager et Administrateur uniquement)
### Production avec Docker
```bash
# Démarrage simple
docker-compose up -d
## Installation et démarrage
1. **Installation des dépendances :**
```bash
npm install
```
2. **Configuration de la base de données :**
```bash
npm run db:push
```
3. **Démarrage de l'application :**
```bash
npm run dev
```
## 🔑 Compte administrateur par défaut
Lors de la première installation sur une base de données vierge, un compte administrateur est automatiquement créé :
**Nom d'utilisateur :** `admin`
**Mot de passe :** `admin123`
⚠️ **IMPORTANT** : Changez ce mot de passe immédiatement après la première connexion !
# Vérification des logs
docker-compose logs -f regisflow
```
## Configuration
### Variables d'environnement
- `DATABASE_URL` : URL de connexion PostgreSQL
- `SESSION_SECRET` : Clé secrète pour les sessions (optionnel, une clé par défaut est générée)
### Variables d'environnement (.env)
```env
DATABASE_URL=postgresql://regisflow:RegisFlow2024!PostgreSQL@regisflow-db:5432/regisflow
SESSION_SECRET=RegisFlow2024SessionSecretKey1234567890ABCDEF
NODE_ENV=production
PORT=5000
```
### Structure des rôles
### Compte par défaut
- **Utilisateur** : admin
- **Mot de passe** : admin123
#### Administrateur
- ✅ Création et gestion des utilisateurs
- ✅ Création et gestion des magasins
- ✅ Accès à toutes les ventes de tous les magasins
- ✅ Suppression des ventes
- ✅ Export des données
- ✅ Sauvegardes automatiques
⚠️ **Important** : Changez le mot de passe par défaut après la première connexion.
#### Manager
- ✅ Création de ventes
- ✅ Consultation de l'historique du magasin
- ✅ Suppression des ventes
- ✅ Export des données
- ❌ Administration des utilisateurs/magasins
- ❌ Sauvegardes automatiques
## Architecture Technique
#### Employé
- ✅ Création de ventes
- ✅ Consultation de l'historique du magasin
- ❌ Suppression des ventes
- ❌ Export des données
- ❌ Administration
- ❌ Sauvegardes automatiques
## Technologies utilisées
- **Frontend** : React 18, TypeScript, TailwindCSS, shadcn/ui
- **Backend** : Express.js, TypeScript
- **Frontend** : React 18 + TypeScript + TailwindCSS + shadcn/ui
- **Backend** : Express.js + TypeScript
- **Base de données** : PostgreSQL avec Drizzle ORM
- **Authentification** : Sessions avec bcrypt
- **Stockage local** : IndexedDB pour la résilience
- **Authentification** : Sessions sécurisées avec bcrypt
- **Déploiement** : Docker avec multi-stage build
## Conformité réglementaire
## Scripts Disponibles
L'application respecte les exigences françaises pour la vente de feux d'artifice :
- Enregistrement obligatoire des informations vendeur
- Vérification de l'identité de l'acheteur
- Classification des produits (F2/F3)
- Traçabilité complète des ventes
- Export des données pour les autorités
- `npm run dev` : Développement avec hot-reload
- `npm run build` : Construction pour production
- `npm run start` : Démarrage en production
- `npm run db:push` : Migration de base de données
## Support
## Structure du Projet
Pour toute question ou problème, consultez la documentation ou contactez l'administrateur système.
```
RegisFlow/
├── client/ # Frontend React
├── server/ # Backend Express
├── shared/ # Types partagés et schémas
├── backups/ # Sauvegardes automatiques
├── docker-compose.yml
├── Dockerfile
└── README.md
```
## Conformité Réglementaire
L'application respecte la réglementation française pour la vente de feux d'artifice :
- Enregistrement obligatoire des ventes
- Conservation des données pendant 19 mois
- Purge automatique des données expirées
- Traçabilité complète des transactions
-328
View File
@@ -1,328 +0,0 @@
# RegisFlow - Déploiement Docker
Ce guide vous explique comment déployer RegisFlow avec Docker et Docker Compose.
## 🐳 Prérequis
- Docker Engine 20.10 ou supérieur
- Docker Compose 2.0 ou supérieur
- Au minimum 1 GB de RAM libre
- Au minimum 2 GB d'espace disque libre
## 🚀 Démarrage Rapide
### 1. Préparer l'environnement
```bash
# Cloner le projet
git clone <votre-repo>
cd regisflow
# Copier et configurer le fichier d'environnement
cp .env.example .env
# Éditer le fichier .env avec vos paramètres
nano .env
```
### 2. Configurer les variables d'environnement
Éditez le fichier `.env` avec votre serveur PostgreSQL externe :
```env
# Configuration PostgreSQL (PRÉCONFIGURÉE)
POSTGRES_PASSWORD=RegisFlow2024!
# Configuration de l'application
NODE_ENV=production
PORT=5000
# Clé secrète pour les sessions (OBLIGATOIRE EN PRODUCTION)
SESSION_SECRET=votre-cle-secrete-super-longue-et-complexe
# Configuration du timezone
TZ=Europe/Paris
```
### Préparation de votre serveur PostgreSQL
**1. Se connecter à PostgreSQL :**
```sql
sudo -u postgres psql
```
**2. Créer l'utilisateur et la base (préconfigurés) :**
```sql
CREATE USER regisflow WITH PASSWORD 'RegisFlow2024!';
CREATE DATABASE regisflow OWNER regisflow;
GRANT ALL PRIVILEGES ON DATABASE regisflow TO regisflow;
\q
```
**3. Configuration réseau PostgreSQL :**
Éditez `/etc/postgresql/*/main/postgresql.conf` :
```
listen_addresses = '*'
```
Éditez `/etc/postgresql/*/main/pg_hba.conf` :
```
host regisflow regisflow 0.0.0.0/0 md5
```
**4. Redémarrer PostgreSQL :**
```bash
sudo systemctl restart postgresql
```
**AUCUNE MODIFICATION NÉCESSAIRE** : Tout est préconfigué pour fonctionner immédiatement.
### 3. Lancer l'application
**Option 1 : Script automatique (recommandé)**
```bash
# Utiliser le script de déploiement automatique
chmod +x deploy.sh
./deploy.sh
```
**Option 2 : Commandes manuelles**
```bash
# Construire et démarrer tous les services
docker-compose up -d
# Vérifier les logs
docker-compose logs -f
# Accéder à l'application
# http://localhost:5000
```
## 📋 Services Inclus
### 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
- **Dépendances**: regisflow-db
- **Sauvegardes**: Volume `backup_data`
- **Health check**: `/health`
- **Connexion DB**: Via nom de container `regisflow-db:5432`
## 🔧 Commandes Utiles
### Gestion des services
```bash
# Démarrer les services
docker-compose up -d
# Arrêter les services
docker-compose down
# Redémarrer un service
docker-compose restart regisflow
# Voir les logs
docker-compose logs -f regisflow
# Voir le statut des services
docker-compose ps
```
### Gestion des données
```bash
# Sauvegarder la base de données externe
pg_dump -h IP_SERVEUR -p 5433 -U regisflow regisflow > backup.sql
# Restaurer la base de données externe
psql -h IP_SERVEUR -p 5433 -U regisflow regisflow < backup.sql
# Accéder à la base de données externe
psql -h IP_SERVEUR -p 5433 -U regisflow regisflow
# Connexion à la base externe
psql -h IP_SERVEUR -p 5433 -U regisflow regisflow
```
### Maintenance
```bash
# Mettre à jour l'application
docker-compose pull
docker-compose up -d --build
# Nettoyer les images inutilisées
docker system prune -f
# Voir l'utilisation des volumes
docker volume ls
docker volume inspect regisflow_backup_data
```
## 🛡️ Sécurité
### Configuration de production
1. **Changez les mots de passe par défaut** :
- `POSTGRES_PASSWORD`
- `SESSION_SECRET`
2. **Configurez HTTPS** :
- Obtenez un certificat SSL
- Modifiez `nginx.conf` pour le HTTPS
- Activez `secure: true` pour les cookies
3. **Limitez l'accès réseau** :
- Utilisez un firewall
- Limitez l'accès aux ports nécessaires
### Sauvegarde automatique
L'application inclut un système de sauvegarde automatique :
- Sauvegarde toutes les 12 heures
- Conservation des 10 dernières sauvegardes
- Stockage dans le volume `backup_data`
## 📊 Surveillance
### Health Checks
```bash
# Vérifier la santé de l'application
curl http://localhost:5000/health
# Vérifier via Docker
docker-compose exec regisflow wget -qO- http://localhost:5000/health
```
### Métriques
```bash
# Statistiques des conteneurs
docker stats
# Utilisation des volumes
docker system df
```
## 🔧 Dépannage
### Problèmes courants
1. **L'application ne démarre pas** :
```bash
# Vérifier les logs
docker-compose logs regisflow
# Vérifier la connexion à la base externe
docker-compose exec regisflow pg_isready -h IP_SERVEUR -p 5433 -U regisflow
```
2. **Erreur de connexion à la base** :
```bash
# Vérifier que PostgreSQL externe est accessible
docker-compose exec regisflow pg_isready -h IP_SERVEUR -p 5433 -U regisflow
# Tester la connectivité réseau
docker-compose exec regisflow nc -zv IP_SERVEUR 5433
```
3. **Problème de permissions** :
```bash
# Vérifier les permissions des volumes
docker-compose exec regisflow ls -la /app/backups
```
### Réinitialisation complète
```bash
# Arrêter tous les services
docker-compose down
# Supprimer les volumes (ATTENTION: perte de données)
docker-compose down -v
# Nettoyer les images
docker system prune -af
# Redémarrer
docker-compose up -d
```
## 🔄 Mise à jour
### Mise à jour de l'application
```bash
# Récupérer les dernières modifications
git pull origin main
# Reconstruire et redémarrer
docker-compose up -d --build
# Vérifier les logs
docker-compose logs -f regisflow
```
### Migration de données
L'application gère automatiquement les migrations de base de données au démarrage.
## 📝 Configuration Avancée
### Accès via Reverse Proxy (Optionnel)
Si vous souhaitez ajouter un reverse proxy (Nginx, Apache, etc.) :
- Configurez le proxy pour pointer vers `localhost:5000`
- Ajoutez la configuration SSL/TLS si nécessaire
- Optimisez les performances selon vos besoins
### Variables d'environnement complètes
```env
# Base de données
DATABASE_URL=postgresql://regisflow:RegisFlow2024!@IP_SERVEUR:5433/regisflow
POSTGRES_PASSWORD=password
# Application
NODE_ENV=production
PORT=5000
SESSION_SECRET=your-secret-key
# Timezone
TZ=Europe/Paris
# Sauvegardes (optionnel)
BACKUP_RETENTION_DAYS=30
MAX_BACKUP_COUNT=10
# Logs (optionnel)
LOG_LEVEL=info
```
## 🆘 Support
En cas de problème :
1. Vérifiez les logs : `docker-compose logs`
2. Consultez la documentation
3. Vérifiez les issues sur GitHub
4. Contactez le support
## 📚 Liens Utiles
- [Documentation Docker](https://docs.docker.com/)
- [Documentation Docker Compose](https://docs.docker.com/compose/)
- [Documentation PostgreSQL](https://www.postgresql.org/docs/)
- [Documentation Nginx](https://nginx.org/en/docs/)
-110
View File
@@ -1,110 +0,0 @@
# RegisFlow - Application de Production
## 🎯 Application Prête pour la Production
RegisFlow est maintenant entièrement configurée pour un déploiement en production sous Docker avec toutes les fonctionnalités de sécurité et de performance nécessaires.
## 🚀 Déploiement Immédiat
### Option 1 : Déploiement automatique (Recommandé)
```bash
# 1. Configurer l'environnement
cp .env.example .env
nano .env # Changez POSTGRES_PASSWORD et SESSION_SECRET
# 2. Créer les répertoires
mkdir -p data/{postgres,backups,logs}
# 3. Déployer automatiquement
./deploy-prod.sh
```
### Option 2 : Déploiement manuel
```bash
# 1. Construire les images
docker-compose build
# 2. Démarrer en production
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# 3. Vérifier le statut
docker-compose ps
```
## 📊 Accès à l'Application
- **URL** : http://localhost:5000
- **Compte par défaut** : admin / admin123
- **PostgreSQL** : localhost:5433
## 🔧 Configuration Minimale Requise
Dans le fichier `.env`, changez OBLIGATOIREMENT :
```bash
# Mot de passe PostgreSQL fort
POSTGRES_PASSWORD=VotreMotDePasseSecurise2024!
# Clé secrète pour sessions (générez avec: openssl rand -base64 32)
SESSION_SECRET=VotreCleSecreteFortePourLesSessions
```
## 🔒 Sécurité Production
- ✅ Utilisateur non-root dans les conteneurs
- ✅ Réseau Docker isolé
- ✅ Sessions sécurisées avec PostgreSQL
- ✅ Health checks automatiques
- ✅ Limites de ressources définies
- ✅ Configuration HTTPS prête (avec Nginx)
## 📱 Fonctionnalités Intégrées
- **Multi-utilisateur** : Admin, Manager, Employee
- **Multi-magasins** : Isolation complète des données
- **Conformité réglementaire** : Validation EAN-13, purge 19 mois
- **Sauvegardes automatiques** : Toutes les 12 heures
- **Export de données** : PDF, CSV
- **Interface responsive** : Mobile et desktop
- **Monitoring intégré** : Logs et métriques
## 🚨 Commandes Essentielles
```bash
# Vérifier le statut
docker-compose ps
# Voir les logs
docker-compose logs -f regisflow
# Arrêter/Redémarrer
docker-compose down
docker-compose up -d
# Sauvegarde manuelle
docker-compose exec regisflow-db pg_dump -U regisflow regisflow > backup.sql
# Monitoring
./monitoring.sh
```
## 📋 Prochaines Étapes
1. **Configurez HTTPS** avec Nginx (configuration incluse)
2. **Changez le mot de passe admin** lors de la première connexion
3. **Créez vos magasins et utilisateurs**
4. **Testez les sauvegardes**
5. **Configurez le monitoring**
## 📞 Support
- **Guide complet** : DEPLOYMENT_GUIDE.md
- **Démarrage rapide** : QUICK_START.md
- **Configuration** : .env.example
- **Logs** : `docker-compose logs -f`
**🎉 L'application est maintenant prête pour la production !**
Consultez `DEPLOYMENT_GUIDE.md` pour la configuration complète et `QUICK_START.md` pour un démarrage rapide.
@@ -1,868 +0,0 @@
# 🎆 Application Registre des Ventes de Pétards
## Squelette Complet et Spécifications Techniques
---
## 📋 **Vue d'ensemble de l'Application**
### **Objectif**
Application web React pour la gestion et le suivi réglementaire des ventes de feux d'artifice et pétards, conforme à la législation française.
### **Utilisateurs cibles**
- Commerçants vendant des feux d'artifice
- Responsables de magasins spécialisés
- Contrôleurs réglementaires
## 🎮 **Interface Utilisateur**
### **Navigation Principale**
```
Header: "Registre des Ventes de Pétards"
└── Onglets Navigation:
├── 📝 Nouvelle Vente
└── 📊 Historique (X ventes)
```
### **Palette de Couleurs**
- **Primaire**: Bleu (#2563EB)
- **Succès**: Vert (#16A34A)
- **Erreur**: Rouge (#DC2626)
- **Info**: Bleu clair (#3B82F6)
- **Arrière-plan**: Gris clair (#F9FAFB)
---
## 📝 **Section 1: Nouvelle Vente**
### **Formulaire Complet**
#### **🧑‍💼 Informations Vendeur**
```javascript
{
vendeur: {
type: "string",
required: true,
placeholder: "Nom et prénom du vendeur",
validation: "Non vide"
},
dateVente: {
type: "date",
default: "Date du jour",
format: "YYYY-MM-DD"
}
}
```
#### **📦 Informations Produit**
```javascript
{
typeArticle: {
type: "select",
required: true,
options: [
"Pétard à mèche",
"Batterie",
"Batterie nécessitant un support externe",
"Combinaison",
"Combinaison nécessitant un support externe",
"Pétard aérien",
"Pétard à composition flash",
"Fusée",
"Chandelle romaine",
"Chandelle monocoup"
]
},
categorie: {
type: "select",
required: true,
dependsOn: "typeArticle",
mapping: {
"Pétard à mèche": ["F3"],
"Batterie": ["F3"],
"Batterie nécessitant un support externe": ["F3"],
"Combinaison": ["F3"],
"Combinaison nécessitant un support externe": ["F3"],
"Pétard aérien": ["F2", "F3"],
"Pétard à composition flash": ["F3"],
"Fusée": ["F2", "F3"],
"Chandelle romaine": ["F2", "F3"],
"Chandelle monocoup": ["F2", "F3"]
}
},
quantite: {
type: "number",
required: true,
min: 1,
validation: "Entier positif"
},
gencode: {
type: "string",
required: false,
placeholder: "Code produit (optionnel)"
}
}
```
#### **🧑‍🤝‍🧑 Informations Client**
```javascript
{
nom: {
type: "string",
required: true,
placeholder: "Nom de famille"
},
prenom: {
type: "string",
required: true,
placeholder: "Prénom"
},
dateNaissance: {
type: "date",
required: false,
placeholder: "Date de naissance"
},
lieuNaissance: {
type: "string",
required: false,
placeholder: "Ville de naissance"
}
}
```
#### **🆔 Pièce d'Identité**
```javascript
{
typeIdentite: {
type: "string",
required: false,
placeholder: "Ex: CNI 123456789",
examples: ["CNI", "Passeport", "Permis de conduire"]
},
autoriteDelivrance: {
type: "string",
required: false,
placeholder: "Préfecture, Mairie, etc."
},
dateDelivrance: {
type: "date",
required: false
}
}
```
#### **📷 Photos de la Pièce d'Identité**
```javascript
{
photoRecto: {
type: "image",
format: "base64",
source: "camera",
required: false,
compression: 0.8,
maxSize: "5MB"
},
photoVerso: {
type: "image",
format: "base64",
source: "camera",
required: false,
compression: 0.8,
maxSize: "5MB"
}
}
```
### **Informations Réglementaires**
```
ℹ️ Information réglementaire :
• F2 : Feux d'artifice de catégorie F2 - Vente libre aux majeurs
• F3 : Feux d'artifice de catégorie F3 - Vente soumise à autorisation préfectorale
```
### **Actions du Formulaire**
- **💾 Enregistrer la Vente** (bouton principal)
- **📸 Prendre photo Recto/Verso** (boutons caméra)
- **❌ Supprimer photo** (boutons X sur images)
---
## 📊 **Section 2: Historique des Ventes**
### **Actions Globales**
```javascript
{
exportCSV: {
label: "📥 Exporter CSV (X)",
function: "exportToCSV()",
disabled: "si aucune vente",
format: "UTF-8 avec BOM"
},
backupAuto: {
label: "💾 Backup Auto",
function: "downloadAutoBackup()",
source: "localStorage"
},
diagnostic: {
label: "🔍 Debug",
function: "Diagnostic complet console"
},
testSuppression: {
label: "🧪 Test Suppression",
function: "Test sur première vente"
},
testBackup: {
label: "🧪 Test Backup",
function: "Test création + téléchargement"
}
}
```
### **Informations de Status**
```
📊 Données stockées localement (X vente(s)) • Export CSV compatible Excel • Sauvegarde automatique à chaque ajout
Dernier backup: DD/MM/YYYY HH:MM (X enreg.)
```
### **Tableau des Ventes**
```javascript
{
colonnes: [
{
nom: "Date",
champ: "dateVente",
format: "DD/MM/YYYY",
tri: "DESC par défaut"
},
{
nom: "Vendeur",
champ: "vendeur",
fallback: "Non spécifié"
},
{
nom: "Client",
champ: "nom + prenom",
sousChamp: "typeIdentite"
},
{
nom: "Produit",
champ: "typeArticle",
sousChamp: "gencode (si présent)"
},
{
nom: "Catégorie",
champ: "categorie",
style: {
"F2": "badge jaune",
"F3": "badge rouge"
}
},
{
nom: "Quantité",
champ: "quantite"
},
{
nom: "Actions",
boutons: ["👁️ Voir", "🗑️ Supprimer"]
}
]
}
```
### **Actions par Ligne**
```javascript
{
voirDetails: {
icon: "👁️",
action: "Ouvrir modal détails",
tooltip: "Voir les détails"
},
supprimer: {
icon: "🗑️",
action: "Suppression avec confirmation",
tooltip: "Supprimer la vente",
confirmation: "Supprimer définitivement la vente de {nom} {prenom} ?\n\n⚠️ Cette action est irréversible !\n\nID: {id}"
}
}
```
---
## 🔍 **Modal de Détails**
### **Structure Complète**
```javascript
{
titre: "Détails de la Vente",
sections: [
{
nom: "Informations Vendeur",
champs: ["vendeur", "dateVente"]
},
{
nom: "Informations Produit",
champs: ["typeArticle", "categorie", "quantite", "gencode"]
},
{
nom: "Informations Client",
champs: ["nom", "prenom", "dateNaissance", "lieuNaissance"]
},
{
nom: "Pièce d'Identité",
champs: ["typeIdentite", "autoriteDelivrance", "dateDelivrance"]
},
{
nom: "Photos de la Pièce d'Identité",
champs: ["photoRecto", "photoVerso"],
affichage: "Images 128px ou placeholder"
},
{
nom: "Informations Système",
champs: ["timestamp"],
format: "DD/MM/YYYY HH:MM:SS"
}
],
actions: ["Fermer"]
}
```
---
## 📸 **Modal Caméra**
### **Interface Caméra**
```javascript
{
titre: "Photo {Recto|Verso}",
elements: [
{
videoStream: {
source: "navigator.mediaDevices.getUserMedia",
constraints: {
video: { facingMode: 'environment' }
},
autoPlay: true,
playsInline: true
}
},
{
canvas: {
hidden: true,
purpose: "Capture image"
}
}
],
actions: [
{
nom: "📸 Prendre la photo",
function: "takePhoto()"
},
{
nom: "❌ Fermer",
function: "stopCamera()"
}
]
}
```
### **Processus de Capture**
1. **Demande permission caméra**
2. **Affichage flux vidéo temps réel**
3. **Capture frame sur canvas**
4. **Conversion en blob JPEG (80% qualité)**
5. **Conversion en base64**
6. **Stockage dans formData**
7. **Arrêt du flux caméra**
---
## 🎯 **Système de Notifications (Toast)**
### **Types de Notifications**
```javascript
{
success: {
couleur: "Vert",
icon: "✅ CheckCircle",
duree: 4000,
exemples: [
"Vente enregistrée avec succès",
"Photo recto capturée avec succès",
"Export réussi ! X vente(s) exportée(s)",
"Vente de {nom} {prenom} supprimée"
]
},
error: {
couleur: "Rouge",
icon: "❌ AlertCircle",
duree: 4000,
exemples: [
"Veuillez remplir tous les champs obligatoires",
"Impossible d'accéder à la caméra",
"Erreur lors de l'enregistrement"
]
},
info: {
couleur: "Bleu",
icon: "ℹ️ Info",
duree: 4000,
exemples: [
"Caméra activée, positionnez la carte d'identité",
"Photo recto supprimée",
"Aucune vente à exporter"
]
}
}
```
### **Positionnement et Animation**
```css
{
position: "fixed bottom-4 right-4",
zIndex: 50,
animation: "slideInRight 0.3s ease-out",
autoRemove: "4 secondes",
manualClose: "Bouton X"
}
```
---
## 🗄️ **Base de Données (IndexedDB)**
### **Configuration**
```javascript
{
nom: "VentesPetardsDB",
version: 1,
objectStore: {
nom: "ventes",
keyPath: "id",
autoIncrement: true,
index: [
{ nom: "nom", unique: false },
{ nom: "dateVente", unique: false }
]
}
}
```
### **Structure d'un Enregistrement**
```javascript
{
id: "number (auto-increment)",
// Vendeur
vendeur: "string",
dateVente: "string (YYYY-MM-DD)",
// Produit
typeArticle: "string",
categorie: "string (F2|F3)",
quantite: "number",
gencode: "string|null",
// Client
nom: "string",
prenom: "string",
dateNaissance: "string|null",
lieuNaissance: "string|null",
// Identité
typeIdentite: "string|null",
numeroIdentite: "string|null",
autoriteDelivrance: "string|null",
dateDelivrance: "string|null",
// Photos
photoRecto: "string (base64)|null",
photoVerso: "string (base64)|null",
// Système
timestamp: "string (ISO 8601)"
}
```
### **Opérations CRUD**
```javascript
{
create: "saveVente(venteData)",
read: "loadVentes() -> Array",
update: "Non implémenté",
delete: "deleteVente(id)"
}
```
---
## 💾 **Système de Sauvegarde**
### **Sauvegarde Automatique (localStorage)**
```javascript
{
clé: "petards_backup_csv",
déclencheurs: [
"Après ajout vente",
"Après suppression vente"
],
contenu: {
timestamp: "ISO 8601",
csvContent: "string (avec BOM UTF-8)",
recordCount: "number"
}
}
```
### **Export CSV Manuel**
```javascript
{
format: "CSV délimité par ';'",
encodage: "UTF-8 avec BOM (\uFEFF)",
colonnes: [
"Date de vente",
"Vendeur",
"Type d'article",
"Catégorie",
"Quantité",
"Code générique",
"Nom client",
"Prénom client",
"Date de naissance",
"Lieu de naissance",
"Type et n° identité",
"Autorité de délivrance",
"Date de délivrance",
"Photo recto (Oui/Non)",
"Photo verso (Oui/Non)",
"Horodatage"
],
méthodes: [
"Data URL (principal)",
"Blob + createObjectURL (fallback)",
"Nouvelle fenêtre (fallback final)"
]
}
```
---
## ⚙️ **États et Gestion des Données**
### **État Principal (useState)**
```javascript
{
activeTab: "string ('nouvelle-vente'|'historique')",
ventes: "Array<VenteObject>",
showCamera: "boolean",
currentPhotoType: "string ('photoRecto'|'photoVerso')",
toasts: "Array<ToastObject>",
showDetailsModal: "boolean",
selectedVente: "VenteObject|null",
formData: "VenteObject (form state)"
}
```
### **Références (useRef)**
```javascript
{
videoRef: "HTMLVideoElement",
canvasRef: "HTMLCanvasElement",
streamRef: "MediaStream"
}
```
### **Effets (useEffect)**
```javascript
{
componentDidMount: [
"initDB()",
"loadVentes()"
]
}
```
---
## 🔧 **Fonctions Principales**
### **Base de Données**
```javascript
{
initDB: "Initialisation IndexedDB",
saveVente: "Ajout nouvelle vente",
loadVentes: "Chargement toutes ventes",
deleteVente: "Suppression vente par ID"
}
```
### **Caméra et Photos**
```javascript
{
startCamera: "Démarrage flux caméra",
takePhoto: "Capture photo sur canvas",
stopCamera: "Arrêt flux caméra"
}
```
### **Formulaire**
```javascript
{
handleInputChange: "Gestion changements inputs",
handleSubmit: "Soumission formulaire complet"
}
```
### **Export et Sauvegarde**
```javascript
{
exportToCSV: "Export CSV manuel",
createAutoBackup: "Création backup auto",
downloadAutoBackup: "Téléchargement backup"
}
```
### **Interface Utilisateur**
```javascript
{
showToast: "Affichage notification",
removeToast: "Suppression notification",
ToastContainer: "Container notifications",
DetailsModal: "Modal détails vente"
}
```
---
## 🎛️ **Configuration et Options**
### **Paramètres Généraux**
```javascript
{
autoBackup: true,
toastDuration: 4000,
photoCompression: 0.8,
csvDelimiter: ';',
dateFormat: 'fr-FR'
}
```
### **Validation des Champs**
```javascript
{
champsObligatoires: [
"vendeur",
"nom",
"prenom",
"typeArticle",
"categorie",
"quantite"
],
validations: {
quantite: "min: 1, type: number",
dateVente: "format: YYYY-MM-DD",
photos: "maxSize: 5MB, format: JPEG"
}
}
```
### **Correspondances Produits**
```javascript
{
articlesTypesCategories: {
"Pétard à mèche": ["F3"],
"Batterie": ["F3"],
"Batterie nécessitant un support externe": ["F3"],
"Combinaison": ["F3"],
"Combinaison nécessitant un support externe": ["F3"],
"Pétard aérien": ["F2", "F3"],
"Pétard à composition flash": ["F3"],
"Fusée": ["F2", "F3"],
"Chandelle romaine": ["F2", "F3"],
"Chandelle monocoup": ["F2", "F3"]
}
}
```
---
## 🚀 **Flux de Données Complet**
### **Ajout d'une Vente**
```
1. Utilisateur remplit formulaire
2. Validation champs obligatoires
3. Prise photos (optionnel)
4. Clic "Enregistrer la Vente"
5. saveVente() -> IndexedDB
6. loadVentes() -> Mise à jour état
7. createAutoBackup() -> localStorage
8. Toast de succès
9. Reset formulaire
```
### **Affichage Historique**
```
1. Clic onglet "Historique"
2. loadVentes() depuis IndexedDB
3. Tri par date (DESC)
4. Affichage tableau
5. Actions disponibles par ligne
```
### **Export CSV**
```
1. Clic "Exporter CSV"
2. Vérification ventes > 0
3. Transformation données -> CSV
4. Création blob avec BOM UTF-8
5. Déclenchement téléchargement
6. Toast de confirmation
```
### **Suppression Vente**
```
1. Clic bouton suppression
2. Confirmation utilisateur
3. deleteVente(id) -> IndexedDB
4. loadVentes() -> Mise à jour état
5. createAutoBackup() -> localStorage
6. Toast de succès
```
---
## 🛡️ **Conformité Réglementaire**
### **Exigences Légales Couvertes**
- ✅ **Identification vendeur** (nom du vendeur)
- ✅ **Date de vente** (horodatage)
- ✅ **Type et catégorie produit** (classification F2/F3)
- ✅ **Quantité vendue** (traçabilité)
- ✅ **Identité acheteur** (nom, prénom, pièce d'identité)
- ✅ **Photos pièce d'identité** (preuve visuelle)
- ✅ **Archivage numérique** (IndexedDB + CSV)
### **Données de Traçabilité**
```javascript
{
obligatoires: [
"Date et heure de vente",
"Identité du vendeur",
"Identité de l'acheteur",
"Nature et quantité des produits",
"Catégorie réglementaire"
],
optionnelles: [
"Photos pièces d'identité",
"Code produit fabricant",
"Lieu de naissance acheteur"
]
}
```
---
## 📱 **Responsive Design**
### **Breakpoints**
```css
{
mobile: "max-width: 768px",
tablet: "768px - 1024px",
desktop: "min-width: 1024px"
}
```
### **Adaptations Mobile**
```javascript
{
navigation: "Onglets empilés",
formulaire: "Colonnes -> lignes",
tableau: "Scroll horizontal",
modal: "Pleine largeur",
camera: "Optimisé tactile"
}
```
---
## 🔍 **Debugging et Maintenance**
### **Outils de Debug Intégrés**
```javascript
{
diagnosticComplet: "🔍 Debug (état + IndexedDB + localStorage)",
testSuppression: "🧪 Test sur première vente",
testBackup: "🧪 Test création + téléchargement",
logsDetailles: "Console avec emojis et étapes"
}
```
### **Gestion d'Erreurs**
```javascript
{
camera: "Permissions, compatibilité",
indexedDB: "Ouverture, transactions, quotas",
export: "Génération, téléchargement",
validation: "Champs obligatoires, formats"
}
```
---
## 📦 **Déploiement et Installation**
### **Prérequis Navigateur**
```javascript
optional: [
"Camera access",
"Download attribute support"
]
}
```
### **Performance**
```javascript
{
tailleBD: "Illimitée (selon navigateur)",
photoCompression: "80% JPEG",
chargementLazy: "Images dans modal",
memoire: "State minimal en React"
}
```
---
## 🎯 **Évolutions Futures Possibles**
### **Fonctionnalités Avancées**
```javascript
{
authentification: "Login vendeurs",
synchronisation: "Multi-appareils",
notifications: "Rappels réglementaires",
recherche: "Filtres avancés",
backup: "Cloud storage",
}
```
## 📚 **Documentation Utilisateur**
### **Guide d'Utilisation Rapide**
1. **Nouvelle vente** : Remplir formulaire → Photos (optionnel) → Enregistrer
2. **Consulter historique** : Onglet Historique → Voir/Supprimer
3. **Export données** : Bouton "Exporter CSV" → Fichier téléchargé
4. **Sauvegarde** : Automatique + "Backup Auto" manuel
### **Résolution Problèmes**
- **Caméra ne marche pas** : Vérifier permissions navigateur
- **Export CSV vide** : Vérifier qu'il y a des ventes enregistrées
- **Suppression ne marche pas** : Utiliser bouton "🧪 Test Suppression"
- **Données perdues** : Utiliser "Backup Auto" pour récupérer
---
*🎆 Application développée pour la conformité réglementaire française des ventes de feux d'artifice*
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

-37
View File
@@ -1,37 +0,0 @@
#!/bin/bash
# Script de debug pour Docker RegisFlow (Base de données EXTERNE)
echo "🔍 Debug Docker RegisFlow - Base PostgreSQL externe"
echo "1. État des containers:"
docker-compose ps
echo ""
echo "2. Logs Application (dernières 50 lignes):"
docker-compose logs --tail=50 regisflow
echo ""
echo "3. Variables d'environnement dans l'application:"
docker-compose exec regisflow env | grep -E "(DATABASE_URL|NODE_ENV|TZ)"
echo ""
echo "4. Test de connexion à la base externe:"
echo " - Extraction des paramètres de connexion:"
docker-compose exec regisflow sh -c 'echo "Host: $(echo $DATABASE_URL | sed -n \"s|.*@\([^:]*\):.*|\1|p\")"'
docker-compose exec regisflow sh -c 'echo "Port: $(echo $DATABASE_URL | sed -n \"s|.*:\([0-9]*\)/.*|\1|p\")"'
docker-compose exec regisflow sh -c 'echo "User: $(echo $DATABASE_URL | sed -n \"s|.*://\([^:]*\):.*|\1|p\")"'
echo ""
echo "5. Test de connectivité vers la base externe:"
docker-compose exec regisflow sh -c 'pg_isready -h $(echo $DATABASE_URL | sed -n "s|.*@\([^:]*\):.*|\1|p") -p $(echo $DATABASE_URL | sed -n "s|.*:\([0-9]*\)/.*|\1|p") -U regisflow'
echo ""
echo "6. Test de résolution DNS:"
docker-compose exec regisflow sh -c 'nslookup $(echo $DATABASE_URL | sed -n "s|.*@\([^:]*\):.*|\1|p") || echo "❌ DNS échoué"'
echo ""
echo "7. Test de port depuis le container:"
docker-compose exec regisflow sh -c 'nc -zv $(echo $DATABASE_URL | sed -n "s|.*@\([^:]*\):.*|\1|p") $(echo $DATABASE_URL | sed -n "s|.*:\([0-9]*\)/.*|\1|p") 2>&1 || echo "❌ Port inaccessible"'
echo ""
echo "🏁 Debug terminé - Base PostgreSQL externe"
-133
View File
@@ -1,133 +0,0 @@
#!/bin/bash
# Script de déploiement PRODUCTION RegisFlow
# Utilisation: ./deploy-prod.sh
set -e
echo "🚀 Déploiement PRODUCTION RegisFlow"
echo "===================================="
# Vérifications préalables
echo "🔍 Vérifications préalables..."
# Vérifier que nous sommes en mode production
if [ "$NODE_ENV" != "production" ]; then
echo "⚠️ Variable NODE_ENV non définie sur 'production'"
read -p "Continuer quand même ? (y/N): " -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# Vérifier Docker et Docker Compose
if ! command -v docker &> /dev/null; then
echo "❌ Docker n'est pas installé"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose n'est pas installé"
exit 1
fi
# Créer les répertoires de données
echo "📁 Création des répertoires de données..."
mkdir -p data/{postgres,backups,logs,postgres-logs}
chmod 755 data data/*
# Créer le fichier .env s'il n'existe pas
if [ ! -f .env ]; then
echo "📝 Création du fichier .env..."
cp .env.example .env
echo "✅ Fichier .env créé avec configuration par défaut"
echo ""
echo "ℹ️ CONFIGURATION AUTOMATIQUE :"
echo " - Mots de passe pré-configurés pour installation simple"
echo " - Pour la production, modifiez POSTGRES_PASSWORD et SESSION_SECRET"
echo ""
fi
# Vérifier les variables critiques
echo "🔒 Vérification de la configuration..."
source .env
if [ "$POSTGRES_PASSWORD" = "RegisFlow2024!PostgreSQL" ]; then
echo "⚠️ Utilisation des mots de passe par défaut (OK pour test, changez pour production)"
else
echo "✅ Mots de passe personnalisés détectés"
fi
echo "✅ Configuration validée"
# Arrêter les services existants
echo "🛑 Arrêt des services existants..."
docker-compose down 2>/dev/null || true
# Construire les images
echo "🔨 Construction des images de production..."
docker-compose build --no-cache
# Vérifier l'espace disque
echo "💾 Vérification de l'espace disque..."
DISK_USAGE=$(df / | awk 'NR==2{print $5}' | cut -d'%' -f1)
if [ "$DISK_USAGE" -gt 80 ]; then
echo "⚠️ Attention: Espace disque faible ($DISK_USAGE%)"
read -p "Continuer ? (y/N): " -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# Démarrer les services avec configuration production
echo "🚀 Démarrage des services de production..."
docker-compose up -d
# Attendre le démarrage
echo "⏳ Attente du démarrage des services..."
sleep 30
# Vérifier la santé des services
echo "🏥 Vérification de la santé des services..."
for i in {1..30}; do
if docker-compose ps | grep -q "healthy"; then
echo "✅ Services démarrés avec succès"
break
fi
if [ $i -eq 30 ]; then
echo "❌ Timeout: Les services ne démarrent pas correctement"
echo "📋 Logs des services :"
docker-compose logs --tail=20
exit 1
fi
sleep 5
done
# Test de connectivité
echo "🔗 Test de connectivité..."
if curl -f http://localhost:5000/health &>/dev/null; then
echo "✅ Application accessible sur http://localhost:5000"
else
echo "❌ Application non accessible"
docker-compose logs regisflow --tail=20
exit 1
fi
# Afficher le statut final
echo ""
echo "🎉 DÉPLOIEMENT PRODUCTION RÉUSSI !"
echo "=================================="
echo "📱 Application RegisFlow : http://localhost:5000"
echo "🗄️ PostgreSQL : localhost:5433"
echo "📊 Statut des services :"
docker-compose ps
echo ""
echo "📋 Commandes utiles :"
echo " - Logs : docker-compose logs -f"
echo " - Statut : docker-compose ps"
echo " - Arrêt : docker-compose down"
echo " - Sauvegarde : docker-compose exec regisflow-db pg_dump -U regisflow regisflow > backup.sql"
echo ""
echo "⚠️ N'oubliez pas de configurer HTTPS avec un reverse proxy pour la production !"
-66
View File
@@ -1,66 +0,0 @@
#!/bin/bash
# Script de déploiement simplifié pour RegisFlow
echo "🚀 Déploiement de RegisFlow avec Docker"
# Vérifier si Docker est installé
if ! command -v docker &> /dev/null; then
echo "❌ Docker n'est pas installé. Installez Docker d'abord."
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose n'est pas installé. Installez Docker Compose d'abord."
exit 1
fi
echo "✅ Docker et Docker Compose détectés"
# Arrêter les services existants
echo "🛑 Arrêt des services existants..."
docker-compose down -v 2>/dev/null || true
# Nettoyer les anciens containers et images
echo "🧹 Nettoyage des anciens containers..."
docker system prune -f
# Créer le fichier .env s'il n'existe pas
if [ ! -f .env ]; then
echo "📝 Création du fichier .env..."
cp .env.example .env
echo "⚠️ Configuration PostgreSQL Docker :"
echo " - PostgreSQL et RegisFlow seront créés dans Docker"
echo " - Utilisateur/mot de passe préconfigurés : regisflow / RegisFlow2024!"
echo " - Port PostgreSQL externe : 5433"
echo " - Port RegisFlow : 5000"
echo " - Changez SESSION_SECRET pour la sécurité"
read -p "Appuyez sur Entrée pour continuer..."
fi
# Construire et démarrer les services
echo "🏗️ Construction et démarrage des services..."
docker-compose up -d --build
# Attendre que les services soient prêts
echo "⏳ Attente du démarrage des services..."
sleep 30
# Vérifier le statut des services
echo "📊 Vérification du statut des services..."
docker-compose ps
# Afficher les logs des dernières minutes
echo "📋 Logs récents:"
docker-compose logs --tail=50
echo ""
echo "🎉 Déploiement terminé!"
echo "📱 Application accessible sur: http://localhost:5000"
echo "🗄️ Base de données accessible sur: localhost:5433"
echo "👤 Compte par défaut: admin / admin123"
echo ""
echo "📝 Pour voir les logs en continu:"
echo " docker-compose logs -f"
echo ""
echo "🛑 Pour arrêter les services:"
echo " docker-compose down"
-54
View File
@@ -1,54 +0,0 @@
#!/bin/sh
set -e
# Script d'entrée pour le container RegisFlow
echo "🚀 Démarrage de RegisFlow..."
# Attendre que la base de données Docker soit prête
echo "📡 Attente de la base de données regisflow-db..."
echo "🔍 Test de connexion à regisflow-db:5432..."
# Attendre jusqu'à 120 secondes pour PostgreSQL Docker
RETRIES=24
while [ $RETRIES -gt 0 ]; do
if pg_isready -h regisflow-db -p 5432 -U regisflow; then
echo "✅ PostgreSQL regisflow-db est prêt!"
break
fi
echo "⏳ Base de données non prête, tentative $((25-RETRIES))/24, attente de 5 secondes..."
sleep 5
RETRIES=$((RETRIES-1))
done
if [ $RETRIES -eq 0 ]; then
echo "❌ Timeout: Impossible de se connecter à regisflow-db après 2 minutes"
echo "🔍 Diagnostic:"
echo " - Vérifiez que le service regisflow-db démarre correctement"
echo " - Vérifiez les logs: docker-compose logs regisflow-db"
exit 1
fi
echo "✅ Base de données prête!"
# Exécuter les migrations de base de données
echo "🔄 Exécution des migrations..."
if command -v drizzle-kit >/dev/null 2>&1; then
npx drizzle-kit push
else
echo "⚠️ drizzle-kit non disponible, tentative avec npm run db:push..."
if [ -f package.json ]; then
npm run db:push || echo "ℹ️ Migrations manuelles nécessaires"
else
echo "ℹ️ Package.json non trouvé, poursuite sans migrations"
fi
fi
# Créer le répertoire des sauvegardes s'il n'existe pas
mkdir -p /app/backups
# L'application est déjà construite dans le Dockerfile
echo "✅ Application pré-construite"
# Démarrer l'application en production
echo "🎯 Démarrage de l'application RegisFlow..."
exec npm run start
-10
View File
@@ -1,10 +0,0 @@
-- Script d'initialisation PostgreSQL pour RegisFlow
-- Exécuté automatiquement lors de la création du container
-- L'utilisateur et la base sont créés automatiquement via les variables d'environnement
-- POSTGRES_USER=regisflow
-- POSTGRES_DB=regisflow
-- POSTGRES_PASSWORD=RegisFlow2024!
-- Configuration additionnelle si nécessaire
-- (Actuellement vide car Drizzle ORM gère la création des tables)
-77
View File
@@ -1,77 +0,0 @@
#!/bin/bash
# Installation RegisFlow - Configuration automatique
# Utilisation: ./install-simple.sh
set -e
echo "🚀 Installation Simple RegisFlow"
echo "================================"
echo "ℹ️ Installation automatique avec configuration par défaut"
echo ""
# Vérifier Docker
if ! command -v docker &> /dev/null; then
echo "❌ Docker n'est pas installé"
echo "💡 Installez Docker avec: sudo apt install docker.io docker-compose"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose n'est pas installé"
echo "💡 Installez Docker Compose avec: sudo apt install docker-compose"
exit 1
fi
# Créer le fichier .env automatiquement
echo "📝 Configuration automatique..."
cp .env.example .env
echo "✅ Fichier .env créé avec configuration par défaut"
# Créer les répertoires nécessaires
echo "📁 Création des répertoires..."
mkdir -p data/{postgres,backups,logs,postgres-logs}
chmod 755 data data/*
echo "✅ Répertoires créés"
# Arrêter les services existants
echo "🛑 Nettoyage des services existants..."
docker-compose down 2>/dev/null || true
# Construire les images
echo "🔨 Construction des images..."
docker-compose build
# Démarrer les services avec configuration simple
echo "🚀 Démarrage des services..."
docker-compose up -d
# Attendre le démarrage
echo "⏳ Attente du démarrage (60 secondes)..."
sleep 60
# Vérifier le statut
echo "🔍 Vérification du statut..."
docker-compose ps
# Test de connectivité
echo "🔗 Test de l'application..."
if curl -f http://localhost:5000 &>/dev/null; then
echo "✅ Application accessible !"
else
echo "⚠️ Application en cours de démarrage..."
fi
echo ""
echo "🎉 INSTALLATION TERMINÉE !"
echo "========================="
echo "📱 Application RegisFlow : http://localhost:5000"
echo "🗄️ PostgreSQL : localhost:5433"
echo "👤 Compte par défaut : admin / admin123"
echo ""
echo "📋 Commandes utiles :"
echo " - Logs : docker-compose logs -f"
echo " - Arrêt : docker-compose down"
echo " - Statut : docker-compose ps"
echo ""
echo "⚠️ Pour la production, changez les mots de passe dans .env"
-120
View File
@@ -1,120 +0,0 @@
#!/bin/bash
# Script de monitoring pour RegisFlow Production
# Usage: ./monitoring.sh [check|logs|backup|stats]
COMMAND=${1:-check}
case $COMMAND in
"check")
echo "🔍 Vérification de l'état des services RegisFlow"
echo "=============================================="
echo "📊 Statut des containers :"
docker-compose ps
echo ""
echo "🏥 Health checks :"
# Vérifier RegisFlow
if curl -f -s http://localhost:5000/health > /dev/null; then
echo "✅ RegisFlow : OK"
else
echo "❌ RegisFlow : ERREUR"
fi
# Vérifier PostgreSQL
if docker-compose exec -T regisflow-db pg_isready -U regisflow -q; then
echo "✅ PostgreSQL : OK"
else
echo "❌ PostgreSQL : ERREUR"
fi
echo ""
echo "💾 Utilisation des ressources :"
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
echo ""
echo "💿 Espace disque :"
df -h | grep -E "(Filesystem|/dev/)"
echo ""
echo "📁 Taille des volumes :"
du -sh data/* 2>/dev/null || echo "Répertoire data non trouvé"
;;
"logs")
echo "📋 Logs des services RegisFlow"
echo "=============================="
echo "📱 Logs RegisFlow (20 dernières lignes) :"
docker-compose logs --tail=20 regisflow
echo ""
echo "🗄️ Logs PostgreSQL (20 dernières lignes) :"
docker-compose logs --tail=20 regisflow-db
;;
"backup")
echo "💾 Création d'une sauvegarde manuelle"
echo "===================================="
BACKUP_FILE="backup-$(date +%Y%m%d-%H%M%S).sql"
echo "Création de la sauvegarde : $BACKUP_FILE"
docker-compose exec -T regisflow-db pg_dump -U regisflow regisflow > "data/backups/$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "✅ Sauvegarde créée avec succès : data/backups/$BACKUP_FILE"
echo "📊 Taille : $(ls -lh data/backups/$BACKUP_FILE | awk '{print $5}')"
else
echo "❌ Erreur lors de la création de la sauvegarde"
fi
;;
"stats")
echo "📊 Statistiques détaillées RegisFlow"
echo "===================================="
echo "🔢 Statistiques base de données :"
docker-compose exec -T regisflow-db psql -U regisflow -d regisflow -c "
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size,
pg_stat_get_tuples_returned(c.oid) as tuple_read,
pg_stat_get_tuples_fetched(c.oid) as tuple_fetch,
pg_stat_get_tuples_inserted(c.oid) as tuple_insert,
pg_stat_get_tuples_updated(c.oid) as tuple_update,
pg_stat_get_tuples_deleted(c.oid) as tuple_delete
FROM pg_tables t
LEFT JOIN pg_class c ON c.relname = t.tablename
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
"
echo ""
echo "📁 Utilisation des volumes Docker :"
docker system df
echo ""
echo "🔄 Uptime des services :"
docker-compose ps --format "table {{.Name}}\t{{.Status}}"
echo ""
echo "📈 Métriques système :"
echo "CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)%"
echo "RAM: $(free -m | awk 'NR==2{printf "%.1f%%", $3*100/$2 }')"
echo "Disk: $(df / | awk 'NR==2{print $5}')"
;;
*)
echo "Usage: $0 [check|logs|backup|stats]"
echo ""
echo "Commandes disponibles :"
echo " check - Vérifier l'état des services"
echo " logs - Afficher les logs"
echo " backup - Créer une sauvegarde manuelle"
echo " stats - Afficher les statistiques détaillées"
;;
esac
-84
View File
@@ -1,84 +0,0 @@
# Configuration Nginx pour RegisFlow Production
# Placez ce fichier dans /etc/nginx/sites-available/regisflow
# Puis créez un lien : ln -s /etc/nginx/sites-available/regisflow /etc/nginx/sites-enabled/
server {
listen 80;
server_name votre-domaine.com www.votre-domaine.com;
# Redirection automatique vers HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name votre-domaine.com www.votre-domaine.com;
# Configuration SSL (Let's Encrypt recommandé)
ssl_certificate /etc/letsencrypt/live/votre-domaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/votre-domaine.com/privkey.pem;
# Configuration SSL sécurisée
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Sécurité headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self';" always;
# Configuration des logs
access_log /var/log/nginx/regisflow_access.log;
error_log /var/log/nginx/regisflow_error.log;
# Limite de taille des uploads
client_max_body_size 10M;
# Configuration du proxy vers RegisFlow
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Optimisations pour les fichiers statiques
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
proxy_pass http://127.0.0.1:5000;
expires 1y;
add_header Cache-Control "public, immutable";
}
# Health check
location /health {
proxy_pass http://127.0.0.1:5000/health;
access_log off;
}
# Protection contre les attaques
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# Limitation du taux de requêtes
limit_req_zone $binary_remote_addr zone=regisflow:10m rate=10r/s;
limit_req zone=regisflow burst=20 nodelay;
}
-45
View File
@@ -1,45 +0,0 @@
# Configuration PostgreSQL optimisée pour production RegisFlow
# Connexions et authentification
max_connections = 50
shared_buffers = 128MB
effective_cache_size = 256MB
work_mem = 4MB
maintenance_work_mem = 32MB
# WAL et checkpoint
wal_buffers = 4MB
checkpoint_completion_target = 0.9
max_wal_size = 256MB
min_wal_size = 80MB
# Logging pour production
log_destination = 'stderr'
logging_collector = on
log_directory = '/var/log/postgresql'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'mod'
log_min_duration_statement = 1000
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
# Sécurité
ssl = off
password_encryption = md5
shared_preload_libraries = ''
# Performance
random_page_cost = 1.1
effective_io_concurrency = 200
default_statistics_target = 100
# Timeouts
statement_timeout = 30000
lock_timeout = 5000
idle_in_transaction_session_timeout = 300000
# Autovacuum optimisé pour RegisFlow
autovacuum = on
autovacuum_max_workers = 2
autovacuum_naptime = 30s
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
-1
View File
@@ -1 +0,0 @@
<html><body><h1>RegisFlow - Loading...</h1></body></html>
+5 -4
View File
@@ -202,7 +202,7 @@ Preferred communication style: Simple, everyday language.
- ✅ Safety confirmation dialogs for manual purge operations
- ✅ Real-time monitoring of data retention status with visual indicators
### Docker Configuration (January 9, 2025)
### Docker Configuration & Cleanup (January 9, 2025)
- ✅ Complete Docker setup optimized for external PostgreSQL database
- ✅ Docker Compose configuration with RegisFlow application only
- ✅ Automated database connection and migration scripts for external PostgreSQL
@@ -210,14 +210,15 @@ Preferred communication style: Simple, everyday language.
- ✅ Production-ready configuration with security best practices
- ✅ Persistent volumes for backup data
- ✅ Environment variable configuration with preconfigured PostgreSQL credentials
- ✅ Comprehensive Docker documentation with deployment instructions
- ✅ Nginx configuration removed for simplified deployment (application accessible on port 5000)
- ✅ Preconfigured PostgreSQL user (regisflow/RegisFlow2024!) - only IP change needed
- ✅ Removed all nginx configuration files and dependencies
- ✅ Cleaned up redundant Docker scripts and deployment files
- ✅ Simplified network configuration without IP presets to avoid conflicts
- ✅ Default Docker bridge network usage for maximum compatibility
- ✅ Ultra-simple installation process with single command: docker-compose up -d
- ✅ Single docker-compose.yml file for all environments (dev, test, production)
- ✅ Eliminated multiple configuration files to reduce complexity
- ✅ Removed unnecessary documentation files and assets
- ✅ Streamlined project structure with only essential files
### Node.js 18 Compatibility Fix (January 9, 2025)
- ✅ Resolved TypeError with undefined paths in Node.js 18 production environment
-36
View File
@@ -1,36 +0,0 @@
-- Script de configuration PostgreSQL pour RegisFlow
-- Exécuter sur votre serveur PostgreSQL externe
-- Se connecter en tant que superutilisateur postgres :
-- sudo -u postgres psql
-- 1. Créer l'utilisateur RegisFlow
CREATE USER regisflow WITH PASSWORD 'RegisFlow2024!';
-- 2. Créer la base de données RegisFlow
CREATE DATABASE regisflow OWNER regisflow;
-- 3. Donner tous les privilèges à l'utilisateur
GRANT ALL PRIVILEGES ON DATABASE regisflow TO regisflow;
-- 4. Se connecter à la base regisflow pour configurer les permissions
\c regisflow
-- 5. Donner les permissions sur le schéma public
GRANT ALL PRIVILEGES ON SCHEMA public TO regisflow;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO regisflow;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO regisflow;
-- 6. Permissions par défaut pour les futurs objets
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO regisflow;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO regisflow;
-- 7. Vérifier la configuration
SELECT usename, usecreatedb, usesuper FROM pg_user WHERE usename = 'regisflow';
SELECT datname, datowner FROM pg_database WHERE datname = 'regisflow';
-- Configuration terminée !
-- Utilisateur: regisflow
-- Mot de passe: RegisFlow2024!
-- Base de données: regisflow
-- Port: 5433 (assurez-vous que PostgreSQL écoute sur ce port)