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
- Un VPS Vierge : Un serveur nouvellement installé (Ubuntu ou Debian recommandé)
- Accès Root : Vous devez avoir le mot de passe de l'utilisateur
root(ou un utilisateur avecsudosans mot de passe, maisrootest plus simple pour l'automatisation initiale) - URL du Dépôt : L'URL
gitde votre monorepo (format SSH recommandé, ex:git@github.com:votre-nom/votre-projet.git) - Configuration
platform.yml: Le fichierplatform.ymlà la racine de votre projet doit contenir la sectionprovisioningavec au moinshost,repo_url,new_ssh_port, etnew_user(le nom de l'utilisateur non-root à créer) - (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 :
- Mot de passe Root : Le mot de passe de l'utilisateur
root(ou de l'utilisateur initial) de votre VPS - Mot de passe Utilisateur : Un mot de passe solide pour le nouvel utilisateur (
new_userdéfini dansplatform.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 droitssudo - ✅ Installe toutes les dépendances :
docker,python3,pip,venv,gpg,ufw,fail2ban,s3cmd(pour les sauvegardes S3) - ✅ Configure
fail2banpour bloquer les attaques par force brute SSH - ✅ Configure le pare-feu
ufw(n'autorisant que HTTP80, HTTPS443et votre nouveau port SSHnew_ssh_port) - ✅ Sécurise SSH : change le port vers
new_ssh_port, désactive le loginrootet désactive l'authentification par mot de passe (sécurisation finale) - ✅ Ajoute le nouvel utilisateur au groupe
docker - ✅ Installe le plugin
loki-docker-driverpour la centralisation des logs - ✅ Clone votre dépôt (
repo_url) dans/home/<new_user>/<nom_repo> - ✅ Installe
nekristo-clidans 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/configné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 :
- Afficher la clé privée de déploiement entrante (
github_actions_deploy_key) - Vous proposer de lancer automatiquement
nekristo-cli ci setup-secrets(si le CLIghest 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-vpset créez manuellement le secretSSH_PRIVATE_KEYsur GitHub Actions - Créez manuellement les secrets
SSH_HOST,SSH_USERNAME,SSH_PORTavec les valeurs correspondantes de votreplatform.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.