Files
photobooth-qr/deploy
KevinLecou 7c5a2d87b9 Corrige le MIME type des fichiers .mjs (bug bloquant en prod)
nginx:alpine ne connaît pas l'extension .mjs par défaut et la servait en
application/octet-stream — le navigateur refusait d'exécuter les modules
ES (browser-image-compression.mjs, qrcode-generator.mjs), ce qui plantait
silencieusement TOUT le JS qui les importe : page upload invité bloquée
sur "Chargement...", générateur QR et carton imprimable cassés depuis
leur déploiement. Aucune erreur visible sans ouvrir la console navigateur.

Découvert suite à un vrai test d'upload de Kévin depuis son téléphone.
2026-09-16 15:11:07 +02:00
..

Déploiement front — VPS Hostinger

Le front (src/e, src/admin, src/vendor) est servi par un container nginx:alpine sur le VPS existant (celui de n8n), rattaché au réseau Docker n8n_default pour que Traefik (déjà en place pour n8n) puisse le router.

  • Domaine : photobooth.assistantaikev.eu (DNS A → IP du VPS, cf. ~/.claude/CLAUDE.md pour l'IP à jour)
  • Emplacement sur le VPS : ~/photobooth-qr/ (dossier de kevin, pas de sudo requis — contrairement à /docker/n8n/ qui est root)
  • Fichiers :
    • docker-compose.yml (ce dossier) — service photobooth-front, labels Traefik pour le routage/SSL (réutilise le certresolver mytlschallenge déjà configuré pour n8n)
    • nginx-photobooth.conf (ce dossier) — réécriture /e/<slug> et /admin/<slug> vers les index.html respectifs
    • site/ (non versionné ici, généré à partir de src/) — copie de src/e, src/admin, src/vendor, avec les vrais config.js (gitignorés dans le repo principal, à recréer sur le VPS à partir de src/e/config.example.js / src/admin/gallery/config.example.js)

Redéployer après une modification du front

Depuis la machine locale (pas besoin de sudo, kevin possède le dossier) :

scp -r src/e src/admin src/vendor kevin@<IP_VPS>:~/photobooth-qr/site/
# Recréer les config.js réels sur le VPS s'ils ont été écrasés par le scp
ssh kevin@<IP_VPS> "cd ~/photobooth-qr && docker compose restart photobooth-front"

Aucun rebuild d'image nécessaire — c'est un bind-mount, nginx sert les fichiers directement.