From b62a19513d061c4e8a99723ac6ad827501be3543 Mon Sep 17 00:00:00 2001 From: tristan Date: Tue, 31 Mar 2026 09:33:05 +0200 Subject: [PATCH] docs : improve Docker deployment documentation --- doc/deployment-docker.md | 161 +++++++++++++++++++++++++++++++++------ 1 file changed, 137 insertions(+), 24 deletions(-) diff --git a/doc/deployment-docker.md b/doc/deployment-docker.md index 25a6c8d..4819e6f 100644 --- a/doc/deployment-docker.md +++ b/doc/deployment-docker.md @@ -25,28 +25,103 @@ Se deconnecter/reconnecter pour que le groupe `docker` prenne effet. ```bash sudo mkdir -p /var/www/sirh sudo chown -R $(whoami):$(whoami) /var/www/sirh +cd /var/www/sirh ``` -### 2. Copier les fichiers depuis le repo +### 2. Creer les fichiers de deploiement + +Creer `docker-compose.yml` : + +```yaml +services: + app: + image: gitea.malio.fr/malio-dev/sirh:${SIRH_IMAGE_TAG:-latest} + container_name: sirh-app + env_file: .env + ports: + - "8080:80" + volumes: + - ./config/jwt:/var/www/html/config/jwt:ro + - ./uploads:/var/www/html/var/uploads + extra_hosts: + - "host.docker.internal:host-gateway" + restart: unless-stopped +``` + +Creer `deploy.sh` : ```bash -cp deploy/docker/docker-compose.prod.yml /var/www/sirh/docker-compose.yml -cp deploy/docker/deploy.sh /var/www/sirh/deploy.sh -cp deploy/docker/.env.example /var/www/sirh/.env -chmod +x /var/www/sirh/deploy.sh +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "$0")" + +TAG="${1:-latest}" +export SIRH_IMAGE_TAG="$TAG" + +echo "==> Deploying sirh:${TAG}..." + +echo "==> Pulling image..." +docker compose pull + +echo "==> Starting container..." +docker compose up -d + +echo "==> Waiting for container to be ready..." +sleep 3 + +echo "==> Running migrations..." +docker compose exec -T app php bin/console doctrine:migrations:migrate --no-interaction + +echo "==> Clearing cache..." +docker compose exec -T app php bin/console cache:clear --env=prod +docker compose exec -T app php bin/console cache:warmup --env=prod + +VERSION=$(docker compose exec -T app cat config/version.yaml | grep 'app.version' | awk -F"'" '{print $2}') +echo "==> Deployed v${VERSION}" +``` + +Rendre executable : + +```bash +chmod +x deploy.sh ``` ### 3. Configurer l'environnement -Editer `/var/www/sirh/.env` avec les vraies valeurs : -- `APP_SECRET` : generer avec `openssl rand -hex 32` -- `DATABASE_URL` : `postgresql://user:pass@host.docker.internal:5432/sirh?serverVersion=16&charset=utf8` -- `JWT_PASSPHRASE` : generer avec `openssl rand -hex 32` +Creer `.env` avec les variables suivantes : + +```env +# Symfony +APP_ENV=prod +APP_DEBUG=0 +APP_SECRET= + +# Database (host.docker.internal = la machine hote, ou le PG tourne en bare metal) +DATABASE_URL="postgresql://sirh_user:password@host.docker.internal:5432/sirh?serverVersion=16&charset=utf8" + +# JWT +JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem +JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem +JWT_PASSPHRASE= +JWT_COOKIE_SECURE=1 +JWT_COOKIE_SAMESITE=lax +JWT_TOKEN_TTL=86400 +JWT_COOKIE_TTL=86400 + +# CORS +CORS_ALLOW_ORIGIN='^https?://sirh\.malio-dev\.fr$' + +# App +DEFAULT_URI=https://sirh.malio-dev.fr +APP_SHARE_DIR=var/share +RTT_START_DATE=2026-02-23 +HOLIDAY_URL="https://calendrier.api.gouv.fr/jours-feries/" +``` ### 4. Generer les cles JWT ```bash -cd /var/www/sirh mkdir -p config/jwt docker run --rm -v $(pwd)/config/jwt:/jwt php:8.4-cli bash -c \ "apt-get update -qq && apt-get install -y -qq openssl > /dev/null && \ @@ -57,21 +132,45 @@ docker run --rm -v $(pwd)/config/jwt:/jwt php:8.4-cli bash -c \ ### 5. Creer le dossier uploads ```bash -mkdir -p /var/www/sirh/uploads +mkdir -p uploads ``` -### 6. Configurer le login au registry Gitea +### 6. Se connecter au registry Docker de Gitea + +Pour que la machine puisse telecharger les images Docker depuis Gitea, il faut se connecter au registry une fois : ```bash docker login gitea.malio.fr -# Username: ton user Gitea -# Password: ton token Gitea ``` +Docker va demander : +- **Username** : le nom d'utilisateur du compte organisation Gitea (ex: `MALIO-DEV`) +- **Password** : un token d'acces genere dans Gitea (Parametres → Applications → Generer un jeton) avec les scopes `package:read` + +Le login est sauvegarde dans `~/.docker/config.json`, pas besoin de le refaire a chaque deploiement. + ### 7. Configurer Nginx systeme +Creer `/etc/nginx/sites-available/sirh.conf` : + +```nginx +server { + listen 80; + server_name sirh.malio-dev.fr; + + location / { + proxy_pass http://127.0.0.1:8080; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +Activer le site : + ```bash -sudo cp deploy/nginx/sirh-docker.conf /etc/nginx/sites-available/sirh.conf sudo ln -sf /etc/nginx/sites-available/sirh.conf /etc/nginx/sites-enabled/sirh.conf sudo nginx -t && sudo systemctl reload nginx ``` @@ -79,10 +178,22 @@ sudo nginx -t && sudo systemctl reload nginx ### 8. Deployer ```bash -cd /var/www/sirh ./deploy.sh ``` +## Structure finale du dossier + +``` +/var/www/sirh/ +├── docker-compose.yml +├── deploy.sh +├── .env +├── config/jwt/ +│ ├── private.pem +│ └── public.pem +└── uploads/ +``` + ## Deployer une release ```bash @@ -112,8 +223,8 @@ docker compose exec -T app php bin/console doctrine:migrations:migrate prev --no ```bash cd /var/www/sirh -docker compose logs -f # tous les logs -docker compose logs -f --tail=100 # 100 dernieres lignes +docker compose logs -f # tous les logs +docker compose logs -f --tail=100 # 100 dernieres lignes ``` ## Migration depuis l'ancien deploiement (tar.gz) @@ -122,14 +233,16 @@ Si l'application tourne deja en bare metal : 1. Installer Docker (voir pre-requis) 2. Creer le dossier `/var/www/sirh-docker/` (ne pas ecraser l'ancien) -3. Copier les fichiers : +3. Copier les fichiers existants : ```bash cp /var/www/sirh/.env /var/www/sirh-docker/.env cp -a /var/www/sirh/config/jwt /var/www/sirh-docker/config/jwt cp -a /var/www/sirh/var/uploads /var/www/sirh-docker/uploads ``` -4. Editer `/var/www/sirh-docker/.env` : changer `DATABASE_URL` pour utiliser `host.docker.internal` au lieu de `127.0.0.1` -5. Mettre a jour Nginx systeme : remplacer la conf par `deploy/nginx/sirh-docker.conf` -6. Arreter l'ancien PHP-FPM : `sudo systemctl stop php8.4-fpm` -7. Deployer : `cd /var/www/sirh-docker && ./deploy.sh` -8. Verifier que tout marche, puis supprimer l'ancien dossier +4. Creer `docker-compose.yml` et `deploy.sh` dans `/var/www/sirh-docker/` (voir etape 2 ci-dessus) +5. Editer `/var/www/sirh-docker/.env` : changer `DATABASE_URL` pour utiliser `host.docker.internal` au lieu de `127.0.0.1` +6. Se connecter au registry Gitea (voir etape 6 ci-dessus) +7. Mettre a jour Nginx systeme avec la conf reverse proxy (voir etape 7 ci-dessus) +8. Arreter l'ancien PHP-FPM : `sudo systemctl stop php8.4-fpm` +9. Deployer : `cd /var/www/sirh-docker && ./deploy.sh` +10. Verifier que tout marche, puis renommer le dossier : `mv /var/www/sirh-docker /var/www/sirh`