Date : 15/01/2026 Status : IMPLEMENTEE Priorite : HAUTE Effort : 2-3h
Deployer automatiquement les projets Docker lors d'un push sur GitLab :
develop → deploy sur DEV (dev-portainer, 192.168.1.51)main → deploy sur PROD (prod-portainer, 192.168.1.12)┌─────────────────────────────────────────────────────────────────────────────┐
│ WORKFLOW CI/CD │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ DEVELOPPEUR GITLAB PORTAINER │
│ ─────────── ────── ───────── │
│ │
│ git push develop ─────────► Webhook ─────────────────► dev-portainer │
│ │ └── docker build │
│ │ └── docker up │
│ │ │
│ git push main ────────────► Webhook ─────────────────► prod-portainer │
│ │ └── docker build │
│ │ └── docker up │
│ │ │
│ ▼ │
│ conf.{env}.gouroubleu.yml │
│ └── port, domain, env vars │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Script PHP ou bash qui recoit les webhooks GitLab et declenche le build :
# /opt/deploy-webhook/deploy.sh
#!/bin/bash
PROJECT=$1
BRANCH=$2
ENV=$3 # dev ou prod
# Cloner/pull le projet
cd /home/gouroubleu/apps/$PROJECT
git fetch origin $BRANCH
git checkout $BRANCH
git pull origin $BRANCH
# Lire la config
CONFIG="conf.${ENV}.gouroubleu.yml"
if [ -f "$CONFIG" ]; then
# Build et deploy
docker compose -f docker-compose.yml build
docker compose -f docker-compose.yml up -d
# Notifier
curl -X POST "http://192.168.1.12:5300/api/notify/push" \
-H "Content-Type: application/json" \
-d "{\"title\":\"Deploy $PROJECT\",\"body\":\"$BRANCH deploye sur $ENV\"}"
fi
# conf.dev.gouroubleu.yml
version: '1.0'
project:
name: needfinder
description: Detecteur de besoins web
services:
collector:
port: 5200
shortcut: bun # Template Dockerfile (bun, node, rust, etc.)
dockerfile: Dockerfile # Ou custom
env:
- NEEDFINDER_DB_URL=@NEEDFINDER_DB_URL # @ = depuis secrets
- NEEDFINDER_PORT=5200
- TZ=Europe/Paris
domains:
- needfinder-api-dev.33800.nowhere84.com
deploy:
auto: true # Active le deploy auto
branch: develop # Branche qui declenche
target: dev-portainer # Machine cible
Pour chaque projet GitLab :
https://deploy-dev.33800.nowhere84.com/webhook (ou deploy-prod)# /etc/nginx/sites-available/deploy-webhook.conf
server {
listen 443 ssl;
server_name deploy-dev.33800.nowhere84.com;
ssl_certificate /etc/letsencrypt/live/33800.nowhere84.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/33800.nowhere84.com/privkey.pem;
location /webhook {
proxy_pass http://192.168.1.51:5500;
proxy_set_header X-GitLab-Token $http_x_gitlab_token;
}
}
deploy-webhook.sh sur dev-portainer et prod-portainerEn attente de validation avant implementation