← Tous les articles
May 25, 2026

Installation et mise en place d’un serveur VPS-1 chez OVH

Développement Web PHP #Déploiement #ovh #Devops #VPS

1. Achat du VPS

Achat chez OVH d’un VPS-1 avec la distribution Debian 12 et Docker installé.

2. Première connexion SSH

Récupérer le mot de passe généré sur l’interface d’OVH et ensuite se connecter en SSH via la commande :

ssh debian@IP_DU_VPS

Puis créer un nouveau mot de passe sur le VPS.

3. Sécurisation du VPS

3.1 Security update

sudo apt update && sudo apt upgrade -y

3.2 Installation des locales

sudo apt install locales -y
sudo dpkg-reconfigure locales

Sélectionner :

  • fr_BE.UTF-8
  • C.UTF-8

3.3 Créer un utilisateur avec des droits restreints

sudo adduser deploy
sudo usermod -aG sudo deploy
sudo usermod -aG docker deploy

→ On évite de travailler en root.

3.4 Configuration SSH

3.4.1 Sur ton Mac (local)

ssh-keygen -t ed25519 -f ~/.ssh/id_ovh_vps

3.4.2 Copier la clé vers le VPS

ssh-copy-id -i ~/.ssh/id_ovh_vps.pub deploy@IP_DU_VPS

Ensuite, on ajoute la clé dans notre agent SSH sur Mac :

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ovh_vps

Cela doit fonctionner :

ssh deploy@IP_DU_VPS

3.4.3 Désactiver le login par mot de passe

Sur le VPS :

sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf

Modifier tout par :

PasswordAuthentication no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
UsePAM no

Puis :

sudo systemctl restart ssh

Du coup maintenant, le VPS est accessible en SSH uniquement avec la clé privée du Mac et l’utilisateur deploy.

ssh debian@IP_DU_VPS

ssh debian@IP_DU_VPS
debian@IP_DU_VPS: Permission denied (publickey).

Il faut aussi ajouter dans la configuration SSH de notre Mac le host et quelle clé privée utiliser :

nano ~/.ssh/config

Et ajouter :

Host IP_DU_VPS
  HostName IP_DU_VPS
  User deploy
  IdentityFile ~/.ssh/id_ovh_vps
  IdentitiesOnly yes
ssh deploy@IP_DU_VPS

→ OK

🔥 ÉTAPE 4 — Firewall UFW (ESSENTIEL)

sudo apt install ufw -y

Règles de base :

sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443

sudo ufw enable

AJOUT IMPORTANT pour Docker

Créer une règle spéciale :

sudo nano /etc/ufw/after.rules

Ajouter à la fin :

# Docker integration
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN
COMMIT

Si il faut recharger les règles du firewall :

sudo ufw reload

→ Cela évite que Docker bypass complètement le firewall.

Pour vérifier si tout est OK :

sudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80                         ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80 (v6)                    ALLOW IN    Anywhere (v6)
443 (v6)                   ALLOW IN    Anywhere (v6)

→ Tout le reste est bloqué par défaut.

🛡️ ÉTAPE 5 — Fail2ban (anti brute force)

sudo apt install fail2ban -y

Vous pouvez personnaliser les fichiers de configuration Fail2ban pour protéger les services exposés à Internet public contre les tentatives de connexion répétées.

Comme le recommande Fail2ban, créez un fichier de configuration local de vos services en copiant le fichier "jail" :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

→ Protège SSH automatiquement.

🧱 ÉTAPE 6 — Sécuriser Docker (important)

Créer la configuration du daemon :

sudo nano /etc/docker/daemon.json

Mettre :

{
  "icc": false,
  "live-restore": true,
  "userland-proxy": false
}

Redémarrer :

sudo systemctl restart docker

📦 ÉTAPE 8 — Installer les outils utiles

sudo apt install -y \
git \
curl \
htop \
nano \
ca-certificates \
gnupg

🧪 ÉTAPE 9 — Test sécurité réseau

Vérifier les ports ouverts :

ss -tulnp

→ Tu dois voir uniquement SSH + rien d’exotique.

🧭 ÉTAPE 10 — Préparer Docker runtime

Même si préinstallé :

docker --version
docker compose version

🚨 CHECK FINAL AVANT DÉPLOIEMENT

Ton VPS est OK si :

  • ✔ SSH key only actif
  • ✔ Root login désactivé
  • ✔ UFW actif
  • ✔ Ports 80/443 ouverts
  • ✔ Fail2ban actif
  • ✔ Docker OK
  • ✔ Aucune DB exposée

🧠 ARCHITECTURE SÉCURISÉE FINALE

Internet
   ↓
UFW Firewall
   ↓
SSH (clé uniquement)
   ↓
Docker Engine
   ↓
Traefik (reverse proxy)
   ↓
Applications isolées

🧭 ÉTAPE 11 — DÉPLOIEMENT APPLICATIONS

Sur le VPS, d’abord on crée l’environnement avec les fichiers Docker nécessaires :

sudo mkdir -p /var/www/myhomehub
sudo chown -R deploy:deploy /var/www/myhomehub

Ensuite depuis le local :

scp -r docker deploy@IP_DU_VPS:/var/www/myhomehub/

Maintenant on se place dans :

cd /var/www/myhomehub/docker/prod
docker compose up -d

Et on doit créer un PAT (Personal Access Token) dans GitHub pour récupérer nos images Docker sur GitHub :

https://github.com/settings/tokens

Scopes obligatoires :

  • read:packages
  • repo (si dépôt privé)

Solution provisoire car expire dans le temps.

Et maintenant, docker compose up -d doit récupérer nos images sur GitHub correctement.

Étape deployment

Il faut aussi définir les variables d’environnement GitHub Actions dans GitHub ici :

https://github.com/Pistonman33/MyHomeHub/settings/secrets/actions

Il faudra aussi créer une clé publique/privée localement comme client et ensuite copier la clé publique sur le VPS et la clé privée dans GitHub Actions :

ssh-keygen -t ed25519 -C "github-actions-myhomehub"

Tu vas obtenir 2 fichiers :

~/.ssh/github_actions_myhomehub        ← PRIVATE KEY
~/.ssh/github_actions_myhomehub.pub    ← PUBLIC KEY
cat ~/.ssh/github_actions_myhomehub.pub

Sur le VPS :

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

sudo chmod 600 ~/.ssh/authorized_keys
sudo chmod 700 ~/.ssh

On ajoute la clé publique pour GitHub Actions :

cat ~/.ssh/github_actions_myhomehub

Maintenant nous pouvons utiliser GitHub Actions pour déployer en production sur notre VPS OVH.

Thiébault Michaël ©