# Despliegue LabRe web (buglabs) App Astro SSR (Node adapter) empaquetada como contenedor. Corre en el mismo host que Supabase self-hosted; Cloudflare Tunnel la publica en `prestamos.buglabs.dev`. ## Primer despliegue ```bash # 1. Subir código al server (git clone o rsync) a ~/labre-web/ git clone ~/labre-web && cd ~/labre-web # 2. Crear .env.production a partir del ejemplo y rellenar secretos cp .env.production.example .env.production $EDITOR .env.production # PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY # 3. Build + up (compose construye la imagen local) docker compose up -d --build # 4. Añadir hostname al Cloudflare Tunnel # Editar /etc/cloudflared/config.yml (root) e insertar ANTES del catch-all # "service: http_status:404": # # - hostname: prestamos.buglabs.dev # service: http://localhost:8082 # sudo systemctl restart cloudflared # 5. En dashboard Cloudflare: crear CNAME # prestamos → .cfargotunnel.com (proxied) # 6. Auth OAuth (Google): # - En Supabase Studio > Auth > URL Config: # Site URL = https://prestamos.buglabs.dev # Redirect URLs += https://prestamos.buglabs.dev/api/auth/callback # - En Google Cloud Console (mismo project del CLIENT_ID Supabase): # confirmar https://supabase.buglabs.dev/auth/v1/callback ya existe # (no hace falta añadir el dominio de la app, Google redirige a Supabase) # 7. Verificar docker compose ps docker compose logs -f --tail=50 labre-web curl -sI https://prestamos.buglabs.dev/login # esperado: 200 ``` ## Actualizaciones ```bash cd ~/labre-web git pull docker compose up -d --build docker image prune -f ``` `restart: unless-stopped` reinicia el contenedor si crashea o si el host reboota. ## Rollback Compose no versiona imágenes por sí solo. Dos opciones: **A) Volver al commit anterior (más simple):** ```bash cd ~/labre-web git log --oneline -n 10 git checkout docker compose up -d --build ``` **B) Etiquetar imágenes manualmente antes de cada deploy:** ```bash # Antes de subir cambios: docker tag labre-web-labre-web:latest labre-web:$(date +%Y%m%d-%H%M) docker images labre-web # Para volver: # editar docker-compose.yml -> image: labre-web: (quitar 'build: .') docker compose up -d ``` ## Troubleshooting - **502 en el subdominio**: Tunnel no encuentra el puerto. `curl -I http://127.0.0.1:8082/login` en el host; revisar `cloudflared` logs (`journalctl -u cloudflared -f`). - **Contenedor en `unhealthy`**: `docker compose logs labre-web`. Suele ser env var faltante (`SUPABASE_SERVICE_ROLE_KEY`) o Supabase caído. - **Callback OAuth falla**: verificar Site URL en Supabase y que `PUBLIC_APP_URL` coincida exactamente (con https, sin barra final).