162 lines
5.7 KiB
Markdown
162 lines
5.7 KiB
Markdown
# NovelasVM
|
|
|
|
Plataforma web aliada de Afterlife para ejecutar y probar novelas visuales directamente en el navegador. Soporta multiples motores: Ren'Py (WebAssembly), Unity WebGL, proyectos HTML5 personalizados y ONScripter-RU/Umineko Web.
|
|
|
|
## Información general
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| VMID | 111 |
|
|
| Host Proxmox | Cisco1 (192.168.10.185) |
|
|
| IP estática | 192.168.10.111 |
|
|
| Gateway | 192.168.10.254 |
|
|
| DNS | 8.8.8.8, 8.8.4.4 |
|
|
| Recursos | 8 vCPUs, 16 GB RAM, 150 GB disco |
|
|
| SO | Ubuntu 24.04 LTS |
|
|
| Usuario admin | `novelas` |
|
|
| Web | http://192.168.10.111 |
|
|
|
|
## Estructura de directorios
|
|
|
|
```
|
|
/opt/novelas/
|
|
├── bin/
|
|
│ ├── build-novela.sh # Script principal: compila y publica novelas
|
|
│ └── detect-engine.sh # Detecta el motor de un proyecto
|
|
├── builds/ # Builds intermedias generadas
|
|
├── projects/ # Proyectos fuente de novelas
|
|
├── tools/
|
|
│ └── renpy/ # Ren'Py SDK 8.3.4 + web package
|
|
├── config/
|
|
│ └── nginx-snippet.template# Plantilla para snippets nginx
|
|
├── templates/
|
|
│ └── portal/ # Plantillas del portal web (NO USADAS EN RUNTIME)
|
|
└── docs/
|
|
├── README.md # Esta documentación
|
|
└── DESIGN.md # Sistema de diseño del portal
|
|
|
|
/var/www/novelas/ # Raíz servida por nginx
|
|
├── index.html # Portal principal
|
|
├── assets/ # CSS, JS e iconos del portal
|
|
│ ├── styles.css
|
|
│ ├── app.js
|
|
│ └── icons/
|
|
├── games.json # Catálogo global de juegos
|
|
└── games/
|
|
├── demo/ # The Question (Ren'Py)
|
|
├── web-demo/ # Ejemplo HTML5
|
|
├── unity-demo/ # Ejemplo Unity WebGL
|
|
└── umineko/ # Solo cover.jpg; juego en contenedor Docker
|
|
|
|
/etc/nginx/snippets/novelas-games/
|
|
└── *.conf # Headers COOP/COEP por juego Ren'Py
|
|
```
|
|
|
|
## Motores soportados
|
|
|
|
| Motor | Detección automática | Compilación | Headers COOP/COEP |
|
|
|-------|---------------------|-------------|-------------------|
|
|
| Ren'Py | `project.json` o `game/script.rpy` | Si, via `renpy.sh launcher web_build` | Si |
|
|
| Unity WebGL | `Build/`, `TemplateData/` e `index.html` | No, copia directa | No |
|
|
| Web genérico | `index.html` | No, copia directa | No |
|
|
| ONScripter estándar | `0.txt`, `nscript.dat`, `ons.cfg` | Copia + OnscripterYuri web | No |
|
|
| ONScripter-RU / Umineko | `*.file` + `default.cfg` | Contenedor Docker `umineko_web_asm` | No |
|
|
|
|
## Cómo agregar una novela visual
|
|
|
|
1. Coloca el proyecto en `/opt/novelas/projects/<nombre>`.
|
|
2. (Opcional) Añade un archivo `meta.json` en la raíz del proyecto:
|
|
```json
|
|
{
|
|
"title": "Mi Novela",
|
|
"subtitle": "Subtítulo opcional",
|
|
"description": "Breve descripción de la novela.",
|
|
"author": "Tu nombre",
|
|
"version": "1.0",
|
|
"cover": "/games/mi-novela/cover.jpg"
|
|
}
|
|
```
|
|
3. Ejecuta como root o con sudo:
|
|
```bash
|
|
/opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre>
|
|
```
|
|
También puedes forzar el motor:
|
|
```bash
|
|
/opt/novelas/bin/build-novela.sh <nombre> /opt/novelas/projects/<nombre> renpy
|
|
```
|
|
4. La novela quedará disponible en `http://192.168.10.111/games/<nombre>/`.
|
|
|
|
## Umineko no Naku Koro ni (ONScripter-RU Web)
|
|
|
|
Umineko utiliza el motor ONScripter-RU compilado a WebAssembly mediante el proyecto `umineko_web_asm`. Se sirve desde un contenedor Docker dedicado y se accede a traves de una redireccion en nginx.
|
|
|
|
### Estructura
|
|
|
|
```
|
|
/opt/novelas/tools/umineko-web-asm/ # Fuente del contenedor
|
|
├── run-umineko-web.sh # Script para levantar/actualizar
|
|
├── docker-compose.yml
|
|
└── ...
|
|
|
|
/opt/novelas/projects/umineko/ # Archivos del juego
|
|
/var/www/novelas/games/umineko/cover.jpg # Portada para el portal
|
|
```
|
|
|
|
### URL
|
|
|
|
- Portal: `http://192.168.10.111/games/umineko/` (redirige al contenedor)
|
|
- Directa: `http://192.168.10.111:8081/`
|
|
|
|
### Gestión del contenedor
|
|
|
|
```bash
|
|
# Levantar o recrear
|
|
cd /opt/novelas/tools/umineko-web-asm
|
|
./run-umineko-web.sh
|
|
|
|
# Detener
|
|
docker-compose down
|
|
|
|
# Estado
|
|
docker ps
|
|
docker logs -f umineko-web-asm_umineko-web_1
|
|
```
|
|
|
|
### Modos de hosting
|
|
|
|
Edita `run-umineko-web.sh` para cambiar `HOSTING_MODE`:
|
|
|
|
- `local` (actual): sirve los archivos originales. Inicio rapido.
|
|
- `production`: convierte PNG→WebP, MP4→WebM, etc. Tarda en iniciar la primera vez.
|
|
- `remote`: el usuario sube sus propios archivos desde el navegador.
|
|
|
|
## Portal web
|
|
|
|
El portal principal (`http://192.168.10.111/`) muestra el catálogo de novelas disponibles con:
|
|
- Diseño moderno y responsive.
|
|
- Selector de temas: oscuro, claro e inmersivo.
|
|
- Tarjetas con portada, metadatos y badge del motor.
|
|
- Carga dinámica desde `/games.json`.
|
|
|
|
La preferencia de tema se guarda en `localStorage` del navegador.
|
|
|
|
## Servicios instalados
|
|
|
|
- nginx (puerto 80)
|
|
- ufw (firewall: 22, 80, 443)
|
|
- docker + docker-compose
|
|
- nodejs + npm
|
|
- python3 + pip
|
|
- xvfb (para compilar Ren'Py Web sin display)
|
|
|
|
## Diseño
|
|
|
|
El sistema de diseño del portal está documentado en `/opt/novelas/docs/DESIGN.md`. Se inspiró en los design systems de [designmd.ai](https://designmd.ai) y define tokens para los tres temas visuales.
|
|
|
|
## Notas de seguridad
|
|
|
|
- Cambiar el password de root y del usuario `novelas` si aun no se ha hecho.
|
|
- Considerar habilitar HTTPS con Caddy o certbot.
|
|
- Evaluar autenticación si las novelas son privadas.
|
|
- Los headers `Cross-Origin-Opener-Policy` y `Cross-Origin-Embedder-Policy` solo se aplican a juegos Ren'Py, ya que son los unicos que requieren `SharedArrayBuffer`. Unity WebGL y juegos web genericos no los necesitan y podrian romperse con ellos.
|