Compare commits

..

10 Commits

Author SHA1 Message Date
gitea-actions
b07146e78d chore: bump version to v0.1.72
All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
Build & Push Docker Image / build (push) Successful in 19s
2026-03-31 10:13:39 +00:00
b1bf363fa1 Merge remote-tracking branch 'origin/develop' into develop
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
2026-03-31 12:13:31 +02:00
c13cab6b59 fix(deploy) : run console commands as www-data to prevent permission issues 2026-03-31 12:11:58 +02:00
gitea-actions
3752785ed1 chore: bump version to v0.1.71
All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
Build & Push Docker Image / build (push) Successful in 17s
2026-03-31 09:50:51 +00:00
ab44b5439d fix(deploy) : add minimal .env file in Docker image for Symfony boot
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
2026-03-31 10:38:59 +02:00
699d09e2f4 docs : add nginx install to deployment prerequisites 2026-03-31 10:35:32 +02:00
b62a19513d docs : improve Docker deployment documentation 2026-03-31 09:33:05 +02:00
gitea-actions
3d69346d24 chore: bump version to v0.1.70
All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
Build & Push Docker Image / build (push) Successful in 18s
2026-03-31 07:11:36 +00:00
ea849a4fdd Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
Auto Tag Develop / tag (push) Successful in 7s
2026-03-31 09:11:28 +02:00
7b3dcc3c54 fix : déploiement docker 2026-03-31 09:11:00 +02:00
6 changed files with 162 additions and 30 deletions

View File

@@ -24,7 +24,9 @@
"Bash(npx xlsx-cli:*)",
"Bash(cat /home/m-tristan/.claude/projects/-home-m-tristan-workspace-SIRH/4b53d9d7-d8ae-451f-a5cc-5d4fd55f2eef/tool-results/toolu_019hng9Cu2m9wiNACuC2Wm3F.json | python3 -c \"import json,sys; data=json.load\\(sys.stdin\\); print\\(data[0]['text']\\)\" 2>/dev/null | head -2000)",
"Bash(pip3 install:*)",
"Bash(find:*)"
"Bash(find:*)",
"Bash(git add:*)",
"Bash(git commit:*)"
]
}
}

View File

@@ -1,4 +1,5 @@
# SIRH
Application de gestion des absences employée
## Importer un dump de prod en dev

View File

@@ -1,2 +1,2 @@
parameters:
app.version: '0.1.69'
app.version: '0.1.72'

View File

@@ -67,6 +67,9 @@ COPY --from=backend-build /app /var/www/html
# Frontend from stage 2
COPY --from=frontend-build /app/frontend/.output/public /var/www/html/frontend/.output/public
# Symfony needs a .env file to boot (variables are overridden by env_file in docker-compose)
RUN echo "APP_ENV=prod" > /var/www/html/.env
# Permissions
RUN mkdir -p /var/www/html/var \
&& chown -R www-data:www-data /var/www/html/var

View File

@@ -18,11 +18,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}"

View File

@@ -2,7 +2,7 @@
## Pre-requis
Installer Docker et Docker Compose sur la machine :
### Docker
```bash
# Ubuntu
@@ -18,6 +18,19 @@ sudo usermod -aG docker $USER
Se deconnecter/reconnecter pour que le groupe `docker` prenne effet.
### Nginx
```bash
sudo apt install -y nginx
```
Verifier que Nginx tourne :
```bash
sudo systemctl enable nginx
sudo systemctl start nginx
```
## Premier deploiement
### 1. Creer le dossier de deploiement
@@ -25,28 +38,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=<generer avec: openssl rand -hex 32>
# 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=<generer avec: openssl rand -hex 32>
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 +145,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 `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
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 +191,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 +236,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 +246,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`