Guide de déploiement

Stack Dev Docker sur VPS : environnement prêt pour coder

Déployer sur un VPS Cloud →

Tutoriel

Développement

Stack Dev Docker sur VPS : environnement prêt pour coder

Une stack de développement distante évite de saturer le poste local et donne une IP stable pour les webhooks, démos et tests d'intégration. Sur un VPS ServOrbit, Docker Compose devient un atelier complet : Nginx, PHP-FPM ou Node, PostgreSQL, Redis, Mailpit et Adminer tournent ensemble dans des conteneurs isolés, persistants et accessibles via SSH depuis n'importe quel poste. Ce guide détaille la composition de la stack, la configuration des services et les bonnes pratiques pour travailler en équipe sans conflits.

10 min de lecture6 étapes
Sommaire· Pourquoi héberger une Stack Dev Docker sur un VPS ?1/12
  1. 01Pourquoi héberger une Stack Dev Docker sur un VPS ?
  2. 02Ce que vous pouvez faire avec une Stack Dev Docker
  3. 03Prérequis : configuration minimale recommandée
  4. 04Composants de la stack : rôle de chaque service
  5. 05Installer une Stack Dev Docker sur votre VPS ServOrbit
  6. 06Configuration des services : volumes, réseaux et variables d'environnement
  7. 07Accès depuis le laptop : SSH tunneling et reverse proxy
  8. 08Bonnes pratiques : dev vs production
  9. 09Hot reload avec docker compose watch
  10. 10Variantes de stack selon votre projet
  11. 11Dépannage : 4 erreurs courantes
  12. 12La documentation officielle

Pourquoi héberger une Stack Dev Docker sur un VPS ?

Un environnement de développement local fonctionne, mais il reste lié à une seule machine : changement de poste, onboarding d'un nouveau collaborateur ou accès depuis un autre pays deviennent des frictions. En centralisant votre stack Docker sur un VPS, vous disposez d'un serveur de développement partagé, toujours allumé, accessible via SSH ou navigateur depuis n'importe où. Vous gagnez également en reproductibilité : chaque service est défini dans un fichier docker-compose.yml, ce qui élimine le fameux problème « ça marche chez moi ».

Ce que vous pouvez faire avec une Stack Dev Docker

  • Lancer simultanément plusieurs services (Nginx, MySQL, Redis, PHP-FPM, Node.js) dans des conteneurs isolés sans conflit de ports ni de versions
  • Partager un environnement de développement identique entre tous les membres d'une équipe grâce au fichier docker-compose.yml versionné dans Git
  • Tester des migrations de base de données ou des mises à jour de dépendances dans un conteneur éphémère sans risquer l'environnement principal
  • Héberger un serveur CI/CD léger (Gitea, Drone CI) directement sur le même VPS pour automatiser vos déploiements internes
  • Accéder à vos services de développement via des sous-domaines ou des reverse proxies Traefik/Nginx sans ouvrir de ports non nécessaires
  • Sauvegarder et restaurer l'intégralité de votre stack en quelques commandes grâce aux volumes Docker et aux snapshots VPS

Prérequis : configuration minimale recommandée

Une stack complète avec PostgreSQL, Redis, Nginx et une application consomme en pratique 4 Go de RAM minimum — en dessous, l'OOM killer Docker interrompt PostgreSQL ou Redis en cours de migration, sans message d'erreur applicatif. Le VPS doit tourner sous Ubuntu 22.04 LTS ou Debian 12, avec Docker Engine 26+ et Docker Compose v2.22+ installés (la commande s'écrit docker compose, sans tiret). Vérifiez la version avec docker compose version : la fonctionnalité watch utilisée plus loin requiert v2.22 au minimum, sortie en septembre 2023.

Composants de la stack : rôle de chaque service

La stack de référence déployée par ServOrbit assemble six services complémentaires.

Nginx joue le rôle de reverse proxy frontal : il reçoit les requêtes HTTP sur le port 80 et les route vers PHP-FPM (via FastCGI) ou vers un serveur Node.js. La configuration nginx/default.conf est montée en volume pour rester modifiable sans reconstruire l'image.

PHP-FPM 8.3 (ou Node.js 22 selon le profil de stack) exécute le code applicatif. Les deux variantes sont disponibles dans le Marketplace ServOrbit ; le fichier docker-compose.yml inclut les deux services, désactivez celui dont vous n'avez pas besoin avec profiles.

PostgreSQL 16 stocke les données persistantes. Le port 5432 n'est pas exposé sur l'hôte par défaut — seul le réseau Docker interne dev_net y a accès, ce qui évite toute exposition accidentelle sur l'IP publique du VPS.

Redis 7 sert de cache et de courtier de messages. Comme PostgreSQL, il reste sur le réseau interne (port 6379) et est accessible depuis le code applicatif via le nom de service redis.

Mailpit 1.x remplace un serveur SMTP réel en développement : il capture tous les e-mails sortants et les expose dans une interface web sur le port 8025. Aucune configuration SMTP spéciale côté application — on pointe simplement sur mailpit:1025.

Adminer (port 8080) offre une interface web légère pour gérer PostgreSQL ou MySQL sans client lourd. Il est accessible uniquement depuis la machine elle-même ou via SSH tunnel.

Installer une Stack Dev Docker sur votre VPS ServOrbit

  1. Commander un VPS Cloud ServOrbit

    Rendez-vous sur la page /vps-cloud et choisissez une offre adaptée à votre usage. Pour une stack de développement standard (quelques conteneurs, base de données, reverse proxy), un VPS avec 2 vCPU et 4 Go de RAM constitue un bon point de départ. Finalisez la commande : votre VPS est provisionné en moins de 60 secondes sous Ubuntu 22.04 LTS.

  2. Accéder au Marketplace dans votre espace client

    Connectez-vous à votre espace client ServOrbit, puis ouvrez la section « Marketplace » depuis le tableau de bord de votre VPS. Le Marketplace liste toutes les applications disponibles en installation 1-clic, organisées par catégorie. Sélectionnez la catégorie « Développement » pour filtrer les stacks orientées dev.

  3. Lancer l'installation de la Stack Dev Docker

    Cliquez sur la carte « Stack Dev Docker », puis sur le bouton « Installer ». L'automatisation déploie Docker Engine, Docker Compose et un fichier docker-compose.yml préconfiguré avec les services essentiels (Nginx, PHP-FPM, PostgreSQL 16, Redis, Mailpit pour le test d'e-mails, Adminer). L'installation complète prend généralement entre 2 et 4 minutes selon la taille du VPS.

  4. Récupérer vos identifiants et accéder à l'interface

    Une fois l'installation terminée, l'espace client affiche les informations de connexion générées automatiquement : adresse IP du VPS, mot de passe PostgreSQL, et l'URL d'accès à Mailpit (par défaut sur le port 8025). Connectez-vous en SSH avec ssh root@<IP_VPS> pour vérifier l'état des conteneurs via docker compose ps dans le répertoire /opt/docker-dev-stack.

  5. Configurer votre premier projet et personnaliser la stack

    Copiez votre code source dans /opt/docker-dev-stack/app/ ou modifiez le fichier /opt/docker-dev-stack/docker-compose.yml pour ajouter ou retirer des services selon vos besoins. Relancez la stack avec docker compose up -d pour appliquer les changements. Pour exposer vos services sur un nom de domaine, configurez un enregistrement DNS pointant vers l'IP de votre VPS et adaptez la configuration Nginx incluse dans le répertoire /opt/docker-dev-stack/nginx/.

  6. Se connecter la première fois

    Il n'y a pas de compte à créer : l'URL ouvre directement la boîte mail de test Mailpit, sans mot de passe. PostgreSQL (5432) et Redis (6379) ne sont accessibles que depuis la machine elle-même ; identifiants Postgres dans /opt/docker-dev-stack/.env.

Configuration des services : volumes, réseaux et variables d'environnement

Le docker-compose.yml de la stack déclare trois volumes nommés — postgres_data, redis_data et app_data — montés respectivement dans /var/lib/postgresql/data, /data et /var/www/html. Ces volumes survivent à un docker compose down : les données de la base et les fichiers uploadés restent intacts entre les redémarrages.

Tous les services partagent le réseau interne dev_net de type bridge. Nginx est le seul service à exposer un port sur l'hôte (80) ; les autres restent isolés et communiquent par leur nom de service — postgres, redis, mailpit.

Les variables sensibles (mot de passe PostgreSQL, clé secrète applicative) ne sont jamais écrites en dur dans le docker-compose.yml. Elles sont lues depuis /opt/docker-dev-stack/.env via la directive env_file. Ce fichier est exclu du dépôt Git par .gitignore. Les variables d'environnement non sensibles (port, version PHP, nom de base) peuvent en revanche figurer directement dans le fichier Compose sous la clé environment, pour qu'elles soient visibles à la relecture.

Accès depuis le laptop : SSH tunneling et reverse proxy

PostgreSQL, Adminer et Redis ne sont pas exposés sur l'IP publique du VPS. Pour y accéder depuis votre poste local, ouvrez un tunnel SSH : ssh -L 5432:localhost:5432 -L 8080:localhost:8080 root@<IP_VPS> crée deux forwards locaux — le port 5432 de votre laptop pointe vers PostgreSQL, et le port 8080 vers Adminer. Votre client SQL habituel se connecte alors sur localhost:5432 comme si la base tournait en local.

Pour les services HTTP (Nginx, Mailpit), deux approches sont possibles. Si vous disposez d'un nom de domaine, configurez un enregistrement A vers l'IP du VPS et adaptez la configuration Nginx pour servir dev.votredomaine.com en HTTP simple (sans TLS, puisque c'est un environnement de développement). Si vous travaillez sans domaine, le tunnel SSH suffit : ssh -L 8025:localhost:8025 root@<IP_VPS> donne accès à Mailpit sur localhost:8025.

Bonnes pratiques : dev vs production

En développement, le fichier .env concentre tous les secrets. En production, les secrets Docker (docker secret) ou un gestionnaire de secrets externe (Vault, AWS Secrets Manager) remplacent le fichier plat — un .env versionné par accident expose des credentials dans l'historique Git.

Les limites de ressources (deploy.resources.limits) méritent d'être posées dès le dev : PostgreSQL peut consommer toute la RAM disponible si une requête dérive. Commencez avec memory: 512m sur PostgreSQL, memory: 256m sur Redis et memory: 256m sur PHP-FPM, puis ajustez selon les profils d'utilisation réels.

Ne montez jamais le socket Docker (/var/run/docker.sock) dans un conteneur applicatif sauf nécessité absolue : un conteneur qui accède au socket peut lancer d'autres conteneurs avec des privilèges root sur l'hôte. En développement ce risque est limité, mais l'habitude prise ici sera reproduite en production.

Hot reload avec docker compose watch

Docker Compose v2.22+ introduit docker compose watch, disponible depuis septembre 2023. Activez-le en ajoutant un bloc develop.watch dans le service app de votre docker-compose.yml : spécifiez les chemins à surveiller et l'action associée (sync pour copier les fichiers dans le conteneur sans le redémarrer, rebuild pour reconstruire l'image). Lancez ensuite docker compose watch au lieu de docker compose up -d : les modifications de fichiers sont propagées en temps réel dans le conteneur, sans redémarrage manuel. Vérifiez au préalable votre version avec docker compose version.

Variantes de stack selon votre projet

Faites défiler le tableau

StackServices principauxCas d'usageRAM recommandée
LAMPNginx + PHP-FPM 8.3, MariaDB 10.11, RedisWordPress, OctoberCMS, Laravel4 Go
MERNNode.js 22, MongoDB 7, RedisAPI REST + React/Vue SPA4 Go
Django / PostgreSQLPython 3.12, PostgreSQL 16, Redis, CeleryApps Python, ML, API Django REST4 Go
PHP + PostgreSQLNginx + PHP-FPM 8.3, PostgreSQL 16, Redis, MailpitSymfony, API Platform, Drupal4 Go
Full NodeNode.js 22, PostgreSQL 16, Redis, MailpitNestJS, Express, Fastify4 Go

Dépannage : 4 erreurs courantes

Port déjà occupé. L'erreur Bind for 0.0.0.0:80 failed: port is already allocated indique qu'un service hôte (Apache, nginx système) écoute déjà sur le port 80. Arrêtez le service système (systemctl stop nginx ou systemctl stop apache2) ou changez le port hôte dans docker-compose.yml ("8080:80") et accédez à la stack sur le port 8080.

Permissions de volume. L'erreur Permission denied sur un volume monté provient souvent d'un uid/gid de conteneur différent de celui de l'hôte. Ajoutez user: "1000:1000" dans le service concerné, ou changez les permissions du répertoire hôte avec chown -R 1000:1000 /opt/docker-dev-stack/app.

Réseau bridge introuvable. Le message network dev_net declared as external, but could not be found apparaît si vous utilisez external: true sur un réseau non encore créé. Retirez external: true : Docker Compose crée le réseau automatiquement au premier docker compose up.

RAM insuffisante. PostgreSQL affiche FATAL: out of memory ou redémarre en boucle si le VPS est sous-dimensionné. Vérifiez avec free -m : il faut au moins 4 Go disponibles pour la stack complète. Réduisez shared_buffers dans la configuration PostgreSQL (command: postgres -c shared_buffers=128MB) ou passez à une offre VPS supérieure.

Conseil pro : prenez un snapshot à la demande de votre VPS ServOrbit, depuis l'espace client, avant de modifier la configuration Docker en profondeur. Un snapshot vous permet de revenir à un état stable en un clic si une mise à jour de conteneur ou un changement de fichier Compose casse votre environnement. Pensez également à utiliser un fichier .env pour stocker vos variables sensibles (mots de passe, clés API) et à l'exclure de votre dépôt Git via .gitignore — même sur un serveur de développement, c'est une bonne habitude à ancrer dès le début.

La documentation officielle

Pour la configuration avancée, les options propres à l'outil et les changements de version, référez-vous à la documentation officielle de Docker Compose. Ce guide couvre la mise en ligne sur VPS ServOrbit ; la documentation éditeur reste la référence pour les réglages fins.

Déployez une Stack Dev Docker en quelques minutes sur un VPS Cloud ServOrbit

Profitez d'un VPS Cloud avec installation 1-clic de votre environnement Docker, support inclus et une formule mensuelle sans engagement.