[{"data":1,"prerenderedAt":194},["ShallowReactive",2],{"seo-verification":3,"blog-stack-dev-docker-en-vps-ma-es":6,"promo-bar-likely":145},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-stack-dev-docker-en-vps-ma-es",{"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-en-vps",{"fr":12,"en":13,"ar":14,"es":10},"stack-dev-docker-vps","docker-dev-stack-on-a-vps-an-environment-ready-for-coding","حزمة-تطوير-docker-على-خادم-vps-بيئة-جاهزة-للبرمجة","Stack Dev Docker en VPS: entorno listo para programar","Monte un stack dev Docker completo en un VPS: Nginx, PHP-FPM, PostgreSQL, Redis, Mailpit, Adminer — docker-compose.yml detallado, SSH tunneling, resolución de errores.",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,"Desarrollo","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","Un entorno de desarrollo remoto evita saturar el equipo local y ofrece una IP estable para los webhooks, las demostraciones y las pruebas de integración. En un VPS ServOrbit, Docker Compose se convierte en un taller completo: Nginx, PHP-FPM o Node, PostgreSQL, Redis, Mailpit y Adminer trabajan juntos en contenedores aislados, persistentes y accesibles por SSH desde cualquier estación de trabajo. Esta guía detalla la composición del stack, la configuración de los servicios y las buenas prácticas para el trabajo en equipo sin conflictos.",[37,41,51,54,57,79,82,85,88,92,122,125,127],{"type":38,"title":39,"body":40},"h2","¿Por qué alojar un Stack Dev Docker en un VPS?","Un entorno de desarrollo local funciona, pero sigue ligado a una sola máquina: cambiar de equipo, incorporar a un nuevo colaborador o acceder desde otro país se convierten en fricciones. Al centralizar su stack Docker en un VPS, dispone de un servidor de desarrollo compartido, siempre encendido, accesible por SSH o desde el navegador esté donde esté. También gana en reproducibilidad: cada servicio se define en un archivo `docker-compose.yml`, lo que elimina el famoso problema de «en mi máquina funciona».",{"type":42,"title":43,"items":44},"ul","Lo que puede hacer con un Stack Dev Docker",[45,46,47,48,49,50],"Lanzar simultáneamente varios servicios (Nginx, MySQL, Redis, PHP-FPM, Node.js) en contenedores aislados sin conflictos de puertos ni de versiones","Compartir un entorno de desarrollo idéntico entre todos los miembros de un equipo gracias al archivo docker-compose.yml versionado en Git","Probar migraciones de base de datos o actualizaciones de dependencias en un contenedor efímero sin arriesgar el entorno principal","Alojar un servidor CI\u002FCD ligero (Gitea, Drone CI) directamente en el mismo VPS para automatizar sus despliegues internos","Acceder a sus servicios de desarrollo mediante subdominios o reverse proxies Traefik\u002FNginx sin abrir puertos innecesarios","Hacer copias de seguridad y restaurar todo su stack con unos pocos comandos gracias a los volúmenes Docker y a los snapshots del VPS",{"type":38,"title":52,"body":53},"Requisitos previos: configuración mínima recomendada","Un stack completo con PostgreSQL, Redis, Nginx y una aplicación consume en la práctica **4 GB de RAM** como mínimo — por debajo, el OOM killer de Docker interrumpe PostgreSQL o Redis en mitad de una migración sin ningún mensaje de error a nivel de aplicación. El VPS debe funcionar con **Ubuntu 22.04 LTS** o Debian 12, con **Docker Engine 26+** y **Docker Compose v2.22+** instalados (el comando se escribe `docker compose`, sin guión). Verifique la versión con `docker compose version`: la funcionalidad `watch` usada más adelante requiere v2.22 como mínimo, lanzada en septiembre de 2023.",{"type":38,"title":55,"body":56},"Componentes del stack: el papel de cada servicio","El stack de referencia de ServOrbit reúne seis servicios complementarios.\n\n**Nginx** actúa como reverse proxy frontal: recibe las peticiones HTTP en el puerto 80 y las enruta hacia PHP-FPM (vía FastCGI) o hacia un servidor Node.js. La configuración `nginx\u002Fdefault.conf` se monta como volumen para poder editarse sin reconstruir la imagen.\n\n**PHP-FPM 8.3** (o Node.js 22 según el perfil del stack) ejecuta el código de la aplicación. Ambas variantes están disponibles en el Marketplace de ServOrbit; el `docker-compose.yml` incluye los dos servicios — desactive el que no necesite con `profiles`.\n\n**PostgreSQL 16** almacena los datos persistentes. El puerto 5432 no está expuesto en el host por defecto — solo la red interna de Docker `dev_net` tiene acceso, lo que evita cualquier exposición accidental en la IP pública del VPS.\n\n**Redis 7** actúa como caché y broker de mensajes. Como PostgreSQL, permanece en la red interna (puerto 6379) y es accesible desde el código de la aplicación mediante el nombre de servicio `redis`.\n\n**Mailpit 1.x** sustituye a un servidor SMTP real en desarrollo: captura todos los correos salientes y los expone en una interfaz web en el puerto 8025. No se requiere ninguna configuración SMTP especial en el lado de la aplicación — simplemente apunte a `mailpit:1025`.\n\n**Adminer** (puerto 8080) ofrece una interfaz web ligera para gestionar PostgreSQL o MySQL sin un cliente pesado. Solo es accesible desde la propia máquina o mediante un SSH tunnel.",{"type":58,"title":59,"steps":60},"steps","Instalar un Stack Dev Docker en su VPS ServOrbit",[61,64,67,70,73,76],{"title":62,"body":63},"Contratar un VPS Cloud ServOrbit","Vaya a la página \u002Fvps-cloud y elija un plan adaptado a su uso. Para un stack de desarrollo estándar (unos cuantos contenedores, base de datos, reverse proxy), un VPS con 2 vCPU y 4 GB de RAM constituye un buen punto de partida. Finalice el pedido: su VPS se aprovisiona en menos de 60 segundos con Ubuntu 22.04 LTS.",{"title":65,"body":66},"Acceder al Marketplace en su área de cliente","Inicie sesión en su área de cliente ServOrbit y abra la sección «Marketplace» desde el panel de control de su VPS. El Marketplace enumera todas las aplicaciones disponibles con instalación en 1 clic, organizadas por categoría. Seleccione la categoría «Desarrollo» para filtrar los stacks orientados a desarrollo.",{"title":68,"body":69},"Iniciar la instalación del Stack Dev Docker","Haga clic en la tarjeta «Stack Dev Docker» y después en el botón «Instalar». La automatización despliega Docker Engine, Docker Compose y un archivo docker-compose.yml preconfigurado con los servicios esenciales (Nginx, PHP-FPM, PostgreSQL 16, Redis, Mailpit para las pruebas de correo, Adminer). La instalación completa suele tardar entre 2 y 4 minutos según el tamaño del VPS.",{"title":71,"body":72},"Obtener sus credenciales y acceder a la interfaz","Una vez finalizada la instalación, el área de cliente muestra la información de conexión generada automáticamente: dirección IP del VPS, contraseña de PostgreSQL y la URL de acceso a Mailpit (por defecto en el puerto 8025). Conéctese por SSH con `ssh root@\u003CIP_VPS>` para comprobar el estado de los contenedores con `docker compose ps` en el directorio `\u002Fopt\u002Fdocker-dev-stack`.",{"title":74,"body":75},"Configurar su primer proyecto y personalizar el stack","Copie su código fuente en `\u002Fopt\u002Fdocker-dev-stack\u002Fapp\u002F` o modifique el archivo `\u002Fopt\u002Fdocker-dev-stack\u002Fdocker-compose.yml` para añadir o quitar servicios según sus necesidades. Vuelva a lanzar el stack con `docker compose up -d` para aplicar los cambios. Para exponer sus servicios en un nombre de dominio, configure un registro DNS que apunte a la IP de su VPS y adapte la configuración de Nginx incluida en el directorio `\u002Fopt\u002Fdocker-dev-stack\u002Fnginx\u002F`.",{"title":77,"body":78},"Conectarse por primera vez","No hay ninguna cuenta que crear: la URL abre directamente el buzón de correo de prueba Mailpit, sin contraseña. PostgreSQL (5432) y Redis (6379) solo son accesibles desde la propia máquina; las credenciales de Postgres están en \u002Fopt\u002Fdocker-dev-stack\u002F.env.",{"type":38,"title":80,"body":81},"Configuración de los servicios: volúmenes, redes y variables de entorno","El `docker-compose.yml` del stack declara tres volúmenes con nombre — `postgres_data`, `redis_data` y `app_data` — montados respectivamente en `\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata`, `\u002Fdata` y `\u002Fvar\u002Fwww\u002Fhtml`. Estos volúmenes sobreviven a un `docker compose down`: los datos de la base y los archivos subidos permanecen intactos entre reinicios.\n\nTodos los servicios comparten la red interna `dev_net` de tipo bridge. Nginx es el único servicio que expone un puerto en el host (80); los demás permanecen aislados y se comunican por nombre de servicio — `postgres`, `redis`, `mailpit`.\n\nLas variables sensibles (contraseña de PostgreSQL, clave secreta de la aplicación) nunca se escriben directamente en `docker-compose.yml`. Se leen desde `\u002Fopt\u002Fdocker-dev-stack\u002F.env` mediante la directiva `env_file`. Este archivo está excluido del repositorio Git mediante `.gitignore`. Las variables de entorno no sensibles (puerto, versión de PHP, nombre de la base) pueden aparecer directamente en el archivo Compose bajo la clave `environment`, para que sean visibles al revisar el código.",{"type":38,"title":83,"body":84},"Acceso desde el portátil: SSH tunneling y reverse proxy","PostgreSQL, Adminer y Redis no están expuestos en la IP pública del VPS. Para acceder a ellos desde su equipo local, abra un SSH tunnel: `ssh -L 5432:localhost:5432 -L 8080:localhost:8080 root@\u003CIP_VPS>` crea dos reenvíos locales — el puerto 5432 de su portátil apunta a PostgreSQL y el 8080 a Adminer. Su cliente SQL habitual se conecta entonces en `localhost:5432` como si la base de datos estuviera funcionando en local.\n\nPara los servicios HTTP (Nginx, Mailpit), hay dos opciones. Si dispone de un nombre de dominio, configure un registro `A` que apunte a la IP del VPS y ajuste Nginx para servir `dev.yourdomain.com` en HTTP plano (sin TLS, ya que es un entorno de desarrollo). Si trabaja sin dominio, el SSH tunnel es suficiente: `ssh -L 8025:localhost:8025 root@\u003CIP_VPS>` da acceso a Mailpit en `localhost:8025`.",{"type":38,"title":86,"body":87},"Buenas prácticas: desarrollo frente a producción","En desarrollo, el archivo `.env` centraliza todos los secretos. En producción, los secretos de Docker (`docker secret`) o un gestor de secretos externo (Vault, AWS Secrets Manager) sustituyen al archivo plano — un `.env` versionado por accidente expone credenciales en el historial de Git.\n\nLos límites de recursos (`deploy.resources.limits`) merecen configurarse desde el desarrollo: PostgreSQL puede consumir toda la RAM disponible si una consulta se desvía. Comience con `memory: 512m` en PostgreSQL, `memory: 256m` en Redis y `memory: 256m` en PHP-FPM, y ajuste según los perfiles de uso reales.\n\nNunca monte el socket de Docker (`\u002Fvar\u002Frun\u002Fdocker.sock`) en un contenedor de aplicación salvo que sea estrictamente necesario: un contenedor con acceso al socket puede lanzar otros contenedores con privilegios de root en el host. En desarrollo el riesgo es limitado, pero los hábitos adquiridos aquí suelen reproducirse en producción.",{"type":89,"title":90,"body":91},"tip","Recarga en caliente con docker compose watch","Docker Compose v2.22+ incorpora `docker compose watch`, disponible desde septiembre de 2023. Actívelo añadiendo un bloque `develop.watch` en el servicio `app` de su `docker-compose.yml`: especifique los directorios a vigilar y la acción asociada (`sync` para copiar archivos al contenedor sin reiniciarlo, `rebuild` para reconstruir la imagen). Luego ejecute `docker compose watch` en lugar de `docker compose up -d`: los cambios de archivos se propagan en tiempo real al contenedor, sin reinicios manuales. Compruebe su versión previamente con `docker compose version`.",{"type":93,"title":94,"headers":95,"rows":100},"comparison","Variantes de stack según el tipo de proyecto",[96,97,98,99],"Stack","Servicios principales","Caso de uso","RAM recomendada",[101,106,110,114,118],[102,103,104,105],"LAMP","Nginx + PHP-FPM 8.3, MariaDB 10.11, Redis","WordPress, OctoberCMS, Laravel","4 GB",[107,108,109,105],"MERN","Node.js 22, MongoDB 7, Redis","REST API + React\u002FVue SPA",[111,112,113,105],"Django \u002F PostgreSQL","Python 3.12, PostgreSQL 16, Redis, Celery","Apps Python, ML, Django REST API",[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},"Resolución de problemas: 4 errores frecuentes","**Puerto ya en uso.** El error `Bind for 0.0.0.0:80 failed: port is already allocated` indica que un servicio del host (Apache, nginx del sistema) ya está escuchando en el puerto 80. Detenga el servicio del sistema (`systemctl stop nginx` o `systemctl stop apache2`) o cambie el puerto del host en `docker-compose.yml` (`\"8080:80\"`) y acceda al stack en el puerto 8080.\n\n**Permisos de volumen.** El error `Permission denied` en un volumen montado suele deberse a un uid\u002Fgid del contenedor diferente al del host. Añada `user: \"1000:1000\"` en el servicio afectado, o cambie los permisos del directorio del host con `chown -R 1000:1000 \u002Fopt\u002Fdocker-dev-stack\u002Fapp`.\n\n**Red bridge no encontrada.** El mensaje `network dev_net declared as external, but could not be found` aparece si usa `external: true` en una red aún no creada. Elimine `external: true`: Docker Compose crea la red automáticamente en el primer `docker compose up`.\n\n**RAM insuficiente.** PostgreSQL muestra `FATAL: out of memory` o se reinicia en bucle si el VPS está subdimensionado. Compruebe con `free -m`: deben estar disponibles al menos 4 GB para el stack completo. Reduzca `shared_buffers` en la configuración de PostgreSQL (`command: postgres -c shared_buffers=128MB`) o pase a un plan VPS superior.",{"type":89,"body":126},"Consejo pro: tome un snapshot bajo demanda de su VPS ServOrbit desde el área de cliente antes de modificar a fondo la configuración de Docker. Un snapshot le permite volver a un estado estable en un clic si una actualización de contenedor o un cambio en el archivo Compose rompe su entorno. Piense también en utilizar un archivo `.env` para almacenar sus variables sensibles (contraseñas, claves API) y en excluirlo de su repositorio Git mediante `.gitignore`: incluso en un servidor de desarrollo, es un buen hábito que conviene adquirir desde el principio.",{"type":89,"title":128,"body":129},"La documentación oficial","Para la configuración avanzada, las opciones propias de la herramienta y los cambios de versión, consulte la \u003Ca href=\"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">documentación oficial de Docker Compose\u003C\u002Fa>. Esta guía cubre la puesta en línea en un VPS ServOrbit; la documentación del editor sigue siendo la referencia para los ajustes finos.","Despliegue un Stack Dev Docker en pocos minutos en un VPS Cloud ServOrbit","Disfrute de un VPS Cloud con instalación en 1 clic de su entorno Docker, soporte incluido y una modalidad mensual sin compromiso.","Lanzar mi VPS Cloud","\u002Fvps-cloud",[135,154,177],{"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,"instalar-docker-en-un-vps",{"fr":139,"en":140,"ar":141,"es":137},"demarrer-avec-docker-vps","installing-docker-on-a-vps-a-clean-base-for-your-apps","تثبيت-docker-على-vps-قاعدة-نظيفة-لتطبيقاتك","Instalar Docker en un VPS: una base limpia para sus apps","Prepare un VPS Docker fiable: aislamiento, Compose, volúmenes, red y buenas prácticas para desplegar sin improvisar.",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,"desplegar-aplicaciones-con-coolify-en-un-vps",{"fr":158,"en":159,"ar":160,"es":156},"deployer-avec-coolify","deploy-your-applications-with-coolify-on-a-vps","نشر-تطبيقاتك-باستخدام-coolify-على-vps","Desplegar sus aplicaciones con Coolify en un VPS","Despliegue Coolify en un VPS: instalación, configuración HTTPS, conexión Git, primera aplicación, bases de datos, copias de seguridad y diagnóstico.",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},"Despliegue","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":175,"appSlug":176},"despliegue-de-aplicaciones-devops","coolify",{"id":178,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":186,"updatedAt":187,"category":188,"categories":189,"featuredImage":30,"bgImage":31,"posterImage":191,"relatedSolution":192},35,"desplegar-aplicaciones-con-portainer-en-un-vps",{"fr":181,"en":182,"ar":183,"es":179},"deployer-avec-portainer","deploy-your-applications-with-portainer-on-a-vps","انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps","Desplegar sus aplicaciones con Portainer en un VPS","Pilote Docker visualmente con Portainer en su VPS: contenedores, stacks, volúmenes y redes gestionados desde una interfaz web clara.","2026-05-16T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":144,"name":168,"slug":169,"color":170,"icon":169},[190],{"id":144,"name":168,"slug":169,"color":170,"icon":169},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-portainer-poster.svg",{"categorySlug":175,"appSlug":193},"portainer",1794270660125]