# 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) ```