# Migration vers PostgreSQL + Docker Ce guide explique comment migrer NoteFlow de SQLite vers PostgreSQL avec Docker. ## 🎯 Pourquoi PostgreSQL? ### ProblĂšmes avec SQLite - ❌ Concurrence limitĂ©e (verrous sur toute la DB) - ❌ Difficile de savoir quelle DB est utilisĂ©e - ❌ Pas de logs de requĂȘtes natifs - ❌ Corruption possible en cas de crash - ❌ Pas adaptĂ© pour la production ### Avantages de PostgreSQL - ✅ Concurrence parfaite (MVCC) - ✅ Une seule source de vĂ©ritĂ© - ✅ Transactions ACID robustes - ✅ Logs et monitoring natifs - ✅ Production-ready et performant - ✅ IntĂ©gration Docker parfaite ## 📋 PrĂ©requis - Docker et Docker Compose installĂ©s - Sauvegarde de votre base SQLite actuelle - 5 minutes de votre temps ## 🚀 Étapes de Migration ### 1. Installer les dĂ©pendances PostgreSQL ```bash npm install pg@^8.11.3 ``` ### 2. Activer PostgreSQL dans database.js ```bash # Backup de l'ancien fichier cp config/database.js config/database-sqlite.js.backup # Installer la nouvelle version PostgreSQL cp config/database-postgres.js config/database.js ``` ### 3. CrĂ©er le fichier .env (optionnel) ```bash cat > .env </dev/null # Ou regarder dans les logs du serveur grep "Base de donnĂ©es connectĂ©e" data/app.log ``` Une fois trouvĂ©e, lancez la migration: ```bash # Exemple si la DB est dans /app/data/notes.db SQLITE_PATH=/app/data/notes.db node scripts/migrate-sqlite-to-postgres.js # Ou si locale SQLITE_PATH=./data/notes.db node scripts/migrate-sqlite-to-postgres.js ``` Vous devriez voir: ``` ==================== MIGRATION SQLite → PostgreSQL ==================== ✓ SQLite connectĂ©: /app/data/notes.db ✓ PostgreSQL connectĂ© 📊 DĂ©but de la migration... 📋 Migration table: users ✓ Table "users": 2/2 lignes migrĂ©es 📋 Migration table: notes ✓ Table "notes": 45/45 lignes migrĂ©es 📋 Migration table: rss_articles ✓ Table "rss_articles": 127/127 lignes migrĂ©es ... ======================================================== ✅ Migration terminĂ©e! Total: 250 lignes migrĂ©es ======================================================== ``` ### 6. RedĂ©marrer l'application ```bash # Reconstruire l'image Docker docker-compose build notes-app # RedĂ©marrer tout docker-compose up -d # Voir les logs docker-compose logs -f notes-app ``` Vous devriez voir: ``` [INFO]: ✓ PostgreSQL connectĂ©: postgresql://noteflow:***@postgres:5499/noteflow [INFO]: ✓ Tables PostgreSQL créées avec succĂšs [INFO]: Server running on port 2222 ``` ## ✅ VĂ©rification ### 1. Tester la connexion PostgreSQL ```bash # Se connecter Ă  PostgreSQL docker exec -it noteflow-postgres psql -U noteflow -d noteflow # VĂ©rifier les tables \dt # Compter les articles RSS SELECT COUNT(*) FROM rss_articles; # Voir les 5 derniers articles SELECT title, pub_date FROM rss_articles ORDER BY pub_date DESC LIMIT 5; # Quitter \q ``` ### 2. Tester l'application 1. Ouvrez http://localhost:2222 2. Connectez-vous (admin/admin) 3. VĂ©rifiez que vos notes sont lĂ  4. VĂ©rifiez que les flux RSS s'affichent 5. Ajoutez un nouveau flux RSS 6. Attendez 2 minutes et vĂ©rifiez les nouveaux articles ## 🔧 Configuration ### Variables d'environnement Le systĂšme utilise `DATABASE_URL` pour se connecter Ă  PostgreSQL: ```bash DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE ``` Exemple: ```bash DATABASE_URL=postgresql://noteflow:mon_password@postgres:5432/noteflow ``` ### Dans docker-compose.yml PostgreSQL tourne sur le **port 5499** (externe) et communique sur le **port 5432** (interne): ```yaml postgres: ports: - "5499:5499" # Accessible depuis l'hĂŽte sur 5499 ``` L'application se connecte via le nom du service: ```yaml notes-app: environment: - DATABASE_URL=postgresql://noteflow:password@postgres:5432/noteflow ``` ## 📊 Maintenance PostgreSQL ### Backup ```bash # Backup complet docker exec noteflow-postgres pg_dump -U noteflow -d noteflow > backup.sql # Backup compressĂ© docker exec noteflow-postgres pg_dump -U noteflow -d noteflow | gzip > backup.sql.gz ``` ### Restore ```bash # Depuis un backup docker exec -i noteflow-postgres psql -U noteflow -d noteflow < backup.sql # Depuis un backup compressĂ© gunzip < backup.sql.gz | docker exec -i noteflow-postgres psql -U noteflow -d noteflow ``` ### Logs ```bash # Voir les logs PostgreSQL docker-compose logs postgres # Logs en temps rĂ©el docker-compose logs -f postgres ``` ### Performance ```bash # Se connecter Ă  PostgreSQL docker exec -it noteflow-postgres psql -U noteflow -d noteflow # Voir les requĂȘtes lentes SELECT pid, now() - query_start AS duration, query FROM pg_stat_activity WHERE state = 'active' ORDER BY duration DESC; # Taille de la base SELECT pg_size_pretty(pg_database_size('noteflow')); # Taille des tables 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; ``` ## 🐛 DĂ©pannage ### ProblĂšme: PostgreSQL ne dĂ©marre pas ```bash # VĂ©rifier les logs docker-compose logs postgres # Supprimer le volume et recommencer docker-compose down -v docker-compose up -d postgres ``` ### ProblĂšme: Application ne se connecte pas ```bash # VĂ©rifier les variables d'environnement docker exec notes-todo-app env | grep DATABASE # VĂ©rifier que PostgreSQL est accessible docker exec notes-todo-app nc -zv postgres 5432 ``` ### ProblĂšme: Articles RSS toujours pas affichĂ©s ```bash # Se connecter Ă  PostgreSQL docker exec -it noteflow-postgres psql -U noteflow -d noteflow # Compter les articles SELECT COUNT(*) FROM rss_articles; # Voir les 10 derniers SELECT id, title, pub_date FROM rss_articles ORDER BY pub_date DESC LIMIT 10; # VĂ©rifier les flux SELECT id, title, enabled FROM rss_feeds; ``` Si la table est vide, le problĂšme vient du scheduler. VĂ©rifiez les logs: ```bash docker-compose logs -f notes-app | grep RSS ``` ## 🔄 Rollback vers SQLite Si vous devez revenir Ă  SQLite: ```bash # 1. ArrĂȘter Docker docker-compose down # 2. Restaurer l'ancien database.js cp config/database-sqlite.js.backup config/database.js # 3. Modifier docker-compose.yml # Commentez la section postgres et remettez DB_PATH # 4. RedĂ©marrer docker-compose up -d ``` ## ✹ RĂ©sultat Attendu AprĂšs migration vers PostgreSQL: ✅ **ProblĂšme RSS rĂ©solu**: Les nouveaux articles s'affichent immĂ©diatement ✅ **Pas de confusion DB**: Une seule source de vĂ©ritĂ© ✅ **Debuggable**: Logs SQL natifs dans PostgreSQL ✅ **Performance**: Meilleure concurrence et vitesse ✅ **Production-ready**: SystĂšme robuste et fiable ✅ **Monitoring**: Outils natifs PostgreSQL disponibles **Les articles du 14 novembre (et suivants) seront visibles dĂšs le prochain cycle du scheduler !** 🎉