Files
SIRH/doc/deployment-docker.md
2026-03-30 17:44:39 +02:00

3.8 KiB

Deploiement Docker — SIRH

Pre-requis

Installer Docker et Docker Compose sur la machine :

# Ubuntu
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER

Se deconnecter/reconnecter pour que le groupe docker prenne effet.

Premier deploiement

1. Creer le dossier de deploiement

sudo mkdir -p /var/www/sirh
sudo chown -R $(whoami):$(whoami) /var/www/sirh

2. Copier les fichiers depuis le repo

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

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

4. Generer les cles JWT

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 && \
   openssl genpkey -algorithm RSA -out /jwt/private.pem -pkeyopt rsa_keygen_bits:4096 && \
   openssl rsa -pubout -in /jwt/private.pem -out /jwt/public.pem"

5. Creer le dossier uploads

mkdir -p /var/www/sirh/uploads

6. Configurer le login au registry Gitea

docker login gitea.malio.fr
# Username: ton user Gitea
# Password: ton token Gitea

7. Configurer Nginx systeme

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

8. Deployer

cd /var/www/sirh
./deploy.sh

Deployer une release

cd /var/www/sirh
./deploy.sh           # deploie la derniere version (latest)
./deploy.sh v0.1.61   # deploie une version specifique

Rollback

Image seule (pas de changement de schema BDD)

./deploy.sh v0.1.60

Avec rollback de migration

# 1. Rollback schema (pendant que la version actuelle tourne encore)
docker compose exec -T app php bin/console doctrine:migrations:migrate prev --no-interaction
# 2. Deployer l'ancienne version
./deploy.sh v0.1.60

Voir les logs

cd /var/www/sirh
docker compose logs -f          # tous les logs
docker compose logs -f --tail=100  # 100 dernieres lignes

Migration depuis l'ancien deploiement (tar.gz)

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 :
    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