site-mariage/DEPLOY.md
Corentin Joguet b0030246e4 chore: package de deploiement prod (Dockerfile, compose, backup/restore, guide)
- Dockerfile multi-stage (build Astro -> runtime node standalone)
- docker-compose.prod.yml : Astro builde, ports bindes 127.0.0.1, secrets requis
- .env.prod.example : template de prod avec generation des secrets
- scripts/backup.sh + restore.sh : migration base Directus + photos
- DEPLOY.md : guide pas a pas
- .dockerignore : exclusion du .env (anti-fuite de secrets)
- untrack du tool-log BYAN (churn)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:00:52 +02:00

4.7 KiB

Deploiement Mostuki Photo — guide pas a pas

Ce guide part du principe que tu as deja un serveur avec Docker + un reverse-proxy (Traefik/nginx) qui gere le TLS et route ton domaine.

Le principe a retenir : git porte le code, pas les donnees. Tes textes, tes series et tes photos vivent dans la base Directus + le volume uploads. Il faut donc les EXPORTER de ta machine et les RESTAURER sur le serveur.


Vue d'ensemble

[Ta machine]                         [Serveur]
1. backup.sh  --> db.sql.gz   --scp-->  6. restore.sh
              --> uploads.tar.gz                |
                                       2. git clone
                                       3. .env de prod
                                       4. up -d --build
                                       5. token Directus
                                       7. reverse-proxy

ETAPE 1 — Exporter ton contenu (sur TA machine)

La stack locale doit tourner (Postgres + Directus up).

cd ~/Documents/03_Dev/site-photo
bash scripts/backup.sh

Ca cree backups/db-<date>.sql.gz et backups/uploads-<date>.tar.gz. Note bien la valeur de DIRECTUS_TOKEN de ton .env local : tu en auras besoin a l'etape 3 (le token est stocke dans la base, il doit correspondre).


ETAPE 2 — Recuperer le code (sur le SERVEUR)

git clone https://git.acadenice.com/Corentin/site-mariage.git mostuki
cd mostuki

ETAPE 3 — Configurer les secrets de prod (sur le SERVEUR)

cp .env.prod.example .env

Edite .env et remplis chaque valeur :

# Genere les 3 secrets aleatoires :
openssl rand -hex 32   # -> DIRECTUS_KEY
openssl rand -hex 32   # -> DIRECTUS_SECRET
openssl rand -hex 24   # -> POSTGRES_PASSWORD
  • PUBLIC_SITE_URL / DIRECTUS_PUBLIC_URL : tes vrais domaines (https).
  • DIRECTUS_TOKEN : la meme valeur que ton .env local (etape 1).
  • DIRECTUS_ADMIN_PASSWORD : un mot de passe fort (sert si la base demarre vide ; sera ecrase par l'admin restaure a l'etape 6 — voir la note).

ETAPE 4 — Demarrer la stack (sur le SERVEUR)

docker compose -f docker-compose.prod.yml up -d --build

Le --build compile l'image Astro de prod. Verifie que les 3 conteneurs tournent : docker compose -f docker-compose.prod.yml ps.

A ce stade la base est VIDE (branding "Laurel & Vow" par defaut). On la remplace avec ton contenu a l'etape 6.


ETAPE 5 — Transferer les backups (depuis TA machine)

scp backups/db-*.sql.gz backups/uploads-*.tar.gz user@serveur:~/mostuki/backups/

(cree le dossier backups/ sur le serveur s'il n'existe pas)


ETAPE 6 — Restaurer ton contenu (sur le SERVEUR)

bash scripts/restore.sh backups/db-<date>.sql.gz backups/uploads-<date>.tar.gz
docker compose -f docker-compose.prod.yml restart directus astro

IMPORTANT securite. La base restauree contient ton compte admin LOCAL, avec son ancien mot de passe (changeme-please). Connecte-toi tout de suite sur Directus admin et change le mot de passe + l'email : Settings -> Users -> ton compte -> nouveau mot de passe.


ETAPE 7 — Brancher le reverse-proxy (sur le SERVEUR)

Les services ecoutent en local uniquement :

  • Site Astro -> 127.0.0.1:4321
  • Directus -> 127.0.0.1:8055

Configure ton reverse-proxy pour router :

  • PUBLIC_SITE_URL (ex: mostuki.fr) -> 127.0.0.1:4321
  • DIRECTUS_PUBLIC_URL (ex: admin.mostuki.fr) -> 127.0.0.1:8055

Avec TLS (Let's Encrypt) sur les deux.


ETAPE 8 — Verifications finales

  • La home affiche bien "Mostuki" (pas "Laurel & Vow") -> sinon la restore DB n'a pas pris, relance l'etape 6.
  • Les photos des series s'affichent (proxy /api/files/... OK).
  • Le formulaire /contact enregistre bien (verifie dans Directus admin, collection contact_requests).
  • Mot de passe admin Directus change (etape 6).
  • Port 8055 NON accessible publiquement (seulement via ton sous-domaine admin derriere le proxy).

Mises a jour ulterieures (code uniquement)

cd ~/mostuki
git pull
docker compose -f docker-compose.prod.yml up -d --build

La base et les photos ne sont pas touchees (volumes persistants).


Sauvegardes regulieres

Relance bash scripts/backup.sh periodiquement (sur le serveur, en adaptant PG_CONTAINER=mostuki-postgres DIRECTUS_CONTAINER=mostuki-directus) et copie les archives ailleurs. C'est ton seul filet en cas de perte du serveur.


Note : email du formulaire de contact

A ce jour, une demande de contact est STOCKEE dans Directus mais n'envoie AUCUN email de notification (TODO dans src/pages/api/contact.ts). Pense a checker la collection contact_requests regulierement, ou demande l'ajout de la notif email (provider a choisir : Resend recommande) avant la mise en ligne.