Files
project-afterlife/docs/architecture-vms.md
consultoria-as 449c02eadc
Some checks failed
Deploy Multi-VM / Deploy VM Web (push) Has been cancelled
Deploy Multi-VM / Deploy VM Auth (push) Has been cancelled
Deploy Multi-VM / Deploy Game Servers (docker-compose.fusionfall.yml, VM_FUSIONFALL_HOST, VM_FUSIONFALL_SSH_KEY, VM_FUSIONFALL_USER, fusionfall) (push) Has been cancelled
Deploy Multi-VM / Deploy Game Servers (docker-compose.maple2.yml, VM_MAPLE2_HOST, VM_MAPLE2_SSH_KEY, VM_MAPLE2_USER, maple2) (push) Has been cancelled
Deploy Multi-VM / Deploy Game Servers (docker-compose.minecraft.yml, VM_MINECRAFT_HOST, VM_MINECRAFT_SSH_KEY, VM_MINECRAFT_USER, minecraft) (push) Has been cancelled
Deploy Multi-VM / Deploy Game Servers (docker-compose.retro.yml, VM_RETRO_HOST, VM_RETRO_SSH_KEY, VM_RETRO_USER, retro) (push) Has been cancelled
feat: phase 3 redesign, game images, auth system, vm guides, service isolation
- Redesign all internal pages to warm/gold aesthetic (catalog, game detail,
  documentary, about, donate, community, guides, contact, server-status,
  login, profile, admin, not-found)
- Add real cover images for all 4 games via Strapi CMS with getImageUrl helper
- Integrate NextAuth v5 with Authentik OIDC authentication
- Add new public pages: community, guides, contact, server-status
- Add new protected pages: login, profile, admin dashboard
- Remove legacy AFC/MercadoPago system entirely
- Add Docker Compose split files for service isolation (main, auth, fusionfall, nier)
- Add OpenFusion VM deployment configs (config.vm.ini, systemd service, README-VM)
- Add NieR Reincarnation server guide and desktop client guide
- Add architecture docs for multi-VM deployment
- Add healthcheck, SSE, contact, newsletter, admin API routes
- Add reusable UI components, skeleton loaders, activity feed, bookmark system
- Update deployment and game server documentation
2026-04-28 05:15:38 +00:00

8.2 KiB

Arquitectura Multi-VM - Project Afterlife

Visión General

Este documento describe la arquitectura distribuida de Project Afterlife, donde cada componente principal corre en su propia VM (máquina virtual) dedicada para maximizar aislamiento, control y escalabilidad.

                                    INTERNET
                                       │
                    ┌──────────────────┼──────────────────┐
                    │                  │                  │
              ┌─────▼─────┐      ┌─────▼─────┐     ┌─────▼─────┐
              │  vm-web   │      │ vm-games  │     │ vm-games  │
              │  :80/443  │      │  :ports   │     │  :ports   │
              └─────┬─────┘      └───────────┘     └───────────┘
                    │
     ┌──────────────┼──────────────┐
     │              │              │
┌────▼─────┐  ┌─────▼─────┐  ┌────▼─────┐
│ vm-auth  │  │ vm-games  │  │ vm-games │
│:9000     │  │  :ports   │  │ :ports   │
└──────────┘  └───────────┘  └──────────┘

RED PRIVADA: 10.0.0.0/24

VMs y Sus Roles

VM IP Privada Puertos Públicos Servicios RAM Est.
vm-web 10.0.0.10 80, 443 Next.js, Strapi CMS, PostgreSQL, MinIO, Nginx, Certbot ~1 GB
vm-auth 10.0.0.20 9000 (vía proxy) Authentik (SSO), PostgreSQL, Redis ~1 GB
vm-nier 10.0.0.70 80, 443 NieR Reincarnation (MariesWonderland .NET 10) ~1 GB
vm-dbo 10.0.0.80 22000-22010 Dragon Ball Online (DBO Global C++) ~2 GB
vm-maple2 10.0.0.40 20001, 21001, 20003, 21003, 4000 MapleStory 2 (MySQL, World, Login, Game, Web) ~2 GB
vm-fusionfall 10.0.0.30 23000, 23001 OpenFusion Server ~512 MB

Soft Launch: NieR Reincarnation, Dragon Ball Online, MapleStory 2, FusionFall

Total RAM estimada (soft launch): ~7.5 GB


Red y Seguridad

LAN Privada

Todas las VMs se comunican entre sí a través de una red privada dedicada (10.0.0.0/24). Esto permite:

  • La web puede consultar el estado de los servidores de juego internamente.
  • El admin panel puede conectarse a las APIs de administración de cada VM.
  • Ningún servicio interno (DB, CMS) es directamente accesible desde Internet.

Firewall por VM

vm-web:

  • ALLOW IN: 80, 443 (desde anywhere)
  • ALLOW IN: 22 (SSH, solo desde IP admin)
  • ALLOW OUT: a 10.0.0.20:9000 (Authentik)

vm-auth:

  • ALLOW IN: 9000 (desde 10.0.0.0/24 y redes admin)
  • ALLOW IN: 22 (SSH, solo desde IP admin)
  • DENY IN: 9000 desde Internet directamente (usar proxy desde vm-web si se necesita)

vm-nier, vm-dbo, vm-maple2, vm-fusionfall:

  • ALLOW IN: puertos de juego (desde anywhere)
  • ALLOW IN: 22 (SSH, solo desde IP admin)
  • ALLOW IN: puertos admin/métricas (solo desde 10.0.0.20)
  • DENY everything else

Autenticación Unificada (Authentik)

Realms

Realm Propósito Usuarios
afterlife-players Login de jugadores en la web Jugadores registrados
afterlife-admins Panel de administración Superadmin, Moderator, Content-Editor

Aplicaciones (OIDC Clients)

Aplicación Cliente Callback URL
Project Afterlife Web afterlife-web https://play.consultoria-as.com/api/auth/callback/authentik
Strapi CMS Admin afterlife-cms https://play.consultoria-as.com/admin/auth/callback/authentik

Flujo de Login

  1. Jugador hace clic en "Iniciar sesión" en la web.
  2. Redirige a Authentik (/application/o/authorize/).
  3. Authentik autentica al usuario (email/password, social login, etc.).
  4. Authentik redirige de vuelta a la web con un código de autorización.
  5. La web intercambia el código por un JWT token vía /application/o/token/.
  6. El jugador está autenticado y puede acceder a su perfil y la tienda AFC.

Docker Compose por VM

Cada VM tiene su propio archivo docker-compose.<nombre>.yml:

# VM Web
docker compose -f docker-compose.web.yml up -d

# VM Auth
docker compose -f docker-compose.auth.yml up -d

# VM NieR Reincarnation
docker compose -f docker-compose.nier.yml up -d

# VM Dragon Ball Online
docker compose -f docker-compose.dbo.yml up -d

# VM MapleStory 2
docker compose -f docker-compose.maple2.yml up -d

# VM OpenFusion
docker compose -f docker-compose.fusionfall.yml up -d

Despliegue por Fases

Fase 1: Preparación

  1. Crear 6 VMs con Docker y Docker Compose.
  2. Configurar red privada entre VMs (VLAN o VPN WireGuard/Tailscale).
  3. Asignar IPs estáticas privadas.
  4. Clonar repositorio en cada VM.

Soft Launch: 6 VMs totales (web, auth, nier, dbo, maple2, fusionfall)

Fase 2: VM Auth (Authentik)

  1. Desplegar docker-compose.auth.yml.
  2. Acceder a Authentik en http://10.0.0.20:9000.
  3. Crear realms y aplicaciones OIDC.
  4. Crear usuarios admin iniciales.

Fase 3: VM Web

  1. Desplegar docker-compose.web.yml.
  2. Configurar Nginx + SSL.
  3. Configurar Strapi con token API.
  4. Probar que la web funciona.
  5. Integrar login con Authentik.

Fase 4: VMs de Juegos

  1. Desplegar cada VM de juego una por una.
  2. Ajustar variables de entorno con IPs públicas.
  3. Probar conectividad desde clientes de juego.

Fase 5: NieR Reincarnation + DBO

  1. Desplegar docker-compose.nier.yml.
    • Colocar AssetDatabase y MasterDatabase en el volumen de datos.
    • Parchear el APK con scripts/patcher.ipynb (Google Colab).
  2. Desplegar docker-compose.dbo.yml.
    • Nota: DBO Global requiere Windows. El compose actual es un placeholder.
    • Considerar VM Windows dedicada para DBO.

Fase 6: Panel de Admin

  1. Crear aplicación de admin panel.
  2. Conectar con APIs de métricas de cada VM.
  3. Proteger con realm afterlife-admins.

Fase 7: Go-Live

  1. Actualizar DNS.
  2. Hacer switch de tráfico.
  3. Monitorear.

Troubleshooting Multi-VM

No hay conectividad entre VMs

# Desde vm-web, probar conectividad a otras VMs
nc -zv 10.0.0.20 9000    # Authentik
nc -zv 10.0.0.70 80      # NieR Server
nc -zv 10.0.0.70 443     # NieR gRPC
nc -zv 10.0.0.80 22000   # DBO Auth
nc -zv 10.0.0.40 20001   # Maple2 Login
nc -zv 10.0.0.30 23000   # OpenFusion

Authentik no responde

# En vm-auth
docker logs auth-server
docker logs auth-worker

Firewall bloquea tráfico necesario

# En cualquier VM (Ubuntu/Debian con ufw)
ufw status verbose
ufw allow from 10.0.0.0/24 to any port 3001  # Ejemplo: permitir red privada

Los jugadores no pueden conectar a NieR Reincarnation

Verificar que:

  1. El servidor escucha en los puertos 80 y 443 correctamente.
  2. RESOURCES_BASE_URL tiene exactamente 43 caracteres después del host.
  3. El APK del cliente fue parcheado correctamente con el notebook de Google Colab.
  4. La red soporta HTTP/2 para el tráfico gRPC en el puerto 443.

Backups en Arquitectura Multi-VM

Cada VM debe tener su propia estrategia de backup:

VM Qué respaldar Comando
vm-web PostgreSQL + MinIO data pg_dump + mc mirror
vm-auth Authentik PostgreSQL pg_dump
vm-nier AssetDatabase + MasterDatabase + UserData docker volume backup
vm-dbo MariaDB data mysqldump
vm-maple2 MySQL data mysqldump
vm-fusionfall SQLite + tdata docker volume backup

Escalabilidad Futura

  • vm-web: Si el tráfico crece, escalar horizontalmente con múltiples réplicas de Next.js detrás de un load balancer.
  • vm-auth: Authentik soporta clustering para alta disponibilidad.
  • vm-maple2: Agregar más canales de juego duplicando el servicio maple2-game-ch*.
  • Nueva VM de juego: Simplemente crear una nueva VM, configurar su docker-compose.<juego>.yml, y registrarla en el admin panel.