Organizar archivos de deployment en carpeta deploy/
This commit is contained in:
217
deploy/DEPLOY-GCLOUD.md
Normal file
217
deploy/DEPLOY-GCLOUD.md
Normal file
@@ -0,0 +1,217 @@
|
||||
# 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)
|
||||
```
|
||||
Reference in New Issue
Block a user