# 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). ```bash cd ~/Documents/03_Dev/site-photo bash scripts/backup.sh ``` Ca cree `backups/db-.sql.gz` et `backups/uploads-.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) ```bash git clone https://git.acadenice.com/Corentin/site-mariage.git mostuki cd mostuki ``` --- ## ETAPE 3 — Configurer les secrets de prod (sur le SERVEUR) ```bash cp .env.prod.example .env ``` Edite `.env` et remplis chaque valeur : ```bash # 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) ```bash 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 (sans tes series ni tes photos). On la remplace avec ton contenu a l'etape 6. --- ## ETAPE 5 — Transferer les backups (depuis TA machine) ```bash 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 bash scripts/restore.sh backups/db-.sql.gz backups/uploads-.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 - [ ] Les 4 series s'affichent dans REALISATIONS -> 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) ```bash 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. ```