Ir al contenido

Autoalojamiento

Open Factura es de código abierto (AGPL-3.0 para la aplicación; MIT para el SDK, la CLI y las habilidades). Corre como un solo Worker de Cloudflare con una base D1.

Requisitos: Bun 1.2+ y Node 20+.

Ventana de terminal
git clone https://github.com/xaviigna/openfactura && cd openfactura
bun install
cp server/.dev.vars.example server/.dev.vars # complete los dos secretos (openssl rand -base64 32)
echo "MH_SIMULADO=1" >> server/.dev.vars # simulador del MH: emita sin credenciales de Hacienda
echo "TRUSTED_ORIGINS=http://localhost:5173" >> server/.dev.vars
bun run build
cd server && bun run db:migrate:local && cd ..
bun run dev # API en :8788, panel en :5173

Abra http://localhost:5173, cree una cuenta y una organización, registre el emisor y pulse Generar credenciales de prueba en Emisor → Credenciales del MH. Ya puede emitir contra el simulador. En los ejemplos de esta documentación cambie https://openfactura.co por http://localhost:8788.

  1. Base de datos.

    Ventana de terminal
    cd server
    bunx wrangler d1 create openfactura

    Copie el database_id a server/wrangler.jsonc y aplique las migraciones con bun run db:migrate:remote.

  2. Configuración. En server/wrangler.jsonc cambie vars.APP_URL por su URL pública (debe coincidir con el origen del panel). Luego los secretos:

    Ventana de terminal
    openssl rand -base64 32 | bunx wrangler secret put BETTER_AUTH_SECRET
    openssl rand -base64 32 | bunx wrangler secret put CRED_KEK_V1

    CRED_KEK_V1 cifra las credenciales del MH de todos los emisores. Guarde una copia fuera de Cloudflare. No defina MH_SIMULADO en producción.

  3. Desplegar.

    Ventana de terminal
    cd .. && bun run deploy
  4. Primer uso. Cree su cuenta, registre el emisor, cargue las credenciales de pruebas y pulse Probar conexión.

Nombre Tipo Descripción
APP_URL var URL pública del servicio
BETTER_AUTH_SECRET secreto Firma de sesiones
CRED_KEK_V1 (V2, …) secreto Llave maestra AES-256, 32 bytes en base64
LIMITE_CLAVE_POR_MINUTO var Peticiones por minuto por clave de API (120)
TRUSTED_ORIGINS var Orígenes adicionales de confianza, separados por coma
MH_BASE_URL var Sustituye la URL del MH (sólo para pruebas)
MH_SIMULADO var 1 activa el simulador del MH para el ambiente 00 (sólo desarrollo)
  1. bunx wrangler secret put CRED_KEK_V2 con una llave nueva. Lo nuevo se cifra con V2; lo anterior se sigue descifrando con V1.
  2. Vuelva a guardar las credenciales de cada emisor.
  3. Cuando ningún valor empiece por v1., elimine CRED_KEK_V1.

El documento OpenAPI de su instalación queda en https://SU-DOMINIO/api/v1/openapi.json.