Tutorial

Alojar Invoice Ninja en tu VPS

Despliegue10 min de lectura8 pasos

Los proveedores SaaS de facturación cobran por usuario o por volumen de transacciones.

Contenido· Por qué alojar tu facturación de forma autónoma1/9
  1. 01Por qué alojar tu facturación de forma autónoma
  2. 02Lo que obtienes con Invoice Ninja 5.13.45
  3. 03Requisitos mínimos para Invoice Ninja 5.13.45
  4. 04Desplegar Invoice Ninja en un VPS
  5. 05Conectar las pasarelas de pago
  6. 06Invoice Ninja autoalojado vs plan SaaS alojado
  7. 07Copias de seguridad y actualizaciones de Invoice Ninja
  8. 08Resolución de errores comunes
  9. 09Invoice Ninja autoalojado: conclusiones clave

Por qué alojar tu facturación de forma autónoma

Los proveedores SaaS de facturación cobran por usuario o por volumen de transacciones. FreshBooks empieza en 19 $/mes para un solo usuario; QuickBooks Online oscila entre 35 y 90 $/mes según el plan. A medida que crece tu equipo o aumenta el número de clientes, la factura SaaS sigue una curva lineal sin relación con el valor entregado. En un VPS de entrada a 99 DH/mes, Invoice Ninja funciona sin límite de usuarios ni de clientes, y el coste permanece fijo independientemente del crecimiento. Los datos de facturación quedan en tu infraestructura, sujetos a tu propia política de retención, sin pasar por los servidores de un tercero. Más de 100.000 empresas en todo el mundo han elegido el despliegue autoalojado de Invoice Ninja.

Lo que obtienes con Invoice Ninja 5.13.45

  • Presupuestos, facturas recurrentes, abonos y órdenes de compra en una interfaz unificada
  • Pasarelas de pago integradas: Stripe, PayPal, SEPA, Mollie, GoCardless y más de veinte adicionales
  • Portal de cliente autoalojado con visualización y pago de facturas en línea
  • Seguimiento del tiempo facturable por proyecto y tarea, enlazable a líneas de factura
  • API REST completa y webhooks para conectar tu ERP, CRM o flujo contable
  • Autenticación OIDC genérica añadida en la versión 5.13.43 (18 de septiembre de 2026) para SSO empresarial
  • Soporte multidivisa y multiidioma con renderizado de PDF nativo en el servidor
  • Módulo white-label opcional a 30 $/año para eliminar el pie de página «Created with Invoice Ninja»

Requisitos mínimos para Invoice Ninja 5.13.45

La versión 5.13.45, publicada el 9 de octubre de 2026, exige un entorno mínimo preciso. Reserva al menos 2 GB de RAM para el conjunto del stack: el contenedor PHP-FPM de Invoice Ninja consume entre 300 y 500 MB bajo carga, MySQL 8.4 LTS ocupa entre 400 y 700 MB según el buffer pool configurado, y Redis 7.4 permanece ligero con 30–50 MB en reposo. Un VPS con 2 vCPU y 4 GB de RAM ofrece margen cómodo para la generación paralela de PDF. Reserva al menos 10 GB para los volúmenes Docker. MySQL 8.4 LTS es recomendado por la documentación oficial con garantías de compatibilidad hasta 2032; evita MariaDB por incompatibilidades conocidas con ciertas migraciones de Invoice Ninja v5. Se requieren Docker Engine 24+ y Docker Compose v2.x.

Desplegar Invoice Ninja en un VPS

  1. Preparar el directorio de trabajo

    Conéctate por SSH a tu VPS y crea un directorio dedicado: mkdir -p /opt/invoiceninja/{data,logs,public} && cd /opt/invoiceninja. Este directorio alojará el archivo Compose, el archivo de entorno y los volúmenes persistentes. Verifica que Docker y Docker Compose v2 están instalados: docker compose version debe devolver una versión 2.x.

  2. Crear el archivo docker-compose.yml

    Crea /opt/invoiceninja/docker-compose.yml con los siguientes servicios. El servicio db usa la imagen mysql:8.4 con un volumen nombrado db_data. El servicio redis usa redis:7.4-alpine. El servicio app usa invoiceninja/invoiceninja:5.13.45 y depende de db y redis; monta ./data:/var/www/app/storage y ./public:/var/www/app/public. Expón el puerto 9000 solo internamente — nginx se encargará de la interfaz pública. Declara los tres servicios en una red bridge app-net interna.

  3. Configurar las variables de entorno

    Crea /opt/invoiceninja/.env (nunca lo incluyas en control de versiones). Variables esenciales: APP_ENV=production, APP_DEBUG=false, APP_URL=https://votre-domaine.com, DB_HOST=db, DB_DATABASE=invoiceninja, DB_USERNAME=ninja, DB_PASSWORD=<contraseña_fuerte>, MYSQL_ROOT_PASSWORD=<root_pwd>, REDIS_HOST=redis, QUEUE_CONNECTION=redis, MAIL_MAILER=smtp, [email protected], MAIL_ENCRYPTION=tls. Usa contraseñas de al menos 32 caracteres aleatorios.

  4. Generar la clave de aplicación APP_KEY

    Antes del primer arranque, genera la clave de cifrado Laravel. Levanta primero los contenedores de dependencias: docker compose up -d db redis. Espera 20 segundos para que MySQL inicialice su directorio de datos, luego arranca la aplicación: docker compose up -d app. Genera la clave: docker compose exec app php artisan key:generate. Copia el valor devuelto (formato base64:…) y configúralo como APP_KEY en .env. Reinicia el contenedor app: docker compose restart app.

  5. Configurar nginx como proxy inverso

    Crea /etc/nginx/sites-available/invoiceninja.conf. El bloque server escucha en el puerto 443 con un certificado Let's Encrypt. La directiva root apunta a /opt/invoiceninja/public. El bloque location / usa try_files $uri $uri/ /index.php?$query_string. El bloque location ~ \.php$ pasa las peticiones a fastcgi_pass 127.0.0.1:9000. Añade client_max_body_size 100M. Activa la configuración: ln -s /etc/nginx/sites-available/invoiceninja.conf /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx.

  6. Ejecutar migraciones y primer acceso

    Una vez configurado nginx, ejecuta las migraciones de base de datos: docker compose exec app php artisan migrate --force. La operación tarda de 30 a 60 segundos. Abre luego https://votre-domaine.com en un navegador: el asistente de configuración te pedirá crear la cuenta de administrador e introducir los datos de tu empresa.

  7. Activar la cola de trabajos asíncronos

    Invoice Ninja usa workers de Laravel para el envío de correos y la generación de PDF en segundo plano. En el archivo Compose, añade un servicio worker que use la misma imagen invoiceninja/invoiceninja:5.13.45 y ejecute php artisan queue:work --sleep=3 --tries=3. Sin un worker activo, los correos de facturas se encolan pero nunca se envían.

  8. Configurar las pasarelas de pago

    En el backoffice (Configuración > Pasarelas de pago), activa Stripe pegando tus claves pública y secreta del dashboard de Stripe. Para PayPal, usa las credenciales OAuth de tu aplicación REST de PayPal. Para SEPA vía GoCardless, introduce el access token de Sandbox y cambia a entorno de Producción tras las pruebas.

Para obtener un certificado TLS de Let's Encrypt con Certbot, instala el paquete python3-certbot-nginx y ejecuta certbot --nginx -d votre-domaine.com. Certbot modifica automáticamente la configuración de nginx para redirigir HTTP a HTTPS y renueva el certificado cada 60 días mediante un timer de systemd. Asegúrate de que el puerto 80 está abierto en tu firewall antes de ejecutar Certbot: ufw allow 80/tcp.

Conectar las pasarelas de pago

Invoice Ninja 5.13.45 soporta nativamente más de 25 pasarelas. Stripe es la más completa: gestiona pagos con tarjeta, domiciliación SEPA, transferencias ACH y, desde la versión 5.13.43, Stripe PromptPay para los mercados del Sudeste Asiático. Para activarla, crea una clave API restringida en el dashboard de Stripe con los permisos charges:write, customers:write y payment_methods:read. PayPal se integra vía REST API: crea una aplicación en el portal de desarrolladores de PayPal y recupera el client_id y el client_secret. Para domiciliación SEPA en Europa, GoCardless es la vía recomendada: el mandato lo firma el cliente en línea desde el portal Invoice Ninja. Mollie es una alternativa todo en uno apreciada por las empresas europeas.

Invoice Ninja autoalojado vs plan SaaS alojado

Desplace la tabla

Invoice Ninja autoalojado en VPSInvoice Ninja SaaS alojado
Coste mensual99 DH/mes (VPS fijo)Gratis hasta 20 clientes, luego 11–16 $/mes
Límite de clientesIlimitado20 clientes en el plan gratuito
Control de datosDatos en tu infraestructuraDatos en Invoice Ninja Inc.
ActualizacionesManuales (comando docker pull)Automáticas
White-label30 $/año (opcional)Incluido en planes de pago
Mantenimiento del servidorA tu cargoGestionado por el proveedor

Copias de seguridad y actualizaciones de Invoice Ninja

La estrategia de copia de seguridad debe cubrir dos elementos distintos: la base de datos MySQL y el volumen de almacenamiento de archivos. Para MySQL, programa un volcado diario con docker compose exec db mysqldump -u ninja -p invoiceninja | gzip > /backups/invoiceninja-$(date +%Y%m%d).sql.gz mediante un cron o timer de systemd. Conserva al menos 30 días rotantes y prueba la restauración trimestralmente.

Para actualizar a una versión futura: actualiza el tag de la imagen en tu archivo Compose, descarga la nueva imagen con docker compose pull app, luego ejecuta docker compose up -d app worker seguido de docker compose exec app php artisan migrate --force. Revisa el changelog de GitHub antes de cualquier actualización mayor.

Resolución de errores comunes

Cuatro problemas aparecen con frecuencia durante el despliegue inicial.

Error SQLSTATE[HY000] [2002] Connection refused: MySQL aún no está lista cuando el contenedor app intenta conectarse. Añade una directiva healthcheck al servicio db y una condición service_healthy en el depends_on de app.

Los correos no se envían: verifica que el servicio worker está en marcha con docker compose ps worker. Si el estado es Exited, inspecciona los logs: docker compose logs worker.

Página en blanco o error 500 tras la migración: el directorio storage/ tiene permisos incorrectos. Ejecuta docker compose exec app chown -R www-data:www-data /var/www/app/storage && docker compose exec app php artisan config:clear && docker compose exec app php artisan cache:clear.

La generación de PDF produce archivos vacíos: verifica que la variable PDF_GENERATOR está definida (valores posibles: snappy, browsershot, phantom) y que el binario correspondiente está presente en la imagen.

Invoice Ninja autoalojado: conclusiones clave

Invoice Ninja 5.13.45, publicado el 9 de octubre de 2026, es una solución de facturación madura y mantenida activamente. La Elastic License 2.0 permite el autoalojamiento para cualquier uso interno sin restricciones: no pagas nada mientras no revendas el acceso como servicio. El stack Docker (imagen oficial + MySQL 8.4 LTS + Redis 7.4) es reproducible en menos de una hora en cualquier VPS con 2 GB de RAM. El módulo white-label sigue siendo opcional a 30 $/año. Si tu volumen de clientes supera los 20 o tus datos de facturación deben permanecer en tu infraestructura por razones legales o de cumplimiento, el despliegue autoalojado está justificado económica y técnicamente. Nuestro equipo está disponible en [email protected] para ayudarte a dimensionar tu VPS y configurar las copias de seguridad.

Despliegue su infraestructura hoy mismo

VPS Cloud. Entornos preconfigurados disponibles.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva