[{"data":1,"prerenderedAt":193},["ShallowReactive",2],{"seo-verification":3,"blog-stack-dev-docker-vps-ma-fr":6,"promo-bar-likely":145},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-stack-dev-docker-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":130,"ctaBody":131,"ctaButton":132,"ctaUrl":133,"relatedPosts":134},139,"stack-dev-docker-vps",{"fr":10,"en":12,"ar":13,"es":14},"docker-dev-stack-on-a-vps-an-environment-ready-for-coding","حزمة-تطوير-docker-على-خادم-vps-بيئة-جاهزة-للبرمجة","stack-dev-docker-en-vps","Stack Dev Docker sur VPS : environnement prêt pour coder","Montez une stack dev Docker complète sur VPS : Nginx, PHP-FPM, PostgreSQL, Redis, Mailpit, Adminer — docker-compose.yml détaillé, SSH tunneling, dépannage.",10,1,false,"2026-02-06T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"Développement","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fstack-dev-docker-vps-poster.svg",{"categorySlug":27,"appSlug":34},"docker-dev-stack","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.",[37,41,51,54,57,79,82,85,88,92,122,125,127],{"type":38,"title":39,"body":40},"h2","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 ».",{"type":42,"title":43,"items":44},"ul","Ce que vous pouvez faire avec une Stack Dev Docker",[45,46,47,48,49,50],"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\u002FCD 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\u002FNginx 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",{"type":38,"title":52,"body":53},"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.",{"type":38,"title":55,"body":56},"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.\n\n**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\u002Fdefault.conf` est montée en volume pour rester modifiable sans reconstruire l'image.\n\n**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`.\n\n**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.\n\n**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`.\n\n**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`.\n\n**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.",{"type":58,"title":59,"steps":60},"steps","Installer une Stack Dev Docker sur votre VPS ServOrbit",[61,64,67,70,73,76],{"title":62,"body":63},"Commander un VPS Cloud ServOrbit","Rendez-vous sur la page \u002Fvps-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.",{"title":65,"body":66},"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.",{"title":68,"body":69},"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.",{"title":71,"body":72},"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@\u003CIP_VPS>` pour vérifier l'état des conteneurs via `docker compose ps` dans le répertoire `\u002Fopt\u002Fdocker-dev-stack`.",{"title":74,"body":75},"Configurer votre premier projet et personnaliser la stack","Copiez votre code source dans `\u002Fopt\u002Fdocker-dev-stack\u002Fapp\u002F` ou modifiez le fichier `\u002Fopt\u002Fdocker-dev-stack\u002Fdocker-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 `\u002Fopt\u002Fdocker-dev-stack\u002Fnginx\u002F`.",{"title":77,"body":78},"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 \u002Fopt\u002Fdocker-dev-stack\u002F.env.",{"type":38,"title":80,"body":81},"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 `\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata`, `\u002Fdata` et `\u002Fvar\u002Fwww\u002Fhtml`. Ces volumes survivent à un `docker compose down` : les données de la base et les fichiers uploadés restent intacts entre les redémarrages.\n\nTous 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`.\n\nLes 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 `\u002Fopt\u002Fdocker-dev-stack\u002F.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.",{"type":38,"title":83,"body":84},"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@\u003CIP_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.\n\nPour 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@\u003CIP_VPS>` donne accès à Mailpit sur `localhost:8025`.",{"type":38,"title":86,"body":87},"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.\n\nLes 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.\n\nNe montez jamais le socket Docker (`\u002Fvar\u002Frun\u002Fdocker.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.",{"type":89,"title":90,"body":91},"tip","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`.",{"type":93,"title":94,"headers":95,"rows":100},"comparison","Variantes de stack selon votre projet",[96,97,98,99],"Stack","Services principaux","Cas d'usage","RAM recommandée",[101,106,110,114,118],[102,103,104,105],"LAMP","Nginx + PHP-FPM 8.3, MariaDB 10.11, Redis","WordPress, OctoberCMS, Laravel","4 Go",[107,108,109,105],"MERN","Node.js 22, MongoDB 7, Redis","API REST + React\u002FVue SPA",[111,112,113,105],"Django \u002F PostgreSQL","Python 3.12, PostgreSQL 16, Redis, Celery","Apps Python, ML, API Django REST",[115,116,117,105],"PHP + PostgreSQL","Nginx + PHP-FPM 8.3, PostgreSQL 16, Redis, Mailpit","Symfony, API Platform, Drupal",[119,120,121,105],"Full Node","Node.js 22, PostgreSQL 16, Redis, Mailpit","NestJS, Express, Fastify",{"type":38,"title":123,"body":124},"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.\n\n**Permissions de volume.** L'erreur `Permission denied` sur un volume monté provient souvent d'un uid\u002Fgid 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 \u002Fopt\u002Fdocker-dev-stack\u002Fapp`.\n\n**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`.\n\n**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.",{"type":89,"body":126},"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.",{"type":89,"title":128,"body":129},"La documentation officielle","Pour la configuration avancée, les options propres à l'outil et les changements de version, référez-vous à la \u003Ca href=\"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">documentation officielle de Docker Compose\u003C\u002Fa>. 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.","Lancer mon VPS Cloud","\u002Fvps-cloud",[135,154,176],{"id":136,"slug":137,"slugs":138,"title":142,"excerpt":143,"readTime":144,"views":18,"isPinned":19,"noindex":145,"publishedAt":146,"updatedAt":147,"category":148,"categories":149,"featuredImage":30,"bgImage":31,"posterImage":151,"relatedSolution":152},136,"demarrer-avec-docker-vps",{"fr":137,"en":139,"ar":140,"es":141},"installing-docker-on-a-vps-a-clean-base-for-your-apps","تثبيت-docker-على-vps-قاعدة-نظيفة-لتطبيقاتك","instalar-docker-en-un-vps","Installer Docker sur un VPS : base propre pour vos apps","Préparez un VPS Docker fiable : isolation, Compose, volumes, réseau et bonnes pratiques pour déployer sans bricolage.",3,true,"2026-02-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[150],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdemarrer-avec-docker-vps-poster.svg",{"categorySlug":27,"appSlug":153},"docker-starter",{"id":155,"slug":156,"slugs":157,"title":161,"excerpt":162,"readTime":163,"views":164,"isPinned":19,"noindex":19,"publishedAt":165,"updatedAt":166,"category":167,"categories":171,"featuredImage":30,"bgImage":31,"posterImage":173,"relatedSolution":174},41,"deployer-avec-coolify",{"fr":156,"en":158,"ar":159,"es":160},"deploy-your-applications-with-coolify-on-a-vps","نشر-تطبيقاتك-باستخدام-coolify-على-vps","desplegar-aplicaciones-con-coolify-en-un-vps","Déployer vos applications avec Coolify sur un VPS","Déployer Coolify sur un VPS : installation, configuration HTTPS, connexion Git, première application, bases de données, sauvegardes et dépannage.",12,2,"2026-05-10T00:00:00+00:00","2026-10-31T01:54:10+00:00",{"id":144,"name":168,"slug":169,"color":170,"icon":169},"Déploiement","deploiement","bg-success\u002F10 text-success",[172],{"id":144,"name":168,"slug":169,"color":170,"icon":169},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-coolify-poster.svg",{"categorySlug":169,"appSlug":175},"coolify",{"id":177,"slug":178,"slugs":179,"title":183,"excerpt":184,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":185,"updatedAt":186,"category":187,"categories":188,"featuredImage":30,"bgImage":31,"posterImage":190,"relatedSolution":191},35,"deployer-avec-portainer",{"fr":178,"en":180,"ar":181,"es":182},"deploy-your-applications-with-portainer-on-a-vps","انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps","desplegar-aplicaciones-con-portainer-en-un-vps","Déployer vos applications avec Portainer sur un VPS","Pilotez Docker visuellement avec Portainer sur votre VPS : conteneurs, stacks, volumes et réseaux gérés depuis une interface web claire.","2026-05-16T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":144,"name":168,"slug":169,"color":170,"icon":169},[189],{"id":144,"name":168,"slug":169,"color":170,"icon":169},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-portainer-poster.svg",{"categorySlug":169,"appSlug":192},"portainer",1794270805121]