Puesta en marcha
De cero a un despliegue funcionando, en orden.
En esta página
De cero a un BloomX funcionando, en el orden en que conviene hacerlo. Cada paso enlaza con la página que lo detalla.
Lista de verificación#
- Decide el modelo: usar el backend compartido de otra organización, o desplegar el tuyo (Arquitectura).
- Crea una base de datos PostgreSQL para el frontend (y otra para el backend si lo despliegas).
- Crea una cuenta de Resend, verifica tu dominio y obtén una clave de API (Correo: Resend y DNS).
- Crea un bucket S3-compatible (S3, R2, B2, MinIO) para adjuntos (Almacenamiento).
- Define las variables de entorno (Variables de entorno).
- Ejecuta
npm run db:ensurecontra la base de datos de destino. - Despliega (Despliegue).
- Registra tu dominio en el backend y la clave pública Ed25519 de tu instancia (API del backend).
- Configura los webhooks de Resend, el DNS y los crons.
- Pruébalo con el checklist final de esta página.
Desarrollo local#
git clone <tu-repositorio>/bloomx && cd bloomx
npm install # postinstall ejecuta prisma generate
cp .env.example .env # y completa lo mínimo (ver Variables de entorno)
npm run db:ensure # crea/actualiza tablas (también corre solo en predev/prebuild/prestart)
npm run dev # http://localhost:3000- Necesitas una versión de Node compatible con Next.js (20 o superior recomendada) y una base PostgreSQL accesible.
predev,prebuildyprestartejecutantsx scripts/ensure-schema.ts, así que las tablas se crean solas. SinDATABASE_URLsolo emite un aviso y sale con código 0.- Sin
S3_ACCESS_KEY/S3_BUCKETel almacenamiento cae a disco local (.gemini/storage): solo para desarrollo. - Para probar un tema de empresa sin backend usa
NEXT_PUBLIC_BLOOMX_THEME_OVERRIDE(Temas). - Para un entorno E2E totalmente local (Postgres embebido, Resend y backend falsos) ve Operación.
Primer usuario y administración#
- Define
REGISTRATION_KEY(en producción, si falta o valedev-secret, el registro responde 403) y abre/register. - Para acceder a las rutas de administración, añade tu correo a
ADMIN_EMAILS: la cuenta debe activar MFA TOTP (obligatorio para administradores) antes de usarapi/admin/*. - El panel de administración del dominio (marca, tema, landing, extensiones) usa la sesión de manager del backend: entra por
/admin/login(o crea el manager y el dominio en/admin/register).
Registrar el dominio en el backend crea el manager y el dominio; el alta usa register-domain + verify-domain con un OTP de 6 dígitos enviado por correo. Ver API del backend.
Clave de firma de la instancia (recomendado)#
Sin clave, tu dominio funciona en modo legado (sin EMAIL_RECEIVED, sin services.mail; las extensiones siguen usando sus credenciales y el panel muestra un aviso para registrar la clave). Para el modo firmado:
node scripts/gen-domain-keypair.mjs
# Imprime:
# BLOOMX_DOMAIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" <- variable SECRETA del frontend
# signingPublicKey: <clave pública base64url> <- se registra en el backend- Guarda
BLOOMX_DOMAIN_PRIVATE_KEYen el entorno del frontend (nunca en git). - Registra la clave pública:
signingPublicKeyenverify-domain, oPOST /api/manager/domain-keycon la sesión del manager. - Comprueba que el backend ya no responde
X-BloomX-Auth: legacya tus peticiones.
Checklist final#
GET /api/configdel frontend devuelve la marca y las extensiones de tu dominio (no la config por defecto "BloomX Default").- Puedes registrarte, iniciar sesión y activar MFA.
- Un correo enviado a tu dominio aparece en la bandeja (webhook de Resend + MX).
- Un correo enviado desde BloomX llega y muestra
SPF=PASS,DKIM=PASSyDMARC=PASS. - Adjuntar y descargar un archivo funciona (almacenamiento).
- El cron diario responde 200 con
CRON_SECRET(Despliegue). - Las extensiones que instalaste funcionan (si hay hooks, tu dominio debe estar en modo firmado).