Aller au contenu principal

Installation Docker

Procédure pour un serveur Ubuntu neuf. Les serveurs existants (51.75.79.112 et 51.75.77.220) sont déjà installés ; cette page sert à reconstruire un serveur ou à en préparer un nouveau.

1. Installer Docker Engine et Compose v2​

sudo apt update && sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker ubuntu # puis se reconnecter
docker compose version # doit afficher v2.x

N'installez pas docker-compose (v1) : il échoue avec Docker Engine 28.

2. Durcir le serveur​

sudo apt install -y fail2ban unattended-upgrades
# SSH : clé uniquement
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh

Les ports des services internes sont liés à 127.0.0.1 dans les fichiers compose : seuls 22, 80 et 443 doivent être joignables depuis Internet.

3. Déposer le projet​

Le code n'est pas cloné sur le serveur : il est envoyé depuis le poste d'administration (voir Déploiement). Arborescence attendue dans ~/pch-sig :

~/pch-sig/
├── docker-compose.prod.yml # ou docker-compose.preprod.yml
├── .env.prod # secrets lus par Compose (chmod 600)
├── backend/ # sources + backend/.env (copié dans l'image)
│ └── config/jwt/ # clés JWT propres au serveur (ne jamais écraser)
├── frontend/build/ # build React (bind-monté)
├── documentation/build/ # build Docusaurus (bind-monté)
├── nginx/frontend.conf # Nginx du frontend (CSP)
└── monitoring/ # configuration Loki / Promtail

4. Renseigner les secrets​

Créer ~/pch-sig/.env.prod (chmod 600) avec les valeurs du gestionnaire de secrets : voir Configuration. Ne jamais copier un .env d'un serveur à l'autre sans relire chaque valeur.

5. Construire et démarrer​

cd ~/pch-sig
docker compose -f docker-compose.prod.yml build backend
docker compose -f docker-compose.prod.yml up -d
docker compose -f docker-compose.prod.yml ps
Toujours -f

Sans -f, Compose lit compose.yaml (squelette Symfony) et démarre une base au mot de passe par défaut.

L'entrypoint du backend crée les clés JWT si elles manquent (préproduction ; en production, les créer d'abord sur l'hôte, voir Authentification JWT), attend PostgreSQL, joue les migrations et prépare le cache. Suivre son déroulement :

docker compose -f docker-compose.prod.yml logs -f backend

6. Vérifier​

docker exec pch_backend curl -s http://127.0.0.1:8000/api/health
curl -s -o /dev/null -w "%{http_code}\n" https://bemba.ucp-pch.org/

Les deux doivent répondre 200 (le premier certificat peut prendre une minute). Poursuivre avec le premier démarrage.