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.
En su equipo
Sección titulada «En su equipo»Requisitos: Bun 1.2+ y Node 20+.
git clone https://github.com/xaviigna/openfactura && cd openfacturabun installcp 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 Haciendaecho "TRUSTED_ORIGINS=http://localhost:5173" >> server/.dev.varsbun run buildcd server && bun run db:migrate:local && cd ..bun run dev # API en :8788, panel en :5173Abra 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.
En su cuenta de Cloudflare
Sección titulada «En su cuenta de Cloudflare»-
Base de datos.
Ventana de terminal cd serverbunx wrangler d1 create openfacturaCopie el
database_idaserver/wrangler.jsoncy aplique las migraciones conbun run db:migrate:remote. -
Configuración. En
server/wrangler.jsonccambievars.APP_URLpor 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_SECRETopenssl rand -base64 32 | bunx wrangler secret put CRED_KEK_V1CRED_KEK_V1cifra las credenciales del MH de todos los emisores. Guarde una copia fuera de Cloudflare. No definaMH_SIMULADOen producción. -
Desplegar.
Ventana de terminal cd .. && bun run deploy -
Primer uso. Cree su cuenta, registre el emisor, cargue las credenciales de pruebas y pulse Probar conexión.
Variables
Sección titulada «Variables»| 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) |
Rotar la llave maestra
Sección titulada «Rotar la llave maestra»bunx wrangler secret put CRED_KEK_V2con una llave nueva. Lo nuevo se cifra con V2; lo anterior se sigue descifrando con V1.- Vuelva a guardar las credenciales de cada emisor.
- Cuando ningún valor empiece por
v1., elimineCRED_KEK_V1.
El documento OpenAPI de su instalación queda en https://SU-DOMINIO/api/v1/openapi.json.