Aller au contenu principal

Deploiement ERP sur Coolify (prod)

Ce guide production est detaille, commande par commande. Tous les exemples utilisent oben-services.com.

Resume rapide

  1. Prepare DNS (app, docs, supabase, studio optionnel, www optionnel).
  2. Cree la ressource Supabase (Coolify) et note ANON_KEY.
  3. Configure manuellement les variables Supabase pour aligner les domaines.
  4. Cree la ressource Frontend/Docs (Docker Compose).
  5. Configure les variables frontend + domaines + HTTPS.
  6. Deploie, puis verifie DNS/TLS + health checks.
  7. Pousse le schema + Edge Functions.
  8. Cree le premier Admin.

Avant de commencer

  • VPS avec Coolify installe
  • Acces DNS pour les sous-domaines
  • Acces au repo Git prive
  • Liste des URLs centralisee: voir urls.md

Etape 1 - DNS (A records)

1.1 Creer les A records

Renseigne les A records vers l IP du VPS.

DomaineTypeCibleUsage
oben-services.comA<IP_VPS>Application
doc.oben-services.comA<IP_VPS>Documentation
supabase.oben-services.comA<IP_VPS>Supabase (Kong)
studio.supabase.oben-services.comA<IP_VPS>Supabase Studio (optionnel)
www.oben-services.comA<IP_VPS>Optionnel si --www

1.2 Verifier la propagation DNS

dig +short oben-services.com
dig +short doc.oben-services.com
dig +short supabase.oben-services.com
dig +short studio.supabase.oben-services.com
dig +short www.oben-services.com

Attends la propagation si l IP ne remonte pas.

Etape 2 - Creer la ressource Supabase (Coolify)

  1. Projects -> ton projet -> Add Resource -> Supabase
  2. Domains:
    • kong -> supabase.oben-services.com (port 8000)
    • (optionnel) studio -> studio.supabase.oben-services.com (port 3000)
  3. Note la cle ANON_KEY

Etape 3 - Configurer les variables Supabase (manuel)

Coolify ne genere pas ces variables pour ton domaine. Ajoute-les dans la ressource Supabase.

3.1 Variables de domaine et CORS

Dans Coolify -> ressource Supabase -> Environment Variables:

SITE_URL=https://oben-services.com
GOTRUE_SITE_URL=https://oben-services.com
ALLOWED_ORIGINS=https://oben-services.com,https://www.oben-services.com
ALLOWED_REDIRECT_ORIGINS=https://oben-services.com,https://www.oben-services.com
ADDITIONAL_REDIRECT_URLS=https://oben-services.com/auth/set-password,https://www.oben-services.com/auth/set-password
URI_ALLOW_LIST=https://oben-services.com/auth/set-password,https://www.oben-services.com/auth/set-password
API_EXTERNAL_URL=https://supabase.oben-services.com

Si tu utilises www:

ALLOWED_ORIGINS=https://oben-services.com,https://www.oben-services.com
ADDITIONAL_REDIRECT_URLS=https://www.oben-services.com
GOTRUE_URI_ALLOW_LIST=https://www.oben-services.com

3.2 Variables SMTP (emails d invitation)

Renseigne tes credentials SMTP:

SMTP_ADMIN_EMAIL=admin@oben-services.com
SMTP_SENDER_NAME= OBEN SERVICES
SMTP_HOST=mail.infomaniak.com
SMTP_PORT=587
SMTP_USER=change-me
SMTP_PASS= <mot de passe d'application cree dans infomaniak manager>

Etape 4 - Creer la ressource Frontend/Docs

  1. Projects -> ton projet -> Add Resource -> Private Repository
  2. Build Pack = Docker Compose
  3. Compose file = docker-compose.yml
  4. Branche = main (ou ta branche)
  5. Save

Etape 5 - Configurer les variables Frontend/Docs

Dans Coolify -> ressource Frontend/Docs -> Environment Variables:

SUPABASE_PUBLIC_URL=https://supabase.oben-services.com
ANON_KEY=<TA_ANON_KEY>

Etape 6 - Configurer les domaines et HTTPS

  1. Service erp_frontend -> oben-services.com (port 80)
  2. Service erp_docs -> doc.oben-services.com (port 80)
  3. (Optionnel) ajoute www.oben-services.com sur erp_frontend
  4. Active HTTPS/Lets Encrypt pour chaque domaine

Etape 7 - Deployer

Clique Deploy sur les deux ressources.

Etape 8 - Verifs DNS, TLS et health checks

8.1 DNS

dig +short oben-services.com
dig +short doc.oben-services.com
dig +short supabase.oben-services.com

8.2 TLS

curl -Iv https://oben-services.com
curl -Iv https://doc.oben-services.com
curl -Iv https://supabase.oben-services.com

Tu dois voir un certificat valide (pas d erreur SSL).

8.3 Health checks HTTP

Frontend:

curl -I https://oben-services.com
curl -s https://oben-services.com/erp-config.js

Docs:

curl -I https://doc.oben-services.com

Etape 9 - Deployer le schema (migrations)

  1. Genere les bundles SQL (init clean + patch prod):
./scripts/build-supabase-sql-bundles.sh --prod-from 20260217000000
  1. Ouvre Supabase Studio -> SQL Editor.
  2. Pour une prod existante, colle supabase/sql/prod-current/prod_patch_from_20260217000000.sql puis execute.
  3. Pour une nouvelle instance, colle supabase/sql/init/init_clean_all_patches.sql puis execute.
  4. Verifie qu il n y a pas d erreur.

Etape 10 - Deployer les Edge Functions

  1. Depuis ta machine locale, copie tout le dossier supabase/functions (tous les sous-dossiers + _shared) vers /root/supabase/functions via FileZilla (SFTP).
Rsync (sync incrementale)
  • Transformes les fichiers en directories dans Coolify.
  • Depuis le terminal localhost dans Coolify:
mkdir -p /data/coolify/services/yowg4gg448oocsw0cgsc4cko/volumes/functions
rsync -avh --delete /root/supabase/functions/ /data/coolify/services/yowg4gg448oocsw0cgsc4cko/volumes/functions/
  1. Verifie qu au moins une fonction est presente (ex: supabase/functions/main/index.ts):
test -f /root/supabase/functions/main/index.ts
ls -la /root/supabase/functions
  1. Coolify -> ressource Supabase -> service functions:
    • Image/command par defaut (edge-runtime)
    • Volumes -> Add volume:
      • Host/Source: /root/supabase/functions
      • Container/Destination: /home/deno/functions
      • Mode: read-only
Attention

Variable requise dans le service functions (sinon CORS/403 dans l app): ALLOWED_ORIGINS=https://oben-services.com,https://www.oben-services.com

  1. Important: ne pas activer "Build from Git" sur ce service.
  2. Redeploie uniquement le service functions.
  3. Re-teste le endpoint /hello:
ANON_KEY="<TA_ANON_KEY>"
curl -i https://supabase.oben-services.com/functions/v1/hello \
-H "Authorization: Bearer $ANON_KEY" \
-H "apikey: $ANON_KEY"

Etape 11 - Creer le premier Admin

L application est en acces par invitation. Il faut un premier compte Admin.

Option A - Acces a KONG via dashboard

  1. Connecte-toi au dashboard.
  2. Cree un user.
  3. Donne les droits admin via SQL Editor (source RBAC: table public.access):
    • Ouvre Supabase Studio -> SQL Editor.
    • Execute la commande suivante (remplace l email):
with target as (
select id, lower(trim(email)) as email
from auth.users
where lower(trim(email)) = lower(trim('user@exemple.com'))
limit 1
)
insert into public.access (email, user_id, role)
select target.email, target.id, 'Admin'
from target
on conflict (email)
do update set
user_id = excluded.user_id,
role = excluded.role,
updated_at = now();

Etape 12 - Initialisation des donnees de test locales

  1. Ouvre Supabase Studio -> SQL Editor.
  2. Colle le contenu de supabase/seed_test_init.sql puis execute.
  3. Verifie qu il n y a pas d erreur.

Ne pas executer cette initialisation en prod.

En prod, les donnees de demo sont gerees par migration:

  • Client demo: LamborghiRUN
  • Technicien demo: John Doe
  • Perimetre: mois precedent complet + mois courant jusqu a aujourd hui
  • Planification: job pg_cron quotidien via public.refresh_demo_lamborghirun_data()
  • Compte client demo initial: rapport.lamborghirun.demo@oben-services.test
  • Compte technicien demo initial: john.doe.demo@oben-services.test
  • Aucun mot de passe de prod n est versionne dans le repo; si un acces interactif est necessaire, genere un lien de recuperation dans Supabase

Comptes de tests (tous avec le mot de passe admintest!):

RoleEmail
Adminadmin@test.com
Techniciencamille.soto@test.com
Managerlucas.riviere@test.com
Techniciennicolas.gerard@test.com
Techniciensara.benali@test.com
Clientcontact.garage-martin@test.com
Clientoperations.mobilite-nova@test.com
Clientcontact.atelier-horizon@test.com
Clientops.flotte-atlas@test.com
Clientatelier.carrosserie-lumiere@test.com