diff --git a/proyectos/afterlife/README.md b/proyectos/afterlife/README.md index fd44cc0..4d489d9 100644 --- a/proyectos/afterlife/README.md +++ b/proyectos/afterlife/README.md @@ -15,6 +15,12 @@ | CMS (Backend) | 1337 | Strapi | http://192.168.10.84:1337 (local) | | Storage | 9001 | MinIO | http://192.168.10.84:9001 (local) | +## Proyectos Aliados + +| Proyecto | VM | IP | Función | URL | +|---|---|---|---|---| +| **NovelasVM** | Cisco1 VM 111 | 192.168.10.111 | Plataforma web para ejecutar novelas visuales en navegador (Ren'Py Web / WebAssembly) | http://192.168.10.111 | + ## Stack - **Frontend**: Next.js (React) diff --git a/proyectos/novelasvm/README.md b/proyectos/novelasvm/README.md new file mode 100644 index 0000000..6c229c4 --- /dev/null +++ b/proyectos/novelasvm/README.md @@ -0,0 +1,249 @@ +# 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*