1121ab7199
Sistema web para gestión de préstamos de material del Laboratorio de Sistemas Computacionales de la UABC. - Backend: Supabase self-hosted, schema aislado `prestamos` con RLS, triggers de stock y audit log (supabase/migrations/0001_init.sql). - Auth: Google OAuth restringido a @uabc.edu.mx, verificado en middleware y como segunda línea en trigger de DB. - Frontend: Astro 7 (SSR con adapter Node) + React islands + Tailwind v4 con paleta UABC (primary #00723F, secondary #DD971A) bajo regla 60/30/10. - Interfaz alumno mobile-first: catálogo con filtro por categorías, solicitud de préstamos, historial personal. - Interfaz admin desktop-first: panel con KPIs, bandeja de solicitudes (aprobar/rechazar/devolver), CRUD de inventario y categorías, reportes filtrables con export CSV nativo. - Modales con `<dialog>` nativo, cero librerías de UI adicionales. - Deploy: Dockerfile multi-stage node:22-alpine + docker-compose para publicar bajo prestamos.buglabs.dev vía Cloudflare Tunnel. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.7 KiB
2.7 KiB
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
# 1. Subir código al server (git clone o rsync) a ~/labre-web/
git clone <repo> ~/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 → <TUNNEL_ID>.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
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):
cd ~/labre-web
git log --oneline -n 10
git checkout <sha-bueno>
docker compose up -d --build
B) Etiquetar imágenes manualmente antes de cada deploy:
# 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:<tag> (quitar 'build: .')
docker compose up -d
Troubleshooting
- 502 en el subdominio: Tunnel no encuentra el puerto.
curl -I http://127.0.0.1:8082/loginen el host; revisarcloudflaredlogs (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_URLcoincida exactamente (con https, sin barra final).