From 967e3311e525602d8c3e685ebebbfcce065a5aab Mon Sep 17 00:00:00 2001 From: tristan Date: Tue, 31 Mar 2026 16:43:54 +0200 Subject: [PATCH] docs : update doc deployment-docker.md --- .idea/db-forest-config.xml | 10 +++ doc/deployment-docker.md | 136 ++++++++++++++++++++++++++----------- 2 files changed, 108 insertions(+), 38 deletions(-) diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml index c621ddf..760aca9 100644 --- a/.idea/db-forest-config.xml +++ b/.idea/db-forest-config.xml @@ -1,5 +1,15 @@ + + . + ---------------------------------------- + 1:0:9cad43df-2147-4989-b7a4-443067034884 + 2:0:ae622167-c834-4e7b-87a5-c1721036f5dc + 3:0:f407a514-c6b4-4b26-9555-445a85892502 + 4:0:09e221b8-067a-488b-9c1d-4e155a333079 + 5:0:9d8c1ad3-2491-4642-964a-666003c14128 + . + diff --git a/doc/deployment-docker.md b/doc/deployment-docker.md index 45a80c9..61e8693 100644 --- a/doc/deployment-docker.md +++ b/doc/deployment-docker.md @@ -22,18 +22,42 @@ Se deconnecter/reconnecter pour que le groupe `docker` prenne effet. ```bash sudo apt install -y nginx -``` - -Verifier que Nginx tourne : - -```bash sudo systemctl enable nginx sudo systemctl start nginx ``` -## Premier deploiement +### PostgreSQL -### 1. Creer le dossier de deploiement +PostgreSQL tourne dans un conteneur Docker separe (voir le repo `infra-postgres`). +Il doit etre installe et accessible avant de deployer SIRH. + +Creer la base de donnees pour SIRH : + +```bash +cd /var/www/postgres +docker compose exec postgres psql -U admin +``` + +```sql +-- Si le user n'existe pas encore +CREATE USER malio WITH PASSWORD 'motdepasse'; + +-- Creer la base +CREATE DATABASE sirh_prod OWNER malio; +\q +``` + +--- + +## Premiere installation (nouvelle machine) + +Guide complet pour mettre en ligne SIRH sur une machine vierge. Inclut les pre-requis, la BDD et l'app. + +### 1. Installer les pre-requis + +Installer Docker, Nginx et PostgreSQL (voir section Pre-requis ci-dessus). + +### 2. Creer le dossier de deploiement ```bash sudo mkdir -p /var/www/sirh @@ -41,7 +65,18 @@ sudo chown -R $(whoami):$(whoami) /var/www/sirh cd /var/www/sirh ``` -### 2. Creer les fichiers de deploiement +### 3. Se connecter au registry Docker de Gitea + +```bash +docker login gitea.malio.fr +``` + +- **Username** : le nom d'utilisateur du compte organisation Gitea `MALIO-DEV` +- **Password** : le token REGISTRY_TOKEN dispo dans le bitwarden + +Le login est sauvegarde dans `~/.docker/config.json`, pas besoin de le refaire a chaque deploiement. + +### 4. Creer les fichiers de deploiement Creer `docker-compose.yml` : @@ -84,11 +119,11 @@ 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 +docker compose exec -T -u www-data 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 +docker compose exec -T -u www-data app php bin/console cache:clear --env=prod +docker compose exec -T -u www-data 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}" @@ -100,7 +135,7 @@ Rendre executable : chmod +x deploy.sh ``` -### 3. Configurer l'environnement +### 5. Configurer l'environnement Creer `.env` avec les variables suivantes : @@ -110,8 +145,8 @@ 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" +# Database (host.docker.internal = la machine hote, ou le PG tourne en Docker) +DATABASE_URL="postgresql://malio:password@host.docker.internal:5432/sirh_prod?serverVersion=16&charset=utf8" # JWT JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem @@ -132,7 +167,7 @@ RTT_START_DATE=2026-02-23 HOLIDAY_URL="https://calendrier.api.gouv.fr/jours-feries/" ``` -### 4. Generer les cles JWT +### 6. Generer les cles JWT ```bash mkdir -p config/jwt @@ -147,27 +182,13 @@ sudo chown 33:33 config/jwt/private.pem config/jwt/public.pem sudo chmod 644 config/jwt/private.pem config/jwt/public.pem ``` -### 5. Creer le dossier uploads +### 7. Creer le dossier uploads ```bash mkdir -p uploads ``` -### 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 -``` - -Docker va demander : -- **Username** : le nom d'utilisateur du compte organisation Gitea `MALIO-DEV` -- **Password** : le token REGISTRY_TOKEN dispo dans le bitwarden - -Le login est sauvegarde dans `~/.docker/config.json`, pas besoin de le refaire a chaque deploiement. - -### 7. Configurer Nginx systeme +### 8. Configurer Nginx systeme Creer `/etc/nginx/sites-available/sirh.conf` : @@ -193,13 +214,34 @@ sudo ln -sf /etc/nginx/sites-available/sirh.conf /etc/nginx/sites-enabled/sirh.c sudo nginx -t && sudo systemctl reload nginx ``` -### 8. Deployer +### 9. Deployer ```bash ./deploy.sh ``` -## Structure finale du dossier +### 10. Importer les donnees (optionnel) + +Si tu as un dump SQL a importer : + +```bash +# Depuis ton PC, envoyer le dump vers le serveur +scp sirh.sql user@serveur:/tmp/sirh.sql + +# Sur le serveur, vider la base puis importer +cd /var/www/postgres +docker compose exec -T postgres psql -U malio sirh_prod -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;" +docker compose exec -T postgres psql -U malio sirh_prod < /tmp/sirh.sql + +# Creer les tables manquantes (si le dump a des erreurs de syntaxe) +cd /var/www/sirh +docker compose exec -u www-data app php bin/console doctrine:schema:update --force --env=prod + +# Nettoyer +rm /tmp/sirh.sql +``` + +### Structure finale du dossier ``` /var/www/sirh/ @@ -212,7 +254,11 @@ sudo nginx -t && sudo systemctl reload nginx └── uploads/ ``` -## Deployer une release +--- + +## Deployer une nouvelle version + +Quand l'app est deja installee, deployer une mise a jour : ```bash cd /var/www/sirh @@ -220,6 +266,10 @@ cd /var/www/sirh ./deploy.sh v0.1.61 # deploie une version specifique ``` +C'est tout. Le script pull l'image, redemarre le conteneur, lance les migrations et vide le cache. + +--- + ## Rollback ### Image seule (pas de changement de schema BDD) @@ -232,11 +282,13 @@ cd /var/www/sirh ```bash # 1. Rollback schema (pendant que la version actuelle tourne encore) -docker compose exec -T app php bin/console doctrine:migrations:migrate prev --no-interaction +docker compose exec -T -u www-data app php bin/console doctrine:migrations:migrate prev --no-interaction # 2. Deployer l'ancienne version ./deploy.sh v0.1.60 ``` +--- + ## Voir les logs ```bash @@ -245,6 +297,14 @@ docker compose logs -f # tous les logs docker compose logs -f --tail=100 # 100 dernieres lignes ``` +Logs Symfony : + +```bash +docker compose exec app cat var/log/prod.log +``` + +--- + ## Migration depuis l'ancien deploiement (tar.gz) Si l'application tourne deja en bare metal : @@ -257,10 +317,10 @@ Si l'application tourne deja en bare metal : 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. Creer `docker-compose.yml` et `deploy.sh` dans `/var/www/sirh-docker/` (voir etape 2 ci-dessus) +4. Creer `docker-compose.yml` et `deploy.sh` dans `/var/www/sirh-docker/` (voir etape 4 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) +6. Se connecter au registry Gitea (voir etape 3 ci-dessus) +7. Mettre a jour Nginx systeme avec la conf reverse proxy (voir etape 8 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`