250 lines
6.5 KiB
Markdown
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*
|