Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04c5279946 | ||
| b25d40f3d8 | |||
| e654516b82 | |||
|
|
b07146e78d | ||
| b1bf363fa1 | |||
| c13cab6b59 | |||
|
|
3752785ed1 | ||
| ab44b5439d | |||
| 699d09e2f4 | |||
| b62a19513d | |||
|
|
3d69346d24 | ||
| ea849a4fdd | |||
| 7b3dcc3c54 | |||
|
|
c6ab8e3624 | ||
| f3b65c0617 |
@@ -24,7 +24,9 @@
|
|||||||
"Bash(npx xlsx-cli:*)",
|
"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(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(pip3 install:*)",
|
||||||
"Bash(find:*)"
|
"Bash(find:*)",
|
||||||
|
"Bash(git add:*)",
|
||||||
|
"Bash(git commit:*)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Login to Gitea Registry
|
- name: Login to Gitea Registry
|
||||||
run: |
|
run: |
|
||||||
echo "${{ secrets.RELEASE_TOKEN }}" | docker login gitea.malio.fr -u "${{ gitea.repository_owner }}" --password-stdin
|
echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.malio.fr -u "${{ gitea.repository_owner }}" --password-stdin
|
||||||
|
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# SIRH
|
# SIRH
|
||||||
|
|
||||||
Application de gestion des absences employée
|
Application de gestion des absences employée
|
||||||
|
|
||||||
## Importer un dump de prod en dev
|
## Importer un dump de prod en dev
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
parameters:
|
parameters:
|
||||||
app.version: '0.1.68'
|
app.version: '0.1.73'
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ COPY --from=backend-build /app /var/www/html
|
|||||||
# Frontend from stage 2
|
# Frontend from stage 2
|
||||||
COPY --from=frontend-build /app/frontend/.output/public /var/www/html/frontend/.output/public
|
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
|
# Permissions
|
||||||
RUN mkdir -p /var/www/html/var \
|
RUN mkdir -p /var/www/html/var \
|
||||||
&& chown -R www-data:www-data /var/www/html/var
|
&& chown -R www-data:www-data /var/www/html/var
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ echo "==> Waiting for container to be ready..."
|
|||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
echo "==> Running migrations..."
|
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..."
|
echo "==> Clearing cache..."
|
||||||
docker compose exec -T app php bin/console cache:clear --env=prod
|
docker compose exec -T -u www-data 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:warmup --env=prod
|
||||||
|
|
||||||
VERSION=$(docker compose exec -T app cat config/version.yaml | grep 'app.version' | awk -F"'" '{print $2}')
|
VERSION=$(docker compose exec -T app cat config/version.yaml | grep 'app.version' | awk -F"'" '{print $2}')
|
||||||
echo "==> Deployed v${VERSION}"
|
echo "==> Deployed v${VERSION}"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Pre-requis
|
## Pre-requis
|
||||||
|
|
||||||
Installer Docker et Docker Compose sur la machine :
|
### Docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu
|
# Ubuntu
|
||||||
@@ -18,6 +18,19 @@ sudo usermod -aG docker $USER
|
|||||||
|
|
||||||
Se deconnecter/reconnecter pour que le groupe `docker` prenne effet.
|
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
|
## Premier deploiement
|
||||||
|
|
||||||
### 1. Creer le dossier de deploiement
|
### 1. Creer le dossier de deploiement
|
||||||
@@ -25,53 +38,157 @@ Se deconnecter/reconnecter pour que le groupe `docker` prenne effet.
|
|||||||
```bash
|
```bash
|
||||||
sudo mkdir -p /var/www/sirh
|
sudo mkdir -p /var/www/sirh
|
||||||
sudo chown -R $(whoami):$(whoami) /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
|
```bash
|
||||||
cp deploy/docker/docker-compose.prod.yml /var/www/sirh/docker-compose.yml
|
#!/usr/bin/env bash
|
||||||
cp deploy/docker/deploy.sh /var/www/sirh/deploy.sh
|
set -euo pipefail
|
||||||
cp deploy/docker/.env.example /var/www/sirh/.env
|
|
||||||
chmod +x /var/www/sirh/deploy.sh
|
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
|
### 3. Configurer l'environnement
|
||||||
|
|
||||||
Editer `/var/www/sirh/.env` avec les vraies valeurs :
|
Creer `.env` avec les variables suivantes :
|
||||||
- `APP_SECRET` : generer avec `openssl rand -hex 32`
|
|
||||||
- `DATABASE_URL` : `postgresql://user:pass@host.docker.internal:5432/sirh?serverVersion=16&charset=utf8`
|
```env
|
||||||
- `JWT_PASSPHRASE` : generer avec `openssl rand -hex 32`
|
# 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
|
### 4. Generer les cles JWT
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /var/www/sirh
|
|
||||||
mkdir -p config/jwt
|
mkdir -p config/jwt
|
||||||
docker run --rm -v $(pwd)/config/jwt:/jwt php:8.4-cli bash -c \
|
openssl genpkey -algorithm RSA -out config/jwt/private.pem -pkeyopt rsa_keygen_bits:4096
|
||||||
"apt-get update -qq && apt-get install -y -qq openssl > /dev/null && \
|
openssl rsa -pubout -in config/jwt/private.pem -out config/jwt/public.pem
|
||||||
openssl genpkey -algorithm RSA -out /jwt/private.pem -pkeyopt rsa_keygen_bits:4096 && \
|
```
|
||||||
openssl rsa -pubout -in /jwt/private.pem -out /jwt/public.pem"
|
|
||||||
|
Rendre les cles lisibles par le conteneur (www-data = uid 33) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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
|
### 5. Creer le dossier uploads
|
||||||
|
|
||||||
```bash
|
```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
|
```bash
|
||||||
docker login gitea.malio.fr
|
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
|
### 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
|
```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 ln -sf /etc/nginx/sites-available/sirh.conf /etc/nginx/sites-enabled/sirh.conf
|
||||||
sudo nginx -t && sudo systemctl reload nginx
|
sudo nginx -t && sudo systemctl reload nginx
|
||||||
```
|
```
|
||||||
@@ -79,10 +196,22 @@ sudo nginx -t && sudo systemctl reload nginx
|
|||||||
### 8. Deployer
|
### 8. Deployer
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /var/www/sirh
|
|
||||||
./deploy.sh
|
./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
|
## Deployer une release
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -112,8 +241,8 @@ docker compose exec -T app php bin/console doctrine:migrations:migrate prev --no
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /var/www/sirh
|
cd /var/www/sirh
|
||||||
docker compose logs -f # tous les logs
|
docker compose logs -f # tous les logs
|
||||||
docker compose logs -f --tail=100 # 100 dernieres lignes
|
docker compose logs -f --tail=100 # 100 dernieres lignes
|
||||||
```
|
```
|
||||||
|
|
||||||
## Migration depuis l'ancien deploiement (tar.gz)
|
## Migration depuis l'ancien deploiement (tar.gz)
|
||||||
@@ -122,14 +251,16 @@ Si l'application tourne deja en bare metal :
|
|||||||
|
|
||||||
1. Installer Docker (voir pre-requis)
|
1. Installer Docker (voir pre-requis)
|
||||||
2. Creer le dossier `/var/www/sirh-docker/` (ne pas ecraser l'ancien)
|
2. Creer le dossier `/var/www/sirh-docker/` (ne pas ecraser l'ancien)
|
||||||
3. Copier les fichiers :
|
3. Copier les fichiers existants :
|
||||||
```bash
|
```bash
|
||||||
cp /var/www/sirh/.env /var/www/sirh-docker/.env
|
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/config/jwt /var/www/sirh-docker/config/jwt
|
||||||
cp -a /var/www/sirh/var/uploads /var/www/sirh-docker/uploads
|
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`
|
4. Creer `docker-compose.yml` et `deploy.sh` dans `/var/www/sirh-docker/` (voir etape 2 ci-dessus)
|
||||||
5. Mettre a jour Nginx systeme : remplacer la conf par `deploy/nginx/sirh-docker.conf`
|
5. Editer `/var/www/sirh-docker/.env` : changer `DATABASE_URL` pour utiliser `host.docker.internal` au lieu de `127.0.0.1`
|
||||||
6. Arreter l'ancien PHP-FPM : `sudo systemctl stop php8.4-fpm`
|
6. Se connecter au registry Gitea (voir etape 6 ci-dessus)
|
||||||
7. Deployer : `cd /var/www/sirh-docker && ./deploy.sh`
|
7. Mettre a jour Nginx systeme avec la conf reverse proxy (voir etape 7 ci-dessus)
|
||||||
8. Verifier que tout marche, puis supprimer l'ancien dossier
|
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`
|
||||||
|
|||||||
Reference in New Issue
Block a user