Añadir compose para producción con Traefik/Portainer

- 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 <noreply@anthropic.com>
This commit is contained in:
2026-03-30 13:15:15 +02:00
parent e337d7bc45
commit cff1746906
2 changed files with 120 additions and 28 deletions
+69 -28
View File
@@ -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
<VirtualHost *:80>
ServerName jailgames.sustancia.synology.me
DocumentRoot /usr/local/apache2/htdocs/jailgames
<Directory /usr/local/apache2/htdocs/jailgames>
Options -Indexes
AllowOverride None
Require all granted
# Rutas limpias (equivalente al try_files de Nginx)
FallbackResource /jailgames/404.html
</Directory>
</VirtualHost>
```
---
## 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
+51
View File
@@ -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