|
|
|
|
@@ -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=<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"
|
|
|
|
|
# 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`
|
|
|
|
|
|