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
- 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
6.4 KiB
6.4 KiB
Guia de Despliegue
Entornos
| Entorno | Compose File | Servicios |
|---|---|---|
| Desarrollo local | docker-compose.dev.yml + docker-compose.maple2.yml |
Todos |
| Produccion | docker-compose.yml |
Web + CMS + DB + Nginx + SSL |
Desarrollo Local
Requisitos
- Docker Engine 24+
- Docker Compose v2+
- 8 GB RAM minimo (16 GB con todos los servidores de juegos)
- 50 GB disco libre
Levantar todo
cd docker/
# 1. Stack principal
docker compose -f docker-compose.dev.yml up -d
# 2. MapleStory 2 (requiere setup previo, ver game-servers.md)
docker compose -f docker-compose.maple2.yml up -d
# 3. Verificar
docker ps
Puertos en uso
| Puerto | Servicio |
|---|---|
| 3000 | Next.js (frontend) |
| 1337 | Strapi (CMS admin) |
| 5432 | PostgreSQL |
| 9000 | MinIO API |
| 9001 | MinIO Console |
| 23000-23001 | OpenFusion |
| 20001 | MapleStory 2 Login |
| 21001 | MapleStory 2 World |
| 20003 | MapleStory 2 Game |
| 21003 | MapleStory 2 Game gRPC |
| 3307 | MySQL (MapleStory 2) |
| 4000 | MapleStory 2 Web |
| 25565 | Minecraft FTB Evolution |
| 7777 (UDP) | SM64 Coop DX |
| 45000-45004 | N64 Netplay (TCP + UDP) |
| 6262, 6226 (UDP) | Dolphin Traversal (GC/Wii) |
Acceso Externo (fuera de la red local)
Requisitos
- Router con acceso al panel de administracion
- Dominio en Cloudflare (consultoria-as.com)
- Token de API de Cloudflare con permisos Zone > DNS > Edit
1. Crear token de Cloudflare
- Ir a https://dash.cloudflare.com/profile/api-tokens
- Create Token > Edit zone DNS (template)
- Zone Resources: Include > Specific zone > consultoria-as.com
- Copiar el token generado a
CF_API_TOKENendocker/.env
2. Configurar variables
En docker/.env:
PUBLIC_HOST=play.consultoria-as.com
CF_API_TOKEN=tu-token-aqui
En servers/maple2/.env:
GAME_IP=play.consultoria-as.com
LOGIN_IP=play.consultoria-as.com
3. Port forwarding en el router
Abrir estos puertos TCP en el router, apuntando a la IP local del servidor (192.168.10.96):
| Puerto | Servicio | Protocolo |
|---|---|---|
| 23000 | OpenFusion (login) | TCP |
| 23001 | OpenFusion (shard) | TCP |
| 20001 | MapleStory 2 (login) | TCP |
| 20003 | MapleStory 2 (game) | TCP |
| 25565 | Minecraft FTB Evolution | TCP |
| 7777 | SM64 Coop DX | UDP |
| 45000-45004 | N64 Netplay (Mario Party) | TCP + UDP |
| 6262, 6226 | Dolphin Traversal (GC/Wii) | UDP |
No forwardear: PostgreSQL (5432), MinIO (9000/9001), Strapi (1337), Next.js (3000), MySQL (3307). Estos son servicios internos.
4. Levantar servicios
cd docker
docker compose -f docker-compose.dev.yml up -d
docker compose -f docker-compose.maple2.yml up -d
El contenedor cloudflare-ddns actualizara automaticamente el registro DNS play.consultoria-as.com con tu IP publica cada 5 minutos.
5. Conexion desde fuera
| Juego | Direccion |
|---|---|
| Minecraft FTB Evolution | play.consultoria-as.com:25565 |
| OpenFusion (FusionFall) | play.consultoria-as.com:23000 |
| MapleStory 2 | play.consultoria-as.com:20001 |
| SM64 Coop DX | play.consultoria-as.com:7777 (UDP) |
| N64 Netplay (Mario Party) | play.consultoria-as.com:45000 |
| Dolphin Netplay (GC/Wii) | Traversal Server: play.consultoria-as.com:6262 |
Detener servicios
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.maple2.yml down
Reconstruir imagenes
docker compose -f docker-compose.dev.yml build --no-cache
docker compose -f docker-compose.maple2.yml build --no-cache
Produccion
Archivo: docker-compose.yml
El compose de produccion incluye:
- Nginx como reverse proxy (puertos 80/443)
- Certbot para certificados SSL Let's Encrypt
- Sin servidores de juegos (se configuran aparte segun el VPS)
Variables de entorno requeridas
# Base de datos
DATABASE_NAME=afterlife
DATABASE_USERNAME=afterlife
DATABASE_PASSWORD=<password-seguro>
# MinIO
MINIO_ROOT_USER=afterlife
MINIO_ROOT_PASSWORD=<password-seguro>
# Strapi keys (generar con: openssl rand -base64 32)
APP_KEYS=<key1>,<key2>,<key3>,<key4>
API_TOKEN_SALT=<salt>
ADMIN_JWT_SECRET=<secret>
TRANSFER_TOKEN_SALT=<salt>
JWT_SECRET=<secret>
# API
STRAPI_API_TOKEN=<token-generado-en-admin>
PUBLIC_STRAPI_URL=https://tu-dominio.com
# Domain
DOMAIN=tu-dominio.com
Deploy manual al VPS
# En el VPS
cd /opt/project-afterlife
git pull origin main
docker compose build
docker compose up -d
CI/CD Automatico
El archivo .github/workflows/deploy.yml automatiza el deploy:
- Trigger: Push a
main - Accion: SSH al VPS, pull, build, restart
Secrets de GitHub requeridos:
VPS_HOST— Hostname o IP del VPSVPS_USER— Usuario SSHVPS_SSH_KEY— Llave privada SSH
SSL con Certbot
# Primera vez: obtener certificado
docker compose run --rm certbot certonly \
--webroot --webroot-path=/var/www/certbot \
-d tu-dominio.com
# Renovacion automatica (cron)
0 0 * * * docker compose run --rm certbot renew
Backups
Base de datos CMS (PostgreSQL)
# Exportar
docker exec docker-postgres-1 pg_dump -U afterlife afterlife > backup_$(date +%Y%m%d).sql
# Importar
cat backup.sql | docker exec -i docker-postgres-1 psql -U afterlife afterlife
Base de datos MapleStory 2 (MySQL)
# Exportar
docker exec maple2-db mysqldump -u root -pmaplestory --databases maple-data game-server > backup_ms2_$(date +%Y%m%d).sql
# Importar
cat backup_ms2.sql | docker exec -i maple2-db mysql -u root -pmaplestory
Mundo de Minecraft
# Exportar
docker cp minecraft-ftb:/data/world ./backup_mc_world_$(date +%Y%m%d)/
# Importar
docker cp ./backup_mc_world/ minecraft-ftb:/data/world
docker restart minecraft-ftb
Volumenes Docker (completo)
# Listar volumenes
docker volume ls | grep afterlife
# Backup de un volumen
docker run --rm -v docker_postgres_data:/data -v $(pwd):/backup \
alpine tar czf /backup/postgres_data.tar.gz -C /data .
Monitoreo
Estado de contenedores
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Uso de recursos
docker stats --no-stream
Logs en tiempo real
docker logs -f --tail 50 <container-name>
Health checks
PostgreSQL y MySQL tienen healthchecks configurados en los compose files. Verificar con:
docker inspect --format='{{.State.Health.Status}}' docker-postgres-1
docker inspect --format='{{.State.Health.Status}}' maple2-db