# 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 ```bash # 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//`. Ejemplo: ```bash scp -r mi-novela/ root@192.168.10.111:/opt/novelas/projects/mi-novela ``` ### 5.2 Compilar y publicar ```bash 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//`. 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`: ```nginx 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 ```bash nginx -t systemctl reload nginx ``` --- ## 7. Firewall ```bash 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 ```bash # 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 /opt/novelas/projects/ ``` --- ## 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](https://www.renpy.org/doc/html/web.html). - **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*