docs: add comprehensive project documentation
Some checks failed
Deploy / deploy (push) Has been cancelled
Some checks failed
Deploy / deploy (push) Has been cancelled
- README.md: project overview, server status, quick start guide, architecture diagram, tech stack, and content inventory - docs/architecture.md: technical architecture, service diagram, component details, and design decisions - docs/game-servers.md: setup and operation guide for OpenFusion, MapleStory 2, and Minecraft FTB Infinity Evolved - docs/cms-content.md: Strapi content model, i18n strategy, documentary structure, and API endpoints - docs/deployment.md: local dev, production deploy, CI/CD, SSL setup, backup procedures, and monitoring Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
194
docs/deployment.md
Normal file
194
docs/deployment.md
Normal file
@@ -0,0 +1,194 @@
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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 |
|
||||
| 20002 | MapleStory 2 Game |
|
||||
| 21002 | MapleStory 2 Game gRPC |
|
||||
| 3307 | MySQL (MapleStory 2) |
|
||||
| 4000 | MapleStory 2 Web |
|
||||
| 25565 | Minecraft FTB |
|
||||
|
||||
### Detener servicios
|
||||
```bash
|
||||
docker compose -f docker-compose.dev.yml down
|
||||
docker compose -f docker-compose.maple2.yml down
|
||||
```
|
||||
|
||||
### Reconstruir imagenes
|
||||
```bash
|
||||
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
|
||||
|
||||
```env
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
1. **Trigger**: Push a `main`
|
||||
2. **Accion**: SSH al VPS, pull, build, restart
|
||||
|
||||
**Secrets de GitHub requeridos**:
|
||||
- `VPS_HOST` — Hostname o IP del VPS
|
||||
- `VPS_USER` — Usuario SSH
|
||||
- `VPS_SSH_KEY` — Llave privada SSH
|
||||
|
||||
### SSL con Certbot
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
```bash
|
||||
# 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)
|
||||
```bash
|
||||
# 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
|
||||
```bash
|
||||
# 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)
|
||||
```bash
|
||||
# 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
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
```
|
||||
|
||||
### Uso de recursos
|
||||
```bash
|
||||
docker stats --no-stream
|
||||
```
|
||||
|
||||
### Logs en tiempo real
|
||||
```bash
|
||||
docker logs -f --tail 50 <container-name>
|
||||
```
|
||||
|
||||
### Health checks
|
||||
PostgreSQL y MySQL tienen healthchecks configurados en los compose files. Verificar con:
|
||||
```bash
|
||||
docker inspect --format='{{.State.Health.Status}}' docker-postgres-1
|
||||
docker inspect --format='{{.State.Health.Status}}' maple2-db
|
||||
```
|
||||
Reference in New Issue
Block a user