From cff1746906aa9f1d6838c00e06d894578bb689e0 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 30 Mar 2026 13:15:15 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adir=20compose=20para=20producci=C3=B3n?= =?UTF-8?q?=20con=20Traefik/Portainer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker-compose.portainer.yml: Nginx alpine con labels Traefik, volúmenes en /var/volumes/web_jailgames/, red web externa - README: flujo de despliegue online (rsync + Portainer), alternativa Apache VirtualHost Co-Authored-By: Claude Sonnet 4.6 --- README.md | 97 +++++++++++++++++++++++++----------- docker-compose.portainer.yml | 51 +++++++++++++++++++ 2 files changed, 120 insertions(+), 28 deletions(-) create mode 100644 docker-compose.portainer.yml diff --git a/README.md b/README.md index d44385c..d572d9a 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,75 @@ npm run clean --- -## Despliegue con Docker +## Despliegue en producción (servidor con Traefik + Portainer) + +Usa `docker-compose.portainer.yml`. El flujo de trabajo es: + +**1. Preparar el servidor (primera vez):** +```bash +# En el servidor, crear la estructura de volúmenes +mkdir -p /var/volumes/web_jailgames/html +mkdir -p /var/volumes/web_jailgames/nginx + +# Copiar la configuración de Nginx +cp nginx.conf /var/volumes/web_jailgames/nginx/default.conf +``` + +**2. Build y subida del sitio (cada actualización):** +```bash +# En tu máquina de desarrollo +npm run build + +# Subir _site/ al servidor (ajusta usuario e IP) +rsync -avz --delete _site/ usuario@servidor:/var/volumes/web_jailgames/html/ + +# Subir descargas (binarios de juegos) +rsync -avz downloads/ usuario@servidor:/var/volumes/web_jailgames/html/downloads/ +``` + +**3. Desplegar en Portainer:** +- En Portainer → Stacks → Add stack +- Pegar el contenido de `docker-compose.portainer.yml` +- Ajustar el dominio en las labels de Traefik si es necesario +- Deploy + +El sitio quedará disponible en `https://jailgames.sustancia.synology.me`. + +--- + +## Alternativa: dentro de Apache existente + +Si prefieres añadirlo como un VirtualHost más en tu Apache actual, solo necesitas copiar `_site/` al directorio del servidor y configurar el VirtualHost. No hace falta contenedor extra. + +```bash +# Build local +npm run build + +# Copiar al volumen de Apache (ajusta la ruta) +rsync -avz --delete _site/ usuario@servidor:/var/volumes/apache/html/jailgames/ +rsync -avz downloads/ usuario@servidor:/var/volumes/apache/html/jailgames/downloads/ +``` + +Luego añade en Apache: +```apache + + ServerName jailgames.sustancia.synology.me + DocumentRoot /usr/local/apache2/htdocs/jailgames + + + Options -Indexes + AllowOverride None + Require all granted + + # Rutas limpias (equivalente al try_files de Nginx) + FallbackResource /jailgames/404.html + + +``` + +--- + +## Despliegue local (desarrollo) ```bash docker compose up --build -d @@ -93,33 +161,6 @@ docker compose up --build -d Acceder en [http://localhost](http://localhost). -Para detener: -```bash -docker compose down -``` - ---- - -## Despliegue sin internet (ferias) - -**En la máquina con internet:** -```bash -docker compose build -docker save jailgames-web:latest | gzip > jailgames-image.tar.gz -``` - -**Copiar** `jailgames-image.tar.gz` al portátil de la feria (USB). - -**En el portátil de la feria (sin internet):** -```bash -gunzip -c jailgames-image.tar.gz | docker load -docker run -d -p 80:80 \ - -v /ruta/local/downloads:/usr/share/nginx/html/downloads:ro \ - --name jailgames jailgames-web:latest -``` - -Abrir [http://localhost](http://localhost) en cualquier navegador. - --- ## Estructura de carpetas diff --git a/docker-compose.portainer.yml b/docker-compose.portainer.yml new file mode 100644 index 0000000..cbb7fcb --- /dev/null +++ b/docker-compose.portainer.yml @@ -0,0 +1,51 @@ +services: + jailgames: + container_name: jailgames + hostname: jailgames + image: nginx:alpine + + volumes: + - jailgames-html:/usr/share/nginx/html:ro + - jailgames-nginx:/etc/nginx/conf.d:ro + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + + networks: + - web + + labels: + - traefik.enable=true + - traefik.docker.network=web + - traefik.http.routers.jailgames.rule=Host(`jailgames.sustancia.synology.me`) + - traefik.http.routers.jailgames.tls=true + - traefik.http.routers.jailgames.tls.certresolver=letsencrypt + - traefik.http.services.jailgames.loadbalancer.server.scheme=http + - traefik.http.services.jailgames.loadbalancer.server.port=80 + + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost/"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s + + restart: unless-stopped + +volumes: + jailgames-html: + driver: local + driver_opts: + o: bind + type: none + device: /var/volumes/web_jailgames/html + + jailgames-nginx: + driver: local + driver_opts: + o: bind + type: none + device: /var/volumes/web_jailgames/nginx + +networks: + web: + external: true