Files
JailDesigner cff1746906 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>
2026-03-30 13:15:15 +02:00

4.7 KiB

JAILGAMES

Sitio web estático para publicar y descargar juegos indie del estudio JAILGAMES. Generado con Eleventy (11ty) y servido con Nginx en Docker.


Requisitos previos

  • Node.js 18+ (para el build local)
  • Docker + Docker Compose (para despliegue)

Instalación

npm ci

Desarrollo local

npm run serve

Abre http://localhost:8080 en el navegador. Eleventy reconstruye automáticamente al guardar cambios.


Build estático

npm run build

El resultado queda en _site/. Para limpiar:

npm run clean

Añadir un juego nuevo

  1. Crear el archivo YAML del juego:

    src/games/<slug>.yaml
    

    Copiar de un juego existente y modificar los campos. El slug es el identificador URL (solo letras minúsculas, números y guiones).

  2. Crear la carpeta de imágenes:

    static/games/<slug>/
    

    Copiar: logo.png (o .svg), screenshot-1.png, screenshot-2.png, ...

  3. Crear la carpeta de descargas:

    downloads/<slug>/
    

    Copiar los binarios: <slug>-v<version>-<plataforma>.<ext>

  4. Verificar que las rutas en el YAML coinciden exactamente con los archivos copiados.

  5. Regenerar el sitio:

    npm run build
    
  6. Verificar localmente:

    npm run serve
    

    Abrir http://localhost:8080 y comprobar el juego nuevo.

  7. Reconstruir el contenedor Docker:

    docker compose up --build -d
    

Despliegue en producción (servidor con Traefik + Portainer)

Usa docker-compose.portainer.yml. El flujo de trabajo es:

1. Preparar el servidor (primera vez):

# 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):

# 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.

# 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:

<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)

docker compose up --build -d

Acceder en http://localhost.


Estructura de carpetas

jailgames/
├── src/
│   ├── _data/site.json        # Datos globales del sitio
│   ├── _includes/
│   │   ├── base.njk           # Layout base HTML
│   │   ├── game-card.njk      # Tarjeta de juego (home)
│   │   └── game-page.njk      # Ficha individual de juego
│   ├── games/                 # Un archivo YAML por juego
│   ├── css/style.css          # Estilos globales
│   ├── js/main.js             # JS mínimo (lightbox)
│   ├── index.njk              # Página principal
│   ├── game.njk               # Generador de fichas individuales
│   └── 404.njk                # Página de error 404
├── static/
│   ├── logo/                  # Logo del sitio
│   └── games/<slug>/          # Imágenes de cada juego
├── downloads/<slug>/          # Binarios descargables
├── _site/                     # Build generado (no versionar)
├── .eleventy.js               # Configuración de Eleventy
├── package.json
├── Dockerfile
├── docker-compose.yml
└── nginx.conf