# NoteFlow - PostgreSQL Uniquement ## 🐘 Configuration NoteFlow utilise **exclusivement PostgreSQL** comme base de donnĂ©es. ## 🚀 DĂ©marrage rapide ### 1. PrĂ©requis - Docker et Docker Compose - Port 5499 disponible (PostgreSQL) - Port 2222 disponible (Application) ### 2. Configuration CrĂ©ez un fichier `.env` (optionnel) pour personnaliser: ```env # PostgreSQL POSTGRES_PASSWORD=votre_mot_de_passe_securise # Application JWT_SECRET=votre_secret_jwt_securise PORT=2222 ``` ### 3. DĂ©marrage ```bash # Construire et dĂ©marrer docker-compose build docker-compose up -d # Voir les logs docker-compose logs -f ``` **🎉 C'est tout!** L'application: - ✅ Attend que PostgreSQL soit prĂȘt - ✅ CrĂ©e automatiquement les tables - ✅ Migre les donnĂ©es SQLite si dĂ©tectĂ©es (une seule fois) - ✅ DĂ©marre le serveur AccĂ©dez Ă : **http://localhost:2222** ## 📩 Migration automatique SQLite → PostgreSQL Si vous aviez une ancienne installation avec SQLite (`data/notes.db`), la migration se fait **automatiquement** au premier dĂ©marrage: 1. Le container dĂ©tecte que PostgreSQL est vide 2. Il cherche `/app/data-sqlite/notes.db` (montĂ© depuis `./data`) 3. Si trouvĂ©, il migre toutes les donnĂ©es automatiquement 4. Les donnĂ©es SQLite sont conservĂ©es comme backup **Aucune action manuelle requise!** ## đŸ—„ïž Structure PostgreSQL ### Configuration dans `docker-compose.yml` ```yaml postgres: image: postgres:16-alpine ports: - "5499:5499" environment: POSTGRES_DB: noteflow POSTGRES_USER: noteflow POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ``` ### Tables créées automatiquement - `users` - Utilisateurs - `notes` - Notes avec tags et prioritĂ©s - `note_todos` - TĂąches dans les notes - `global_todos` - TĂąches de la sidebar - `note_images` - Images attachĂ©es aux notes - `note_files` - Fichiers attachĂ©s aux notes - `rss_feeds` - Flux RSS configurĂ©s - `rss_articles` - Articles RSS rĂ©cupĂ©rĂ©s - `rss_summaries` - RĂ©sumĂ©s gĂ©nĂ©rĂ©s par IA - `calendar_events` - ÉvĂ©nements Google Calendar - `google_oauth_tokens` - Tokens OAuth Google - `settings` - ParamĂštres globaux ## 🔍 Commandes utiles ### AccĂ©der Ă  PostgreSQL ```bash # Via psql dans le container docker exec -it noteflow-postgres psql -U noteflow -d noteflow -p 5499 # Exemples de requĂȘtes SELECT COUNT(*) FROM notes; SELECT COUNT(*) FROM rss_articles; SELECT * FROM users; ``` ### Backup de la base ```bash # CrĂ©er un dump docker exec noteflow-postgres pg_dump -U noteflow -d noteflow -p 5499 > backup-$(date +%Y%m%d).sql # Restaurer un dump cat backup.sql | docker exec -i noteflow-postgres psql -U noteflow -d noteflow -p 5499 ``` ### Voir les logs ```bash # Logs de l'application docker-compose logs -f notes-app # Logs PostgreSQL docker-compose logs -f postgres # Logs de migration au dĂ©marrage docker-compose logs notes-app | grep -A 20 "DĂ©marrage de NoteFlow" ``` ### RedĂ©marrer ```bash # RedĂ©marrer juste l'application docker-compose restart notes-app # RedĂ©marrer tout docker-compose restart # Rebuild complet docker-compose down docker-compose build --no-cache docker-compose up -d ``` ## 🔧 Configuration avancĂ©e ### Variables d'environnement Dans `docker-compose.yml` > `notes-app` > `environment`: ```yaml - DATABASE_URL=postgresql://noteflow:${POSTGRES_PASSWORD}@postgres:5499/noteflow - NODE_ENV=production - JWT_SECRET=${JWT_SECRET} - PORT=2222 ``` ### Ajuster les performances PostgreSQL Pour une production avec beaucoup de donnĂ©es: ```yaml postgres: command: -p 5499 -c max_connections=100 -c shared_buffers=256MB ``` ### Volumes persistants Les donnĂ©es sont stockĂ©es dans des volumes Docker: ```yaml volumes: postgres_data: # DonnĂ©es PostgreSQL notes_uploads: # Images et fichiers uploadĂ©s notes_logs: # Logs de l'application ``` Pour voir les volumes: ```bash docker volume ls | grep noteflow ``` ## 🆘 DĂ©pannage ### PostgreSQL n'est pas prĂȘt Si l'application dit "Attente de PostgreSQL..." en boucle: ```bash # VĂ©rifier que PostgreSQL tourne docker-compose ps postgres # Voir les logs PostgreSQL docker-compose logs postgres # VĂ©rifier le port docker exec noteflow-postgres netstat -tlnp | grep 5499 ``` ### Connexion refusĂ©e ```bash # VĂ©rifier les variables d'environnement docker exec notes-todo-app env | grep DATABASE # Tester la connexion manuellement docker exec notes-todo-app node -e " const { Pool } = require('pg'); const pool = new Pool({ connectionString: process.env.DATABASE_URL }); pool.connect() .then(() => { console.log('✅ OK'); pool.end(); }) .catch(err => { console.log('❌', err.message); }); " ``` ### Reset complet **⚠ ATTENTION: Ceci supprime TOUTES les donnĂ©es!** ```bash docker-compose down -v # -v supprime les volumes docker-compose up -d ``` ### Migrer manuellement depuis SQLite Si la migration automatique Ă©choue: ```bash # Depuis le container docker exec -e SQLITE_PATH=/app/data-sqlite/notes.db \ notes-todo-app node scripts/migrate-sqlite-to-postgres.js # Depuis l'hĂŽte (si Node.js installĂ©) SQLITE_PATH=./data/notes.db \ DATABASE_URL=postgresql://noteflow:password@localhost:5499/noteflow \ node scripts/migrate-sqlite-to-postgres.js ``` ## 📊 Monitoring ### VĂ©rifier la santĂ© de l'application ```bash curl http://localhost:2222/health ``` RĂ©ponse attendue: ```json { "status": "ok", "timestamp": "2025-11-14T10:00:00.000Z", "uptime": 123.45 } ``` ### Statistiques PostgreSQL ```bash docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c " SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size FROM pg_tables WHERE schemaname = 'public' ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC; " ``` ## 🔐 SĂ©curitĂ© en production ### 1. Changez les mots de passe par dĂ©faut ```bash # GĂ©nĂ©rer des secrets forts openssl rand -base64 32 ``` Mettez-les dans `.env`: ```env POSTGRES_PASSWORD= JWT_SECRET= ``` ### 2. N'exposez PAS PostgreSQL sur Internet Par dĂ©faut, PostgreSQL est accessible sur localhost:5499. Pour la production: ```yaml postgres: ports: - "127.0.0.1:5499:5499" # Seulement localhost ``` ### 3. Configurez un reverse proxy (nginx) L'application utilise le rĂ©seau `nginx_default`. Configurez nginx pour gĂ©rer HTTPS. ## 📝 Notes techniques - **Base de donnĂ©es:** PostgreSQL 16 Alpine - **Node.js:** Version 20 Alpine - **Architecture:** Multi-stage Dockerfile pour optimisation - **Healthcheck:** VĂ©rifie automatiquement l'Ă©tat de l'application - **Restart policy:** `unless-stopped` pour redĂ©marrage automatique - **Migration:** Automatique au premier dĂ©marrage si SQLite dĂ©tectĂ© - **Logs:** GĂ©rĂ©s par Winston avec rotation ## 🎯 Prochaines Ă©tapes aprĂšs installation 1. ✅ Connectez-vous avec `admin` / `admin` 2. ⚠ **CHANGEZ LE MOT DE PASSE ADMIN** 3. 📝 CrĂ©ez vos premiĂšres notes 4. 📰 Configurez vos flux RSS (Admin > Flux RSS) 5. 📅 Connectez Google Calendar (Admin > Google Calendar) 6. 🔑 Configurez OpenRouter pour l'IA (Admin > OpenRouter) --- **Version:** 1.0.0 - PostgreSQL Uniquement **Documentation complĂšte:** Voir README.md principal