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

250 lines
6.5 KiB
Markdown

# 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/<nombre-corto>/`.
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/<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`:
```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 <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](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*