diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md deleted file mode 100644 index b35a4c8..0000000 --- a/DEPLOYMENT_GUIDE.md +++ /dev/null @@ -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 - 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) \ No newline at end of file diff --git a/DOCKER_TEST_GUIDE.md b/DOCKER_TEST_GUIDE.md deleted file mode 100644 index 7a21afe..0000000 --- a/DOCKER_TEST_GUIDE.md +++ /dev/null @@ -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é. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 73bc4e6..7942cc4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/INSTALL_SIMPLE.md b/INSTALL_SIMPLE.md deleted file mode 100644 index 4fd06d7..0000000 --- a/INSTALL_SIMPLE.md +++ /dev/null @@ -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.** \ No newline at end of file diff --git a/NETWORK_CONFIG.md b/NETWORK_CONFIG.md deleted file mode 100644 index c9e2be6..0000000 --- a/NETWORK_CONFIG.md +++ /dev/null @@ -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 \ No newline at end of file diff --git a/QUICK_START.md b/QUICK_START.md deleted file mode 100644 index 5cdbef1..0000000 --- a/QUICK_START.md +++ /dev/null @@ -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. \ No newline at end of file diff --git a/README.md b/README.md index 440b027..2b6a0d9 100644 --- a/README.md +++ b/README.md @@ -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. \ No newline at end of file +``` +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 \ No newline at end of file diff --git a/README_DOCKER.md b/README_DOCKER.md deleted file mode 100644 index eba188e..0000000 --- a/README_DOCKER.md +++ /dev/null @@ -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 -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/) \ No newline at end of file diff --git a/README_PRODUCTION.md b/README_PRODUCTION.md deleted file mode 100644 index fd35afc..0000000 --- a/README_PRODUCTION.md +++ /dev/null @@ -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. \ No newline at end of file diff --git a/attached_assets/Pasted--Application-Registre-des-Ventes-de-P-tards-Squelette-Complet-et-Sp-cifications-Techniques--1752083651641_1752083651642.txt b/attached_assets/Pasted--Application-Registre-des-Ventes-de-P-tards-Squelette-Complet-et-Sp-cifications-Techniques--1752083651641_1752083651642.txt deleted file mode 100644 index a32106f..0000000 --- a/attached_assets/Pasted--Application-Registre-des-Ventes-de-P-tards-Squelette-Complet-et-Sp-cifications-Techniques--1752083651641_1752083651642.txt +++ /dev/null @@ -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", - showCamera: "boolean", - currentPhotoType: "string ('photoRecto'|'photoVerso')", - toasts: "Array", - 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* \ No newline at end of file diff --git a/attached_assets/image_1752086995593.png b/attached_assets/image_1752086995593.png deleted file mode 100644 index f3a06dc..0000000 Binary files a/attached_assets/image_1752086995593.png and /dev/null differ diff --git a/attached_assets/image_1752092607974.png b/attached_assets/image_1752092607974.png deleted file mode 100644 index 769781c..0000000 Binary files a/attached_assets/image_1752092607974.png and /dev/null differ diff --git a/attached_assets/image_1752093501588.png b/attached_assets/image_1752093501588.png deleted file mode 100644 index f334d13..0000000 Binary files a/attached_assets/image_1752093501588.png and /dev/null differ diff --git a/attached_assets/image_1752093733153.png b/attached_assets/image_1752093733153.png deleted file mode 100644 index ee593bf..0000000 Binary files a/attached_assets/image_1752093733153.png and /dev/null differ diff --git a/attached_assets/image_1752095069705.png b/attached_assets/image_1752095069705.png deleted file mode 100644 index 36eb6f6..0000000 Binary files a/attached_assets/image_1752095069705.png and /dev/null differ diff --git a/attached_assets/image_1752095080097.png b/attached_assets/image_1752095080097.png deleted file mode 100644 index 36eb6f6..0000000 Binary files a/attached_assets/image_1752095080097.png and /dev/null differ diff --git a/attached_assets/image_1752096341746.png b/attached_assets/image_1752096341746.png deleted file mode 100644 index c283d58..0000000 Binary files a/attached_assets/image_1752096341746.png and /dev/null differ diff --git a/attached_assets/image_1752096760109.png b/attached_assets/image_1752096760109.png deleted file mode 100644 index a2b187a..0000000 Binary files a/attached_assets/image_1752096760109.png and /dev/null differ diff --git a/attached_assets/image_1752097142148.png b/attached_assets/image_1752097142148.png deleted file mode 100644 index 0ca9cda..0000000 Binary files a/attached_assets/image_1752097142148.png and /dev/null differ diff --git a/attached_assets/image_1752097212677.png b/attached_assets/image_1752097212677.png deleted file mode 100644 index 85adfa2..0000000 Binary files a/attached_assets/image_1752097212677.png and /dev/null differ diff --git a/attached_assets/image_1752097658280.png b/attached_assets/image_1752097658280.png deleted file mode 100644 index ce6f649..0000000 Binary files a/attached_assets/image_1752097658280.png and /dev/null differ diff --git a/debug-docker.sh b/debug-docker.sh deleted file mode 100644 index e07d31b..0000000 --- a/debug-docker.sh +++ /dev/null @@ -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" \ No newline at end of file diff --git a/deploy-prod.sh b/deploy-prod.sh deleted file mode 100644 index 9386a24..0000000 --- a/deploy-prod.sh +++ /dev/null @@ -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 !" \ No newline at end of file diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index d924422..0000000 --- a/deploy.sh +++ /dev/null @@ -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" \ No newline at end of file diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh deleted file mode 100644 index 04197fb..0000000 --- a/docker-entrypoint.sh +++ /dev/null @@ -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 \ No newline at end of file diff --git a/init.sql b/init.sql deleted file mode 100644 index 16448c3..0000000 --- a/init.sql +++ /dev/null @@ -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) \ No newline at end of file diff --git a/install-simple.sh b/install-simple.sh deleted file mode 100644 index 87dfee3..0000000 --- a/install-simple.sh +++ /dev/null @@ -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" \ No newline at end of file diff --git a/monitoring.sh b/monitoring.sh deleted file mode 100755 index 5007be6..0000000 --- a/monitoring.sh +++ /dev/null @@ -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 \ No newline at end of file diff --git a/nginx-reverse-proxy.conf b/nginx-reverse-proxy.conf deleted file mode 100644 index 85ee168..0000000 --- a/nginx-reverse-proxy.conf +++ /dev/null @@ -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; -} \ No newline at end of file diff --git a/postgres-prod.conf b/postgres-prod.conf deleted file mode 100644 index 6a6d3a0..0000000 --- a/postgres-prod.conf +++ /dev/null @@ -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 \ No newline at end of file diff --git a/public/index.html b/public/index.html deleted file mode 100644 index c55ac19..0000000 --- a/public/index.html +++ /dev/null @@ -1 +0,0 @@ -

RegisFlow - Loading...

diff --git a/replit.md b/replit.md index 5ad7ad8..fa6e4a3 100644 --- a/replit.md +++ b/replit.md @@ -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 diff --git a/setup-postgres.sql b/setup-postgres.sql deleted file mode 100644 index 497f0c2..0000000 --- a/setup-postgres.sql +++ /dev/null @@ -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) \ No newline at end of file