La situation initiale est un VPS chez Hetzner (8 vCPU - 16 Go de RAM - 160 Go de SSD) desservant un petit SaaS B2B. Sur le serveur Ubuntu 22.04, Docker Swarm (1 manager), 12 conteneurs (nginx reverse-proxy, 3 API sur Node.js, 2 Workers, PostgreSQL 14, Redis, MinIO, Prometheus, Grafana, Loki). L'accès à la production se fait désormais via SSH avec un mot de passe, le pare-feu est partiellement configuré, les mises à jour ne sont pas installées régulièrement, il n'y a pas de logs ni d'alertes centralisées, les sauvegardes sont faites manuellement sur le même disque. Au cours des 2 derniers mois, il y a eu 2 incidents : des redémarrages inattendus du service et des pics de CPU sans raison apparente. Ce que vous devez faire, c'est amener le serveur dans un état sécurisé et prévisible avec un temps d'arrêt minimal et laisser une configuration reproductible. Limitations - la fenêtre de temps d'arrêt ne dépasse pas 30 minutes au total - vous ne pouvez pas changer de fournisseur de cloud - les domaines et les certificats TLS actuels doivent être conservés - vous ne pouvez pas « réécrire l'application », vous pouvez uniquement modifier l'infrastructure et l'environnement - toutes les modifications sont enregistrées dans le référentiel Git (nous fournirons l'accès) - il est préférable d'utiliser les outils Ansible et Linux standard. Étapes et résultat attendu 1 - Diagnostic de l'état actuel - inventaire des services - ports réseau - utilisateurs - clés - timers cron/systemd - vérification des logs du noyau et Docker - identification des causes des redémarrages et des pics CPU - un court rapport avec des hypothèses et un plan de changements. 2 - Renforcement du système d'exploitation et des accès - transfert de SSH vers des clés - désactivation de l'authentification par mot de passe et de la connexion root - configuration de fail2ban - configuration d'UFW ou nftables avec une liste explicite de ports ouverts - configuration de base auditd ou un analogue pour les événements critiques - vérification des droits et des secrets (secrets Docker - fichiers env) - mise à jour des packages et configuration de mises à niveau sans surveillance avec contrôle de redémarrage. 3 - Schéma de sauvegarde et récupération sécurisé - sauvegardes PostgreSQL automatiques (pg_dump ou pg_basebackup comme convenu) - sauvegardes MinIO (mc miroir ou rclone) - sauvegardes de la configuration Swarm et des répertoires importants - téléchargement vers un stockage séparé (par exemple, Hetzner Storage Box via SSH - le stockage compatible S3 est autorisé) - cryptage des sauvegardes (age ou gpg) - réglementations de stockage (7 jours - 4 semaines) - contrôle de récupération obligatoire sur un circuit de test ou sur une VM temporaire. 4 - Observabilité et alertes - configuration de node_exporter - cAdvisor - collecte des logs (transfert Loki ou journald) - Tableaux de bord Grafana pour CPU - RAM - disque - Redémarrages Docker - Santé Postgres - configuration des alertes dans Telegram ou email - au moins 6 alertes clés (disque > 80% - MOO - boucle de redémarrage du conteneur - Échec de réplication/sauvegarde Postgres le cas échéant - indisponibilité de nginx - croissance 5xx). 5 - Amener le déploiement sous une forme reproductible - Rôles ou playbooks Ansible pour le système d'exploitation - pare-feu - utilisateurs - configuration de base de docker/swarm - sauvegardes - surveillance - toutes les variables et tous les secrets sont séparés (Ansible Vault ou SOPS) - instructions dans le README sur la façon de déployer un serveur à partir de zéro et comment effectuer une récupération. Critères d'acceptation (mesurables) - Accès SSH à l'aide de clés uniquement - Connexion root désactivée - Authentification par mot de passe désactivée - Tous les ports externes sauf 80 - 443 - 22 sont fermés sur le pare-feu (22 peut être changé vers un autre port si justifié) - Les sauvegardes automatiques quotidiennes vers un stockage séparé sont effectuées selon un calendrier et ont un rapport de réussite - au moins un test de récupération PostgreSQL et un test de récupération de fichier MinIO ont été effectués avec confirmation - La surveillance affiche les métriques du serveur et du conteneur - les alertes sont configurées - les alertes de test sont envoyées - Les services Swarm après le travail fonctionnent comme avant le travail - les domaines et TLS sont enregistrés - temps d'arrêt total dans les 30 minutes - Le référentiel contient du code Ansible - des variables - README - un schéma de sauvegarde - une liste des modifications apportées Environnement technique - Ubuntu 22.04 LTS - Docker 24.x - Docker Swarm - PostgreSQL 14 - Redis - MinIO - Prometheus - Grafana - Loki - nginx - Hetzner VPS - stockage de sauvegarde séparé. Nous fournirons l'accès via SSH et au panneau DNS.