Sistema de préstamos LabRe UABC — implementación inicial
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>
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# 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 <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
|
||||
|
||||
```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 <sha-bueno>
|
||||
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:<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/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).
|
||||
Reference in New Issue
Block a user