Derniere etape. On prend un projet reel, on le deploie sur notre serveur, et chaque push met a jour l'app automatiquement.
La serie complete
- Partie 1 : Installation Ubuntu Server + IP fixe + pare-feu
- Partie 2 : SSH securise (cles + passphrase) + Cloudflare Tunnel
- Partie 3 : Docker + Coolify
- Partie 4 (cet article) : Deployer une vraie app
Ce qu'on va faire
On va deployer une application web complete avec :
- Code source sur GitHub
- Dockerfile pour la conteneurisation
- Base de donnees PostgreSQL
- Domaine personnalise avec HTTPS
- Deploiement automatique a chaque
git push
Je prends l'exemple d'une app Django (c'est ce que j'utilise pour mon portfolio), mais le process est le meme pour React, Node.js, Spring Boot, Flask, ou n'importe quoi.
Phase 1 — Preparer le Dockerfile
Ton projet doit avoir un Dockerfile a la racine. Voici un exemple pour Django :
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python manage.py collectstatic --noinput
EXPOSE 8000
CMD ["gunicorn", "monprojet.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]
Points importants :
- python:3.12-slim : image legere, rapide a builder
- collectstatic : genere les fichiers statiques au build
- gunicorn : serveur de production (pas
manage.py runserver!) - EXPOSE 8000 : le port que Coolify va utiliser
Pour une app Node.js/React
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "server.js"]
Regle d'or : si ca tourne avec docker build . && docker run -p 8000:8000 monapp sur ton PC, ca marchera sur Coolify.
Phase 2 — Creer l'application dans Coolify
- Ouvrir Coolify (http://192.168.1.80:8000 ou via ton domaine)
- Cliquer sur + New Resource > Application
- Choisir GitHub comme source
- Selectionner le repository et la branche (
main) - Build Pack : Dockerfile
- Cliquer sur Deploy
Coolify va : cloner le repo, builder l'image Docker, lancer le conteneur, et le rendre accessible.
Phase 3 — Configurer les variables d'environnement
- Dans Coolify, aller dans les Settings de l'app
- Section Environment Variables
- Ajouter tes variables
DATABASE_URL=postgresql://user:pass@db-uuid:5432/mydb
SECRET_KEY=une-cle-tres-longue-et-aleatoire
DEBUG=False
ALLOWED_HOSTS=monapp.mondomaine.com
Pour la DATABASE_URL : si tu as cree une base de donnees dans Coolify (Partie 3), elle te donne l'URL de connexion interne. Les conteneurs communiquent entre eux via le reseau Docker interne.
Phase 4 — Attacher un domaine
- Dans les settings de l'app : Domains
- Ajouter
monapp.mondomaine.com - Dans Cloudflare Tunnel, ajouter l'entree
- Relancer cloudflared :
sudo systemctl restart cloudflared - Attendre 1-2 minutes pour la propagation DNS
- hostname: monapp.mondomaine.com
service: http://localhost:80
Ouvre https://monapp.mondomaine.com — ton app est en ligne avec HTTPS.
Phase 5 — Deploiement automatique (CI/CD)
C'est la ou la magie opere. Chaque fois que tu push sur main :
- GitHub envoie un webhook a Coolify
- Coolify pull le code, rebuild l'image Docker
- Le nouveau conteneur remplace l'ancien (zero downtime)
- Ton app est mise a jour en quelques minutes
Configurer le webhook
Normalement, si tu as connecte GitHub via l'app dans la Partie 3, le webhook est automatique. Sinon :
- Dans les settings de l'app Coolify, copier l'URL du webhook
- Sur GitHub : Settings > Webhooks > Add webhook
- Coller l'URL, choisir application/json, event push
Tester le deploiement automatique
Fais une modification dans ton code, puis :
git add .
git commit -m "test auto-deploy"
git push
Va dans Coolify > Deployments : tu verras le build en cours. En 2-3 minutes, ta modification est en ligne.
Phase 6 — Monitoring et logs
Dans Coolify > ton app > Logs, tu vois les logs du conteneur en temps reel. Le dashboard montre aussi :
- Le statut de l'app (running/stopped)
- Le dernier deploiement et son resultat
- L'utilisation memoire et CPU
- L'historique de tous les deployments
Phase 7 — Deployer plusieurs projets
La beaute du setup, c'est que tu peux repeter les etapes 2 a 5 pour chaque nouveau projet. Sur mon serveur j'ai actuellement :
- Mon portfolio (Django) — www.gilesjr.com
- Une app e-commerce (Django) — chicandcheap.gilesjr.com
- Une API Spring Boot — en interne
- Des bases de donnees PostgreSQL et Redis
Tout ca sur un seul vieux PC HP. Chaque projet a son propre domaine, ses propres variables, et se deploie independamment.
Recapitulatif de la serie
En 4 articles, on est passe de un vieux PC qui traine a un serveur complet avec deploiement automatique.
- Un serveur Ubuntu Server stable avec IP fixe
- SSH securise (cles + passphrase + fail2ban + pare-feu)
- Acces mondial via Cloudflare Tunnel (HTTPS gratuit)
- Docker pour isoler chaque projet
- Coolify pour gerer tout via une interface web
- Deploiement automatique a chaque git push
- Plusieurs apps et domaines sur le meme serveur
Cout total
- Vieux PC : 0 (tu l'avais deja)
- Ubuntu Server : Gratuit
- Docker : Gratuit
- Coolify : Gratuit (open-source)
- Cloudflare Tunnel : Gratuit
- Nom de domaine : ~10 USD/an
- Electricite : variable (mais le PC consomme peu)
- Total : ~10 USD/an
Compare ca a un VPS (5-20 USD/mois) ou a un PaaS cloud (qui monte vite avec plusieurs apps)...
Pour aller plus loin
- Sauvegardes : configurer des backups automatiques de tes bases de donnees
- Monitoring : ajouter Uptime Kuma pour surveiller que tes apps sont en ligne
- Notifications : configurer Coolify pour t'envoyer un message si un deploy echoue
- Plusieurs serveurs : Coolify peut gerer des serveurs distants aussi
Conclusion
Ce setup, c'est celui que j'utilise au quotidien. Mon portfolio, mes projets clients, mes experimentations — tout tourne sur ce vieux PC. C'est fiable, c'est gratuit, et j'ai le controle total.
Le self-hosting n'est pas plus complique que le cloud. C'est juste different. Et une fois que c'est en place, tu ne reviens plus en arriere.
Toute la serie est terminee ! Si tu as des questions, des retours, ou si tu veux que j'ecrive sur un sujet en particulier, dis-le moi en commentaire.