87 lines
3.4 KiB
Plaintext
87 lines
3.4 KiB
Plaintext
---
|
|
title: Préparer l'hôte Docker
|
|
description: Installer Docker proprement et organiser le serveur pour les déploiements.
|
|
---
|
|
|
|
Une fois le système sécurisé, prépare un hôte minimal. Le serveur doit exécuter des images déjà construites : il n'a pas besoin du code source, de Node.js ni des outils de compilation.
|
|
|
|
## Installer Docker depuis le dépôt officiel
|
|
|
|
Utilise le [dépôt APT officiel de Docker](https://docs.docker.com/engine/install/ubuntu/) plutôt qu'un script d'installation téléchargé à la volée. Installe Docker Engine, le plugin Buildx et Docker Compose, puis vérifie l'installation :
|
|
|
|
```bash
|
|
sudo systemctl enable --now docker
|
|
sudo docker run --rm hello-world
|
|
sudo docker compose version
|
|
```
|
|
|
|
## Choisir le bon niveau d'accès
|
|
|
|
Ajouter un utilisateur au groupe `docker` permet d'éviter `sudo`, mais ce groupe donne des privilèges équivalents à `root`. Trois options existent :
|
|
|
|
| Option | Usage |
|
|
| --- | --- |
|
|
| `sudo docker ...` | simple pour l'administration manuelle |
|
|
| Docker rootless | bon isolement lorsque la stack le permet |
|
|
| script de déploiement restreint | adapté à une CI qui doit lancer une seule opération |
|
|
|
|
Évite de donner un accès Docker complet à tous les comptes. La [documentation post-installation de Docker](https://docs.docker.com/engine/install/linux-postinstall/) détaille le risque du groupe `docker` et le mode rootless.
|
|
|
|
## Organiser les fichiers de production
|
|
|
|
```text
|
|
/srv/mon-app/
|
|
├── docker-compose.prod.yml
|
|
├── .env.prod
|
|
├── .env.release
|
|
└── backups/
|
|
```
|
|
|
|
- `docker-compose.prod.yml` décrit les services ;
|
|
- `.env.prod` contient la configuration et les secrets du serveur ;
|
|
- `.env.release` contient uniquement le tag d'image déployé ;
|
|
- `backups/` reçoit les sauvegardes chiffrées avant leur copie hors du serveur.
|
|
|
|
Protège les fichiers sensibles :
|
|
|
|
```bash
|
|
sudo install -d -o root -g deploy -m 0750 /srv/mon-app
|
|
sudo install -o root -g deploy -m 0640 .env.prod /srv/mon-app/.env.prod
|
|
```
|
|
|
|
Les secrets ne doivent apparaître ni dans l'image, ni dans Git, ni dans les journaux de la CI.
|
|
|
|
## Préparer le réseau et le TLS
|
|
|
|
1. fais pointer le DNS vers l'adresse publique du serveur ;
|
|
2. expose uniquement le reverse proxy en `80` et `443` ;
|
|
3. garde la base de données et les services internes sur le réseau Docker ;
|
|
4. configure un certificat TLS avec renouvellement automatique ;
|
|
5. vérifie l'URL de santé depuis l'extérieur.
|
|
|
|
## Prévoir l'exploitation
|
|
|
|
Avant le premier déploiement, décide :
|
|
|
|
- où sont stockés les volumes persistants ;
|
|
- à quelle fréquence ils sont sauvegardés ;
|
|
- comment restaurer une sauvegarde sur une machine vierge ;
|
|
- combien de temps conserver les journaux Docker ;
|
|
- qui reçoit les alertes de disponibilité et d'espace disque ;
|
|
- comment accéder au serveur si SSH ne répond plus.
|
|
|
|
<Callout title="Une sauvegarde n'existe qu'après un test de restauration" type="info">
|
|
Copie les sauvegardes hors du serveur et vérifie régulièrement qu'une restauration complète fonctionne. Un volume Docker persistant ne remplace pas une sauvegarde.
|
|
</Callout>
|
|
|
|
## Prêt pour le déploiement ?
|
|
|
|
- [ ] Docker et Compose proviennent du dépôt officiel ;
|
|
- [ ] l'accès Docker est limité et documenté ;
|
|
- [ ] le répertoire `/srv/mon-app` est protégé ;
|
|
- [ ] les secrets sont présents uniquement sur le serveur ou dans un coffre ;
|
|
- [ ] DNS et TLS fonctionnent ;
|
|
- [ ] les volumes, sauvegardes et journaux ont une politique claire ;
|
|
- [ ] une URL de santé est disponible.
|
|
|