TP2 : Déploiement d'un Portfolio Next.js avec Coolify et Forgejo
Coolify : alternative open source et auto-hébergeable à Heroku, Netlify et Vercel. Forgejo : forge Git auto-hébergée (alternative à GitHub). Ce TP s’exécute entièrement en local, dans une machine virtuelle : ni domaine DNS, ni compte GitHub.
Fichiers de départ :
forgejo.zip
1. Objectifs pédagogiques
À l’issue du TP, vous serez capable de :
- installer Coolify et Forgejo dans une VM locale ;
- déployer une application Next.js depuis un dépôt Forgejo, accessible par un nom d’hôte local ;
- mettre en place un webhook Forgejo → Coolify : chaque
git pushredéploie automatiquement l’application ; - pratiquer le rollback et comparer l’approche PaaS (Coolify) avec l’approche IaC du TP1.
2. Présentation des outils
Coolify est un PaaS auto-hébergé : il gère pour vous le build, le déploiement, le proxy inverse et les bases de données via une interface web. Forgejo héberge vos dépôts Git et appelle Coolify par webhook à chaque push, comme le ferait GitHub.
| Outil | Rôle dans le TP |
|---|---|
| Forgejo | Dépôt Git du portfolio ; émet le webhook sur chaque push |
| Coolify | Clone, construit, déploie et expose l’application |
| Traefik (intégré à Coolify) | Routage HTTP par nom d’hôte |
Maquette illustrative : l’interface réelle dépend de la version installée.
3. Prérequis (environnement local)
| Élément | Détail |
|---|---|
| Hyperviseur | VirtualBox, VMware, Hyper-V, Multipass ou Proxmox sur votre poste |
| VM | Ubuntu 24.04, 2 vCPU, 4 Go de RAM recommandés (2 Go minimum), 20 Go de disque, accès sudo |
| Réseau de la VM | Une IP joignable depuis votre poste (mode pont, ou réseau privé hôte + carte NAT) et un accès Internet sortant (npm, images Docker) |
| VM dédiée | Coolify gère Docker et le proxy sur le port 80 : n’y installez rien d’autre (pas de Nginx du TP1) |
| Poste | Git installé ; le code du portfolio Next.js du TP1 en local |
| Domaine / GitHub | Aucun. Nom d’hôte local via le fichier hosts, dépôt hébergé sur Forgejo |
Ports utilisés dans la VM : 8000 (Coolify), 80 (Traefik), 3001 (Forgejo web), 2222 (Forgejo SSH). Le port 3000 reste interne à l’application Next.js.
4. Architecture cible
Réseau local et nom d’hôte
5. Partie A : Installation de Coolify
-
Notez l’IP de la VM :
ip -4 a(on suppose192.168.56.10dans l’énoncé). -
Depuis votre poste :
ssh <utilisateur>@192.168.56.10. -
Lancez l’installation officielle (en
rootou viasudo) :curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -
Vérifiez Docker et les conteneurs Coolify :
docker --versionpuisdocker ps. -
Ouvrez
http://192.168.56.10:8000, créez le compte administrateur immédiatement, puis suivez l’assistant (serveurlocalhost). -
Laissez l’URL de l’instance par défaut : vous accéderez au dashboard par
IP:8000.
- Dashboard accessible et compte admin créé
- Serveur
localhosten état Reachable - Proxy démarré (Servers → proxy)
Capture à fournir :
captures/coolify-dashboard.png
6. Partie B : Forgejo et dépôt du portfolio
B.1 Installer Forgejo
Copiez le fichier forgejo/docker-compose.yml dans la VM, puis :
docker compose up -d
docker ps # le conteneur « forgejo » doit être UpPoints à comprendre dans ce fichier :
- port web 3001 (le 3000 est réservé à Next.js) ;
FORGEJO__webhook__ALLOWED_HOST_LIST=external,private: par défaut, Forgejo refuse d’envoyer un webhook vers une adresse privée. Sans ce réglage, le webhook de la partie D échouera.
B.2 Configuration initiale
Ouvrez http://192.168.56.10:3001 et remplissez l’assistant d’installation :
| Champ | Valeur |
|---|---|
| Base de données | SQLite3 |
| Domaine du serveur | 192.168.56.10 |
| URL de base de Forgejo | http://192.168.56.10:3001/ |
| Compte administrateur | À créer (nom, mot de passe, e-mail fictif) |
B.3 Créer le dépôt et y pousser le portfolio
-
Dans Forgejo : Nouveau dépôt → nom
portfolio, visibilité publique (clone sans authentification par Coolify). -
Depuis le dossier du portfolio sur votre poste :
git remote add forgejo http://192.168.56.10:3001/<utilisateur>/portfolio.git git push -u forgejo main(identifiants Forgejo demandés ; un jeton d’accès peut remplacer le mot de passe)
- Forgejo accessible sur
:3001 - Code du portfolio visible dans le dépôt Forgejo
Captures à fournir :
captures/forgejo-repo.png
7. Partie C : Déploiement du portfolio
C.1 Déclarer un nom d’hôte local
Sur votre poste (pas dans la VM), ajoutez une ligne au fichier hosts (droits administrateur requis) :
192.168.56.10 portfolio.coolify.local| Système | Fichier |
|---|---|
| Linux / macOS | /etc/hosts |
| Windows | C:\Windows\System32\drivers\etc\hosts |
Test : ping portfolio.coolify.local doit répondre depuis l’IP de la VM.
Alternatives si vous ne pouvez pas modifier
hosts: un nom du typeportfolio.192.168.56.10.sslip.io(résolu par un DNS public, Internet requis sur le poste), ou Ports Mappings3000:3000puishttp://192.168.56.10:3000.
C.2 Configurer et déployer
| Étape | Dans Coolify | Paramètres |
|---|---|---|
| 1 | Projects → Add | Nom : portfolio ; environnement production |
| 2 | + New Resource | Source : Public Repository |
| 3 | Repository URL | http://192.168.56.10:3001/<utilisateur>/portfolio.git (l’IP, pas un nom d’hôte : Coolify ne connaît pas votre fichier hosts) |
| 4 | Configuration | Branche main, Build Pack : Nixpacks (ou Dockerfile) |
| 5 | Ports Exposes | 3000 |
| 6 | Domains | http://portfolio.coolify.local (préfixe http:// obligatoire, sinon Coolify tente d’obtenir un certificat) |
| 7 | Deploy | Suivre les logs de déploiement en direct |
Vérifications
- Déploiement terminé avec succès
- Portfolio accessible sur
http://portfolio.coolify.local curl -I http://portfolio.coolify.localrenvoie200- Le conteneur est visible dans la VM :
docker ps
Captures à fournir :
captures/coolify-config.png,captures/coolify-deploy.png,captures/portfolio.png
8. Partie D : Redéploiement automatique (webhook Forgejo → Coolify)
D.1 Côté Coolify
- Ouvrez l’application, onglet Webhooks → Manual Git Webhooks.
- Dans la section Gitea (Forgejo est compatible), saisissez un secret d’au moins 16 caractères, enregistrez, puis copiez l’URL du webhook.
- Dans Advanced → Deployment → Auto deploy, choisissez « Deploy on push (webhooks) ».
D.2 Côté Forgejo
- Dépôt
portfolio→ Paramètres → Webhooks → Ajouter un webhook → Forgejo (ou Gitea). - URL cible : l’URL copiée ; type de contenu :
application/json; secret : le même que dans Coolify. - Événement : Push ; filtre de branche :
main. - Enregistrez, puis cliquez sur Tester la livraison : la réponse doit être un code
2xx.
D.3 Vérification
-
Modifiez une page du portfolio (par exemple le titre), puis :
git add . && git commit -m "Mise à jour du titre" && git push forgejo main -
Sans rien faire dans Coolify, observez le nouveau déploiement dans l’onglet Deployments ; rechargez le site.
-
Dans Forgejo, consultez l’historique de livraison du webhook (Paramètres → Webhooks → livraisons récentes).
Plan B : si le webhook ne fonctionne pas, vous pouvez déclencher le déploiement par l’API de Coolify (activer l’API dans les réglages, créer un jeton, puis appeler le point d’accès de déploiement avec le jeton).
- « Tester la livraison » réussie
- Un
git pushdéclenche un déploiement sans intervention manuelle - Le site affiche la modification
Captures à fournir :
captures/forgejo-webhook.png,captures/coolify-autodeploy.png
D.4 Rollback et supervision
- Rollback : poussez volontairement une erreur de build, observez l’échec du déploiement automatique, puis revenez à la version précédente (onglet des déploiements / rollback, selon la version). Corrigez ensuite le dépôt.
- Supervision : consultez les logs de l’application,
docker statset l’utilisation des ressources dans le dashboard.
Captures à fournir :
captures/coolify-rollback.png
9. Livrables
- Captures d’écran dans
captures/(voir les parties A à D) RAPPORT.md: tableau comparatif (partie E) et difficultés rencontrées
10. Pistes bonus
- Dépôt privé : clé de déploiement SSH (Forgejo sur le port
2222) au lieu d’un dépôt public - Déploiements de prévisualisation via les événements de pull request du webhook
- Notifications (email, Discord, Telegram) à chaque déploiement