# Despliegue en Google Cloud

Esta guía explica cómo desplegar SnatchGame en Google Cloud Platform usando una VM de Compute Engine.

## Requisitos Previos

1. **Cuenta de Google Cloud** con billing habilitado
2. **gcloud CLI** instalado y configurado
3. **Proyecto de Google Cloud** creado
4. **Dominio** configurado en Cloudflare

## Paso 1: Configurar Google Cloud

### Instalar gcloud CLI
```bash
# En tu máquina local
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
```

### Configurar proyecto
```bash
# Listar proyectos disponibles
gcloud projects list

# Configurar proyecto activo
gcloud config set project TU_PROJECT_ID

# Habilitar APIs necesarias
gcloud services enable compute.googleapis.com
```

## Paso 2: Crear la VM

### Editar configuración
Edita `deploy/gcloud/create-vm.sh` y cambia:
```bash
PROJECT_ID="tu-proyecto-gcloud"  # Por tu project ID real
```

### Ejecutar creación
```bash
cd deploy/gcloud
chmod +x *.sh
./create-vm.sh
```

Esto creará:
- VM `snatchgame-vm` con Ubuntu 20.04
- Tipo `e2-micro` (1 vCPU, 1GB RAM)
- Disco de 20GB
- Nginx configurado automáticamente
- Docker instalado
- Tu aplicación desplegada

## Paso 3: Configurar DNS en Cloudflare

Una vez creada la VM, obtendrás una IP externa. Configura en Cloudflare:

```
Type: A
Name: snatchgame
Content: IP_EXTERNA_DE_LA_VM
Proxy status: Proxied (naranja)
TTL: Auto
```

## Paso 4: Configurar SSL en Cloudflare

En el dashboard de Cloudflare:

1. **SSL/TLS → Overview**
   - Encryption mode: `Flexible` o `Full`

2. **SSL/TLS → Edge Certificates**
   - Always Use HTTPS: `On`
   - HTTP Strict Transport Security: `On`

## Paso 5: Verificar Deployment

### Verificar VM
```bash
# Conectarse a la VM
gcloud compute ssh snatchgame-vm --zone=us-central1-a

# Verificar servicios
sudo systemctl status nginx
sudo systemctl status docker
docker ps

# Ver logs
docker logs snatchgame
```

### Verificar URLs
- `http://snatchgame.nucleoriofrio.com` - Frontend
- `http://snatchgame.nucleoriofrio.com/colyseus` - Monitor

## Paso 6: Configurar Deployment Automático (Opcional)

### Crear Service Account
```bash
# Crear service account
gcloud iam service-accounts create gitea-deployer \
    --display-name="Gitea Deployer"

# Asignar permisos
gcloud projects add-iam-policy-binding TU_PROJECT_ID \
    --member="serviceAccount:gitea-deployer@TU_PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/compute.instanceAdmin"

# Crear key
gcloud iam service-accounts keys create key.json \
    --iam-account=gitea-deployer@TU_PROJECT_ID.iam.gserviceaccount.com
```

### Configurar secrets en Gitea
En tu repositorio de Gitea, agrega estos secrets:
- `GCLOUD_SERVICE_KEY`: Contenido del archivo `key.json`
- `GCLOUD_PROJECT_ID`: Tu project ID

### Activar workflow
El archivo `.gitea/workflows/deploy-gcloud.yml` se ejecutará automáticamente cuando pushees a la rama `production`.

## Actualización Manual

Para actualizar manualmente:
```bash
cd deploy/gcloud
./update-deployment.sh
```

## Monitoreo y Logs

### Ver logs de la aplicación
```bash
gcloud compute ssh snatchgame-vm --zone=us-central1-a
docker logs -f snatchgame
```

### Ver logs de nginx
```bash
gcloud compute ssh snatchgame-vm --zone=us-central1-a
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
```

### Monitoreo de recursos
```bash
# Conectarse a la VM
gcloud compute ssh snatchgame-vm --zone=us-central1-a

# Ver uso de recursos
htop
docker stats
```

## Costos Estimados

- **VM e2-micro**: ~$7/mes
- **Disco 20GB**: ~$0.80/mes
- **Tráfico de red**: ~$0.12/GB
- **Total estimado**: ~$8-10/mes

## Troubleshooting

### VM no responde
```bash
# Reiniciar VM
gcloud compute instances reset snatchgame-vm --zone=us-central1-a

# Verificar startup script
gcloud compute ssh snatchgame-vm --zone=us-central1-a
sudo tail -f /var/log/syslog
```

### Aplicación no funciona
```bash
# Conectarse a VM
gcloud compute ssh snatchgame-vm --zone=us-central1-a

# Verificar contenedor
docker ps
docker logs snatchgame

# Redesplegar
sudo /opt/deploy-snatchgame.sh
```

### DNS no resuelve
- Verificar configuración en Cloudflare
- Esperar propagación DNS (puede tomar hasta 24h)
- Usar herramientas como `dig` o `nslookup`

## Scaling y Optimización

### Aumentar recursos de VM
```bash
# Parar VM
gcloud compute instances stop snatchgame-vm --zone=us-central1-a

# Cambiar tipo de máquina
gcloud compute instances set-machine-type snatchgame-vm \
    --machine-type=e2-small --zone=us-central1-a

# Iniciar VM
gcloud compute instances start snatchgame-vm --zone=us-central1-a
```

### Backup automático
```bash
# Crear snapshot del disco
gcloud compute disks snapshot snatchgame-vm \
    --zone=us-central1-a \
    --snapshot-names=snatchgame-backup-$(date +%Y%m%d)
```