Aller au contenu

Guide : Provisionnement d'un VPS (Serveur de Production)

Ce document décrit la procédure automatisée pour transformer un VPS vierge (tournant sous Ubuntu/Debian) en un serveur de production sécurisé, fonctionnel, et prêt à être géré par nekristo-cli et GitHub Actions.

Objectif : Remplacer une configuration manuelle complexe et sujette aux erreurs par une seule commande.


Étape 1 : Prérequis

  1. Un VPS Vierge : Un serveur nouvellement installé (Ubuntu ou Debian recommandé)
  2. Accès Root : Vous devez avoir le mot de passe de l'utilisateur root (ou un utilisateur avec sudo sans mot de passe, mais root est plus simple pour l'automatisation initiale)
  3. URL du Dépôt : L'URL git de votre monorepo (format SSH recommandé, ex: git@github.com:votre-nom/votre-projet.git)
  4. Configuration platform.yml : Le fichier platform.yml à la racine de votre projet doit contenir la section provisioning avec au moins host, repo_url, new_ssh_port, et new_user (le nom de l'utilisateur non-root à créer)
  5. (Optionnel mais Recommandé) CLI GitHub (gh) : Installez le CLI officiel de GitHub et authentifiez-vous (gh auth login) sur votre machine locale pour une configuration automatique des secrets GitHub Actions

Étape 2 : Lancer le Provisionnement

Depuis votre machine de développement locale (où nekristo-cli est installé), lancez la commande suivante. Elle lira la configuration depuis platform.yml et se connectera à votre VPS.

nekristo-cli platform provision-vps

Vous pouvez surcharger les paramètres de platform.yml via des options : --host <ip>, --repo-url <url>, --initial-port <port>, --root-user <user>, --new-port <port>.

L'Assistant Interactif

La commande vous demandera :

  1. Mot de passe Root : Le mot de passe de l'utilisateur root (ou de l'utilisateur initial) de votre VPS
  2. Mot de passe Utilisateur : Un mot de passe solide pour le nouvel utilisateur (new_user défini dans platform.yml, ex: nekristo)

Ce que fait la commande

Le script va automatiser l'intégralité de la configuration sécurisée du serveur :

  • ✅ Crée l'utilisateur (new_user) et lui donne les droits sudo
  • ✅ Installe toutes les dépendances : docker, python3, pip, venv, gpg, ufw, fail2ban, s3cmd (pour les sauvegardes S3)
  • ✅ Configure fail2ban pour bloquer les attaques par force brute SSH
  • ✅ Configure le pare-feu ufw (n'autorisant que HTTP 80, HTTPS 443 et votre nouveau port SSH new_ssh_port)
  • ✅ Sécurise SSH : change le port vers new_ssh_port, désactive le login root et désactive l'authentification par mot de passe (sécurisation finale)
  • ✅ Ajoute le nouvel utilisateur au groupe docker
  • ✅ Installe le plugin loki-docker-driver pour la centralisation des logs
  • ✅ Clone votre dépôt (repo_url) dans /home/<new_user>/<nom_repo>
  • ✅ Installe nekristo-cli dans un environnement virtuel Python sur le serveur
  • ✅ Génère une clé SSH (github_actions_deploy_key) sur le serveur, réservée pour l'authentification entrante de GitHub Actions vers le VPS
  • ✅ Génère une clé SSH (id_github_deploy) sur le serveur pour l'authentification sortante du VPS vers GitHub (pour cloner/pull le dépôt) et crée le fichier ~/.ssh/config nécessaire
  • ✅ Tente d'ajouter automatiquement la clé sortante comme "Deploy Key" (lecture seule) à votre dépôt GitHub via le CLI gh

Étape 3 : Configurer les Secrets GitHub (Automatisé/Manuel)

À la fin du script provision-vps, nekristo-cli va :

  1. Afficher la clé privée de déploiement entrante (github_actions_deploy_key)
  2. Vous proposer de lancer automatiquement nekristo-cli ci setup-secrets (si le CLI gh est détecté)

Si vous acceptez, ci setup-secrets configurera les secrets suivants dans votre dépôt GitHub (Settings > Secrets and variables > Actions) en vous demandant votre passphrase GPG et les identifiants NPM :

Secret Valeur (Automatiquement configurée) Utilisation par la CI/CD
SSH_HOST L'adresse IP de votre VPS (provisioning.host) Connexion SSH
SSH_USERNAME L'utilisateur créé (provisioning.new_user) Connexion SSH
SSH_PORT Le nouveau port SSH (provisioning.new_ssh_port) Connexion SSH
SSH_PRIVATE_KEY La clé privée entrante générée sur le serveur Connexion SSH de GitHub Actions vers le VPS
GPG_PASSPHRASE La phrase de passe de votre clé GPG (demandée) Déchiffrement de secrets.<env>.yml.gpg sur le serveur
NPM_URL L'URL de NPM sur le VPS (demandée) Configuration auto des proxys par ci setup-proxies
NPM_EMAIL L'email admin de NPM (demandé) Configuration auto des proxys par ci setup-proxies
NPM_PASSWORD Le mot de passe admin de NPM (demandé) Configuration auto des proxys par ci setup-proxies

Configuration Manuelle (Alternative)

Si vous refusez l'automatisation ou si gh n'est pas installé :

  • Copiez la clé privée SSH affichée par provision-vps et créez manuellement le secret SSH_PRIVATE_KEY sur GitHub Actions
  • Créez manuellement les secrets SSH_HOST, SSH_USERNAME, SSH_PORT avec les valeurs correspondantes de votre platform.yml
  • Créez manuellement les secrets GPG_PASSPHRASE, NPM_URL, NPM_EMAIL, NPM_PASSWORD

Étape 4 : Configurer GPG sur le VPS (Requis)

Le provisionnement a configuré la connexion au VPS, mais il reste une étape pour permettre au VPS de déchiffrer vos secrets de production.

Vous devez importer votre clé GPG privée locale sur le serveur. nekristo-cli automatise cela :

nekristo-cli server setup-gpg

Cette commande vous demandera votre phrase de passe GPG locale pour exporter la clé, puis se connectera au VPS pour l'importer en toute sécurité.

Votre serveur est maintenant prêt et sécurisé pour les déploiements.