Date : 23/01/2026 13:22 Statut : TERMINÉ (23/01/2026 14:10)
NeedFinder fonctionne actuellement sur DEV avec des données réelles (445 posts, 270 needs). Suite à l'audit :
postgres)Dans Supabase DEV (dev-portainer), database postgres :
| Schema | Table | Rows | Raison |
|---|---|---|---|
| needfinder | sources | 2 | Vestige ancienne archi |
| needfinder | raw_posts | 0 | Vestige |
| needfinder | detected_needs | 0 | Vestige |
| needfinder | need_mentions | 0 | Vestige |
| needfinder | collection_logs | 1 | Vestige |
| public | discoveries | 0 | Vestige v2 |
| public | discovery_sources | 3 | Vestige v2 |
| public | need_discovery_matches | 0 | Vestige v2 |
-- Connexion : docker exec supabase-db psql -U postgres -d postgres
-- 1. Supprimer les tables dans schema needfinder (database postgres)
DROP TABLE IF EXISTS needfinder.need_mentions CASCADE;
DROP TABLE IF EXISTS needfinder.detected_needs CASCADE;
DROP TABLE IF EXISTS needfinder.raw_posts CASCADE;
DROP TABLE IF EXISTS needfinder.collection_logs CASCADE;
DROP TABLE IF EXISTS needfinder.sources CASCADE;
DROP SCHEMA IF EXISTS needfinder CASCADE;
-- 2. Supprimer les tables orphelines dans public
DROP TABLE IF EXISTS public.need_discovery_matches CASCADE;
DROP TABLE IF EXISTS public.discovery_sources CASCADE;
DROP TABLE IF EXISTS public.discoveries CASCADE;
-- Vérifier qu'il ne reste rien
SELECT schemaname, tablename
FROM pg_tables
WHERE schemaname IN ('needfinder')
OR tablename LIKE '%need%'
OR tablename LIKE '%discovery%';
AVANT (DEV) APRÈS (PROD)
───────────────── ─────────────────
Container: needfinder Container: needfinder
Host: dev-portainer (192.168.1.51) Host: prod-portainer (192.168.1.12)
DB: supabase-db:5432/needfinder DB: supabase-db-prod:5432/postgres
Schema: needfinder Schema: needfinder
Backup: rsync stock_1to Backup: rsync + pg_dump O2switch
-- Connexion : docker exec supabase-db-prod psql -U postgres
-- Créer schema dédié
CREATE SCHEMA IF NOT EXISTS needfinder;
-- Créer user dédié
CREATE USER needfinder_service WITH PASSWORD 'UK3GlkfwnFZZVAGxScyz5DF6';
GRANT USAGE ON SCHEMA needfinder TO needfinder_service;
GRANT ALL ON ALL TABLES IN SCHEMA needfinder TO needfinder_service;
GRANT ALL ON ALL SEQUENCES IN SCHEMA needfinder TO needfinder_service;
ALTER DEFAULT PRIVILEGES IN SCHEMA needfinder GRANT ALL ON TABLES TO needfinder_service;
# Depuis PVE, restaurer le backup sur PROD
ssh gouroubleu@prod-portainer.local "docker exec -i supabase-db-prod psql -U postgres" < /stock_8to/backups/needfinder/needfinder_backup_data_20260123_1310.sql
# /stock_8to/33800-stack/projects/needfinder/conf.prod.gouroubleu.yml
name: "needfinder"
target: "prod-portainer" # Changé de dev-portainer
type: "bun"
port: 5200
domain: "needfinder-api.33800.nowhere84.com" # Sans -dev
services:
- supabase # Injecte les vars PROD
nginx:
enabled: true
ssl: true
health: "/health"
logs: true
# Nouvelle connexion vers Supabase PROD
NEEDFINDER_DB_URL=postgresql://needfinder_service:UK3GlkfwnFZZVAGxScyz5DF6@supabase-db-prod:5432/postgres
# Note: database postgres, schema needfinder (convention PROD)
cd /stock_8to/33800-stack/projects/needfinder
git add conf.prod.gouroubleu.yml
git commit -m "feat: migrate to PROD"
git push origin main
# CI/CD déploie automatiquement sur prod-portainer
Modifier /stock_8to/33800-stack/scripts/backup/pg-to-o2switch.sh pour inclure le schema needfinder :
# Ajouter après le dump existant :
# Dump NeedFinder schema
ssh $PROD_HOST "docker exec supabase-db-prod pg_dump -U postgres postgres --schema=needfinder" | gzip > /tmp/needfinder_$TIMESTAMP.sql.gz
scp -q /tmp/needfinder_$TIMESTAMP.sql.gz $O2_HOST:~/$O2_PATH/
rm -f /tmp/needfinder_$TIMESTAMP.sql.gz
ssh gouroubleu@dev-portainer.local "docker stop needfinder && docker rm needfinder"
| Action | Fichier/Commande | Impact |
|---|---|---|
| Nettoyage tables | SQL sur supabase-db (DEV) | Supprime vestiges |
| Créer schema PROD | SQL sur supabase-db-prod | Prépare PROD |
| Restaurer données | psql < backup.sql | Migre données |
| Nouvelle config | conf.prod.gouroubleu.yml | CI/CD vers PROD |
| Modifier backup | pg-to-o2switch.sh | Backup O2switch |
| Supprimer DEV | docker stop/rm | Cleanup |
| Risque | Mitigation |
|---|---|
| Perte données pendant migration | Backup fait le 23/01 (728 Ko) |
| Downtime | Quelques minutes pendant le switch |
| URL change | Mettre à jour dashboard.nowhere84.com |
OBLIGATOIRE : Partie 2 (Migration PROD) AVANT Partie 1 (Nettoyage)
Raison : Ne jamais supprimer avant d'avoir sécurisé les données ailleurs.
1. Migration PROD (Partie 2)
└─> Données sécurisées sur PROD + backup O2switch
2. Nettoyage DEV (Partie 1)
└─> Suppression sans risque
TERMINÉ le 23/01/2026 à 14:10