8.0 KiB
_chordlab — Mise en ligne avec Coolify
Déploiement sur l'infrastructure ghostinthemachine.fr, sur le même modèle que le site des vacances (sudouest.ghostinthemachine.fr) : dépôt Gitea → ressource Coolify en build pack Static → domaine servi par Traefik avec le certificat wildcard existant.
Cible retenue dans ce tutoriel : https://chordlab.ghostinthemachine.fr
Pourquoi héberger une app qui tient dans un fichier ? Parce que Web MIDI exige un contexte sécurisé (
https://oulocalhost). Enfile://, la sortie MIDI live vers le hardware est bloquée par le navigateur. Une fois sur ton domaine en HTTPS, tout fonctionne — y compris depuis le portable posé à côté du studio.
0. Prérequis (déjà en place sur ton infra)
- Serveur Scaleway avec Coolify 4.x et Traefik opérationnels
- Gitea self-hosted accessible
- Wildcard DNS
*.ghostinthemachine.frpointant vers le serveur (Cloudflare) - Certificat wildcard géré par acme.sh/Cloudflare — rien à faire côté SSL
[PROBABLE] Les libellés exacts de l'interface Coolify peuvent varier légèrement selon la version ; le déroulé ci-dessous correspond au flux validé lors du déploiement du site des vacances.
1. Préparer le dépôt Gitea
1.1 Créer le dépôt
Dans Gitea : + → Nouveau dépôt → nom chordlab. Comme pour le site des vacances, le contenu n'a rien de sensible : le plus simple est de le créer public (voir §2.2 pour la raison précise).
1.2 Structurer et pousser
mkdir chordlab && cd chordlab
git init
# Le fichier de l'app DOIT s'appeler index.html
# (le serveur statique sert index.html à la racine du domaine)
cp /chemin/vers/chordlab_v2.html index.html
# Documentation
cp /chemin/vers/README.md .
mkdir docs
cp /chemin/vers/TUTORIEL_UTILISATION.md docs/
cp /chemin/vers/TUTORIEL_DEPLOIEMENT_COOLIFY.md docs/
git add .
git commit -m "chordlab v2 — initial"
git remote add origin https://git.ghostinthemachine.fr/matthieu/chordlab.git
git push -u origin main
Adapte l'URL du remote à ton instance Gitea réelle et à ton utilisateur.
2. Créer la ressource dans Coolify
2.1 Nouvelle ressource
- Coolify → ton projet → + New → Resource.
- Choisir Public Repository (dépôt public) et coller l'URL HTTPS du dépôt Gitea :
https://git.ghostinthemachine.fr/matthieu/chordlab.git - Branche :
main. - Build Pack : Static — c'est le point clé. Pas de Dockerfile, pas de Nixpacks : Coolify sert simplement les fichiers via un conteneur nginx.
- Publish Directory :
/(l'index.htmlest à la racine du dépôt).
2.2 ⚠️ Le piège du dépôt privé (leçon du site des vacances)
Si le dépôt Gitea est privé et que la ressource est de type « Public Repository », le déploiement échoue avec :
exit code: 128
fatal: could not read Username for 'https://git.ghostinthemachine.fr'
Coolify clone sans credentials, Gitea refuse. Deux solutions, exactement comme la dernière fois :
| Option | Quand | Comment |
|---|---|---|
| A. Rendre le dépôt public | contenu non sensible (notre cas) | Gitea → dépôt → Paramètres → cocher « Visibilité : public ». Redéployer. C'est la solution retenue pour le site des vacances. |
| B. Deploy Key SSH | si tu tiens au dépôt privé | Coolify → ressource → Source → générer une clé de déploiement → l'ajouter dans Gitea (dépôt → Paramètres → Clés de déploiement) → utiliser l'URL SSH du dépôt (git@git.ghostinthemachine.fr:matthieu/chordlab.git) |
2.3 Domaine
Dans la ressource → Domains :
https://chordlab.ghostinthemachine.fr
- Le wildcard DNS Cloudflare couvre déjà
chordlab.ghostinthemachine.fr→ aucune entrée DNS à créer. - Bien saisir le domaine avec
https://: c'est ce qui pilote la génération des labels Traefik pour la redirection et le TLS.
2.4 Déployer
Bouton Deploy. Le log doit montrer : clone du dépôt → build statique → conteneur démarré. Première mise en ligne : généralement moins d'une minute.
3. Vérifications post-déploiement
https://chordlab.ghostinthemachine.frrépond avec l'interface (face avant beige, LCD).- Cadenas SSL valide (certificat wildcard).
- Test Web MIDI : interface USB-MIDI branchée → recharger la page → le navigateur demande l'autorisation MIDI → le périphérique apparaît dans le panneau MIDI out (live) et le LCD affiche
MIDI ON. Si l'autorisation n'est jamais demandée, vérifier que l'URL est bien enhttps://(c'était le même principe que le micro pour LibreChat : pas de périphérique sans contexte sécurisé). - Test export : deux accords → ADD →
↓ exporter .mid→ le fichier se télécharge.
4. Mise à jour de l'application
Même mécanique que pour le site des vacances : le dépôt Git est la source de vérité, Coolify redéploie depuis le dernier commit.
4.1 Mise à jour manuelle (workflow de base)
cd chordlab
# remplacer index.html par la nouvelle version de l'app
cp /chemin/vers/chordlab_v2.html index.html
git add index.html
git commit -m "v2.1 — <description du changement>"
git push
Puis dans Coolify → ressource chordlab → Redeploy. Le conteneur est reconstruit avec les nouveaux fichiers ; interruption de service quasi nulle.
4.2 Déploiement automatique au push (optionnel)
Pour supprimer l'étape manuelle :
- Coolify → ressource → Webhooks → copier l'URL du webhook de déploiement.
- Gitea → dépôt
chordlab→ Paramètres → Webhooks → Ajouter un webhook → Gitea. - URL cible : l'URL Coolify copiée · Événement : Push · branche
main. - Tester avec « Test Delivery », puis faire un commit de contrôle : chaque
git pushdéclenche désormais le redéploiement.
4.3 Revenir en arrière
Deux options :
- Git :
git revert <commit>puis push (propre, historisé — à préférer) ; - Coolify : la liste des déploiements permet de relancer une image précédente. [INCERTAIN] La disponibilité du rollback en un clic dépend de la version de Coolify ; le revert Git fonctionne dans tous les cas.
5. Dépannage
| Symptôme | Cause probable | Correction |
|---|---|---|
exit code: 128 — could not read Username |
dépôt privé cloné sans credentials | §2.2 : dépôt public ou Deploy Key SSH |
| 404 Traefik sur le domaine | domaine mal saisi dans la ressource, ou routeur pas régénéré | vérifier Domains (avec https://), redéployer ; en dernier recours contrôler les labels du conteneur (docker inspect) |
| La page charge mais pas de demande d'autorisation MIDI | contexte non sécurisé ou navigateur Safari | vérifier https://, utiliser Chrome/Edge/Firefox |
| Ancienne version affichée après redéploiement | cache navigateur (fichier HTML unique) | rechargement forcé (Ctrl+Shift+R) ; si récurrent, ajouter un query string versionné dans les liens partagés (?v=2.1) |
| Le conteneur tourne mais rien ne répond | l'app n'est pas nommée index.html à la racine, ou Publish Directory incorrect |
renommer le fichier / corriger le Publish Directory, redéployer |
| Périphérique MIDI absent de la liste | interface branchée après le chargement | recharger la page (l'app écoute les changements, mais certains OS n'exposent le port qu'à la connexion) |
6. Récapitulatif du modèle
[poste local] [serveur ghostinthemachine.fr]
index.html ──git push──▶ Gitea ──clone──▶ Coolify (Static build pack)
│
▼
conteneur nginx statique
│
Traefik + wildcard SSL
│
▼
https://chordlab.ghostinthemachine.fr
Un fichier, un push, un redeploy. Le même modèle resservira pour toute page ou micro-app statique à venir.