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:
@@ -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
|
```bash
|
||||||
docker compose up --build -d
|
docker compose up --build -d
|
||||||
@@ -93,33 +161,6 @@ docker compose up --build -d
|
|||||||
|
|
||||||
Acceder en [http://localhost](http://localhost).
|
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
|
## Estructura de carpetas
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user