33800 Docs

← Retour

Proposition : NeedFinder - Nettoyage et Migration PROD

Date : 23/01/2026 13:22 Statut : TERMINÉ (23/01/2026 14:10)


Contexte

NeedFinder fonctionne actuellement sur DEV avec des données réelles (445 posts, 270 needs). Suite à l'audit :


Partie 1 : Nettoyage tables orphelines

Tables à supprimer

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

Commandes de nettoyage

-- 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érification post-nettoyage

-- 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%';

Partie 2 : Migration NeedFinder vers PROD

Architecture cible

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

Étapes de migration

2.1 Créer le schema sur Supabase PROD

-- 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;

2.2 Restaurer les données

# 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

2.3 Modifier conf.dev.gouroubleu.yml → conf.prod.gouroubleu.yml

# /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

2.4 Modifier les variables d'environnement

# Nouvelle connexion vers Supabase PROD
NEEDFINDER_DB_URL=postgresql://needfinder_service:UK3GlkfwnFZZVAGxScyz5DF6@supabase-db-prod:5432/postgres
# Note: database postgres, schema needfinder (convention PROD)

2.5 Déployer

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

2.6 Mettre à jour le backup O2switch

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

2.7 Supprimer l'ancien container DEV

ssh gouroubleu@dev-portainer.local "docker stop needfinder && docker rm needfinder"

Récapitulatif des changements

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

Risques et mitigations

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

Ordre d'exécution

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

Validation


TERMINÉ le 23/01/2026 à 14:10