docs: add server and CI/CD guides
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: Bien démarrer un serveur
|
||||
description: Sécuriser les accès et poser une base saine avant le premier déploiement.
|
||||
---
|
||||
|
||||
Un serveur de production doit être préparé **avant** d'héberger l'application. L'objectif du premier jour est simple : réduire la surface d'attaque, conserver un accès de secours et automatiser les mises à jour de sécurité.
|
||||
|
||||
<Callout title="Ne te verrouille pas dehors" type="warn">
|
||||
Garde ta première session SSH ouverte pendant les changements. Valide la configuration, puis ouvre une deuxième session avec la clé avant de désactiver les mots de passe.
|
||||
</Callout>
|
||||
|
||||
## 1. Mettre le système à jour
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt full-upgrade -y
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
Après le redémarrage, reconnecte-toi et vérifie que les services essentiels sont revenus.
|
||||
|
||||
## 2. Créer un compte d'administration
|
||||
|
||||
Le compte `root` ne doit pas être utilisé pour les connexions quotidiennes :
|
||||
|
||||
```bash
|
||||
sudo adduser deploy
|
||||
sudo usermod -aG sudo deploy
|
||||
```
|
||||
|
||||
Ce compte servira à administrer et déployer l'application. Pour une équipe, préfère un compte nominatif par personne et un compte technique distinct pour l'automatisation.
|
||||
|
||||
## 3. Utiliser une clé SSH
|
||||
|
||||
Génère la clé sur ta machine, jamais sur le serveur :
|
||||
|
||||
```bash
|
||||
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/serveur_production
|
||||
ssh-copy-id -i ~/.ssh/serveur_production.pub deploy@ADRESSE_IP
|
||||
```
|
||||
|
||||
Teste ensuite la connexion dans un nouveau terminal :
|
||||
|
||||
```bash
|
||||
ssh -i ~/.ssh/serveur_production deploy@ADRESSE_IP
|
||||
```
|
||||
|
||||
Quand cet accès fonctionne, ajoute un fichier `/etc/ssh/sshd_config.d/99-hardening.conf` :
|
||||
|
||||
```text
|
||||
PermitRootLogin no
|
||||
PasswordAuthentication no
|
||||
PubkeyAuthentication yes
|
||||
```
|
||||
|
||||
Valide **avant** de recharger SSH :
|
||||
|
||||
```bash
|
||||
sudo sshd -t
|
||||
sudo systemctl reload ssh
|
||||
```
|
||||
|
||||
## 4. Fermer les ports inutiles
|
||||
|
||||
Pour un serveur web classique, seuls SSH, HTTP et HTTPS sont nécessaires :
|
||||
|
||||
```bash
|
||||
sudo ufw allow OpenSSH
|
||||
sudo ufw allow 80/tcp
|
||||
sudo ufw allow 443/tcp
|
||||
sudo ufw enable
|
||||
sudo ufw status verbose
|
||||
```
|
||||
|
||||
Applique les mêmes restrictions dans le pare-feu du fournisseur cloud.
|
||||
|
||||
<Callout title="Docker et UFW" type="warn">
|
||||
Un port publié par Docker peut contourner les règles UFW. Ne publie vers l'hôte que les ports du reverse proxy, vérifie aussi le pare-feu du fournisseur et utilise la chaîne Docker <code>DOCKER-USER</code> si tu dois filtrer le trafic des conteneurs.
|
||||
</Callout>
|
||||
|
||||
## 5. Automatiser les correctifs de sécurité
|
||||
|
||||
```bash
|
||||
sudo apt install unattended-upgrades
|
||||
sudo dpkg-reconfigure -plow unattended-upgrades
|
||||
```
|
||||
|
||||
`fail2ban` peut compléter cette base si le service SSH est exposé à Internet :
|
||||
|
||||
```bash
|
||||
sudo apt install fail2ban
|
||||
sudo systemctl enable --now fail2ban
|
||||
```
|
||||
|
||||
## Checklist du premier jour
|
||||
|
||||
- [ ] système entièrement mis à jour et redémarré ;
|
||||
- [ ] connexion avec un compte non-root ;
|
||||
- [ ] clé Ed25519 testée dans une seconde session ;
|
||||
- [ ] connexion root et mot de passe SSH désactivés ;
|
||||
- [ ] configuration validée avec `sshd -t` ;
|
||||
- [ ] seuls les ports 22, 80 et 443 sont ouverts ;
|
||||
- [ ] mises à jour de sécurité automatiques activées ;
|
||||
- [ ] accès de secours du fournisseur testé ou documenté.
|
||||
|
||||
## Documentation officielle
|
||||
|
||||
- [OpenSSH sur Ubuntu](https://documentation.ubuntu.com/server/how-to/security/openssh-server/)
|
||||
- [Pare-feu Ubuntu](https://documentation.ubuntu.com/server/how-to/security/firewalls/)
|
||||
- [Mises à jour automatiques](https://documentation.ubuntu.com/server/how-to/software/automatic-updates/)
|
||||
|
||||
Reference in New Issue
Block a user