Files
network-documentation/proyectos/novelasvm/README.md

6.5 KiB

NovelasVM — Plataforma Web de Novelas Visuales

Proyecto aliado de Afterlife para ejecutar y probar novelas visuales directamente en el navegador mediante Ren'Py Web (WebAssembly).

IP: 192.168.10.111
URL: http://192.168.10.111
VM: Cisco1 VMID 111
Estado: Running


1. Resumen Ejecutivo

NovelasVM es una máquina virtual dedicada a hospedar una plataforma web desde la cual los usuarios pueden jugar novelas visuales sin instalar nada: los proyectos de Ren'Py se compilan al formato web (HTML5/WebAssembly) y se sirven a través de nginx.

Aspecto Detalle
Propósito Plataforma de distribución y pruebas de novelas visuales en navegador
Motor soportado Ren'Py 8.3.4 (con web package)
Formato de salida WebAssembly + HTML5 (Ren'Py Web)
Web server nginx 1.24.0
Sistema operativo Ubuntu 24.04 LTS
Recursos asignados 8 vCPUs / 16 GB RAM / 150 GB disco

2. Infraestructura

2.1 VM en Proxmox (Cisco1)

Parámetro Valor
VMID 111
Nombre NovelasVM
Nodo Cisco1 (192.168.10.185)
CPU 8 cores
RAM 16 GB
Disco 150 GB (local-lvm)
Red vmbr0 (LAN 192.168.10.0/24)
IP estática 192.168.10.111/24
Gateway 192.168.10.254
DNS 8.8.8.8, 8.8.4.4

2.2 Acceso

Método Comando / URL
SSH root ssh root@192.168.10.111
Password root Aasi940812
SSH app ssh novelas@192.168.10.111
Password app NovelasAAS2024!
Web http://192.168.10.111

Recomendación de seguridad: cambiar ambos passwords en la primera oportunidad.


3. Software Instalado

# Sistema base
apt update && apt upgrade -y

# Stack web y herramientas
nginx
git curl wget unzip build-essential
python3 python3-pip python3-venv
nodejs npm
docker.io docker-compose
ufw htop

# Requerido para compilar Ren'Py sin display físico
xvfb

3.1 Ren'Py SDK + Web Package

Componente Ruta Versión
SDK Ren'Py /opt/novelas/tools/renpy 8.3.4
Web package /opt/novelas/tools/renpy/web 8.3.4
Ejecutable /opt/novelas/tools/renpy/renpy.sh

4. Estructura de Directorios

/opt/novelas/
├── bin/
│   └── build-novela.sh          # Script de build y publicación
├── builds/                      # Builds web generadas (temporales)
├── projects/                    # Proyectos fuente de Ren'Py
├── tools/
│   └── renpy/                   # SDK Ren'Py + web package
└── docs/
    └── README.md                # Documentación local de la VM

/var/www/novelas/
├── index.html                   # Portal principal
└── games/
    └── demo/                    # The Question (demo de Ren'Py)

5. Cómo Agregar una Novela Visual

5.1 Subir el proyecto Ren'Py

Copia el proyecto a /opt/novelas/projects/<nombre-corto>/.
Ejemplo:

scp -r mi-novela/ root@192.168.10.111:/opt/novelas/projects/mi-novela

5.2 Compilar y publicar

ssh root@192.168.10.111
/opt/novelas/bin/build-novela.sh mi-novela /opt/novelas/projects/mi-novela

El script realiza lo siguiente:

  1. Limpia el directorio de build.
  2. Ejecuta renpy.sh launcher web_build dentro de un framebuffer virtual (xvfb-run).
  3. Verifica que se haya generado index.html.
  4. Copia los archivos generados a /var/www/novelas/games/<nombre-corto>/.
  5. Ajusta permisos para www-data.

5.3 Acceder

Abre en el navegador:

http://192.168.10.111/games/mi-novela/

6. Configuración de nginx

/etc/nginx/sites-available/novelas:

server {
    listen 80;
    server_name _;
    root /var/www/novelas;
    index index.html;

    # COOP/COEP requeridos por Ren'Py Web para SharedArrayBuffer
    add_header Cross-Origin-Opener-Policy "same-origin" always;
    add_header Cross-Origin-Embedder-Policy "require-corp" always;

    location / {
        try_files $uri $uri/ =404;
    }

    # Cache agresiva para assets estáticos pesados
    location ~* \.(wasm|data|js|png|jpg|jpeg|gif|ico|svg|opus|ogg|mp3|mp4|webm|zip)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
        add_header Cross-Origin-Opener-Policy "same-origin" always;
        add_header Cross-Origin-Embedder-Policy "require-corp" always;
        try_files $uri =404;
    }

    location ~* \.wasm$ {
        add_header Content-Type "application/wasm";
    }
}

6.1 Validar y recargar

nginx -t
systemctl reload nginx

7. Firewall

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

8. Demo Incluida

Se compiló la novela de demostración The Question que viene con Ren'Py para verificar el pipeline completo.

Demo URL
The Question http://192.168.10.111/games/demo/

9. Comandos Útiles

# Estado de la VM
ssh root@192.168.10.111 "hostname -I; free -h; df -h"

# Reiniciar nginx
ssh root@192.168.10.111 "systemctl restart nginx"

# Ver logs de nginx
ssh root@192.168.10.111 "tail -f /var/log/nginx/novelas-access.log"

# Build manual de un proyecto
ssh root@192.168.10.111
/opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre>

10. Limitaciones y Consideraciones

  • Ren'Py Web no soporta todo: ciertas características avanzadas de Ren'Py pueden no funcionar en navegador. Revisar Ren'Py Web documentation.
  • Archivos grandes: las novelas con muchos assets generan builds pesados. Considerar compresión y progressive download.
  • Seguridad: actualmente la plataforma es pública en la LAN. Si se requiere restringir acceso, implementar autenticación o Tailscale.
  • Proceso de build: web_build ocasionalmente se queda en estado idle tras terminar; el script usa timeout 600 para forzar la finalización una vez generados los archivos.

11. Roadmap / Pendientes

  • Configurar dominio propio (ej. novelas.consultoria-as.com).
  • Habilitar HTTPS con Caddy o certbot.
  • Unir NovelasVM a Tailscale para acceso remoto seguro.
  • Implementar panel de administración para subir novelas vía web.
  • Agregar autenticación de usuarios si las novelas son privadas.
  • Integrar con Afterlife (usuarios, branding, analytics).

Documentación NovelasVM - Consultoria Alcaraz Salazar
Actualizado: 14 de Junio de 2026