mirror of
https://origin.cursor.com/mrdevmx/panels.git
synced 2026-10-09 23:33:18 +00:00
3.5 KiB
3.5 KiB
Deploy PANELS en Coolify (Docker Compose)
Resumen
| Qué | Cuánto |
|---|---|
| Bases gestionadas Coolify (Postgres/MySQL) | 0 |
| Archivos SQLite en volumen | 2 (app.db, platform.db) |
| Contenedores | 3 (api, web-panel, web-saas) |
| Volumen persistente | 1 → /app/data en api |
Los fronts (Alpine + nginx) hacen proxy de /v1 al servicio api, así las cookies de sesión van same-origin.
Datos sensibles (qué NO va al git)
| Ítem | Estado |
|---|---|
.env |
gitignored — no commitear |
data/ (*.db, expedientes, pdfs) |
gitignored |
| SMTP password en SaaS | vive en platform.db (volumen) — proteger backups |
| Defaults de desarrollo en código | solo fallbacks locales; Coolify exige secrets |
Variables de entorno (servicio api)
Obligatorias
| Variable | Formato | Uso |
|---|---|---|
SESSION_SECRET |
string largo aleatorio | Firma cookie de sesión |
DOCS_KEY |
64 caracteres hex (32 bytes) | Cifrado de documentos |
SEED_PASSWORD |
string | Password inicial de admin SaaS (solo al crear / migrar seed) |
PANEL_LOGIN_URL |
URL absoluta | Link en correos de acceso |
Generar:
openssl rand -hex 32 # SESSION_SECRET o DOCS_KEY
Recomendadas (HTTPS / Coolify)
| Variable | Default compose | Uso |
|---|---|---|
COOKIE_SECURE |
true |
Cookie solo por HTTPS |
PORT |
8000 |
Puerto interno API |
CORS_ORIGINS |
vacío | Lista https://a,https://b si la API se llama cross-origin; con proxy /v1 en nginx no hace falta |
Opcionales
| Variable | Uso |
|---|---|
API_KEY |
Auth alternativa por header X-API-Key (vacío = desactivado) |
VCARD_BASE |
Prefijo QR/vCard gafetes |
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS / SMTP_FROM |
Correo por env (alternativa al panel /smtp) |
web-panel y web-saas no necesitan variables de entorno en runtime (estáticos + proxy nginx).
Imágenes
- api: Deno 2.9 + OpenJDK 21 JRE + Liquibase (Debian; no Alpine por FFI SQLite)
- web-panel / web-saas: build Node Alpine → nginx Alpine
Archivos: Dockerfile.api, Dockerfile.web-panel, Dockerfile.web-saas, docker-compose.yml, web-panel/nginx.conf, web-saas/nginx.conf.
En Coolify el servicio de PANELS se llama web-panel (FQDN ej. panels.mrdev.mx). La carpeta web/ queda libre para una website futura.
Paso a paso en Coolify
- Push este repo (sin
.envnidata/). - Coolify → New Resource → Docker Compose →
docker-compose.yml. - Persistent storage: volumen
panel-data→/app/dataenapi. - Dominios:
web-panel→ panels;web-saas→ saas;apisin FQDN (proxy/v1). - Cargar en Coolify las obligatorias +
COOKIE_SECURE=true. - Deploy (Liquibase crea/migra las 2 SQLite en el volumen).
- Verificar
https://app…/v1/health, login SaaSadmin/ tuSEED_PASSWORD. - SMTP en
/smtpo porSMTP_*.
Local
cp .env.example .env # rellenar obligatorias
docker compose up --build
Sin SESSION_SECRET / DOCS_KEY / SEED_PASSWORD / PANEL_LOGIN_URL, compose no arranca.
Checklist ops
.envydata/fuera del git- Secrets distintos a los de desarrollo
- Backup del volumen
panel-data(incluye DBs + SMTP guardado) COOKIE_SECURE=trueen HTTPS- Healthcheck API OK
Qué no hace falta
- Postgres/MySQL/MariaDB en Coolify
- Contenedor monolítico Node+Deno+Java