Guía de despliegue

Alojar ERPNext en un VPS: guía completa

Desplegar en un VPS Cloud →

Tutorial

Alojar ERPNext en un VPS: guía completa

Autoalojamiento9 min de lectura7 pasos

ERPNext es un ERP de código abierto completo: contabilidad, ventas, compras, inventario, fabricación y RRHH en una sola aplicación. Alojado en tu propio VPS, dispones de un sistema de gestión integrado sin suscripción por usuario y sin que tus datos financieros abandonen tu infraestructura. Esta guía cubre el despliegue paso a paso con el stack oficial Frappe Docker, la configuración posinstalación, la supervisión, la resolución de errores comunes y una comparativa con Odoo Community para elegir la herramienta adecuada.

Contenido· Por qué alojar ERPNext en un VPS1/10
  1. 01Por qué alojar ERPNext en un VPS
  2. 02Las ventajas concretas de un ERPNext auto-alojado
  3. 03Los módulos clave de ERPNext
  4. 04Requisitos de hardware y software
  5. 05Desplegar ERPNext con Frappe Docker y HTTPS
  6. 06Posinstalación: empresa, ejercicio y usuarios
  7. 07Monitorización y mantenimiento
  8. 08Resolución de errores comunes
  9. 09ERPNext vs Odoo Community: cuándo elegir uno u otro
  10. 10La documentación oficial

Por qué alojar ERPNext en un VPS

Un ERP centraliza los datos más sensibles de la empresa: asientos contables, márgenes, fichas de clientes y proveedores, nóminas. Las ofertas SaaS suelen facturar por usuario al mes, lo que se encarece a medida que los equipos crecen. En un VPS dedicado, pagas el servidor una vez, añades todos los usuarios que necesitas y la base de datos permanece bajo tu control, con copias de seguridad según tus propias reglas.

ERPNext se apoya en Frappe, un framework Python/JavaScript que hace el código fuente legible y extensible. Una instancia propia te permite actualizar a tu ritmo, elegir apps complementarias (HRMS, e-Commerce, Education, Healthcare) y escribir tus propios módulos sin depender de un proveedor.

Las ventajas concretas de un ERPNext auto-alojado

  • Sin coste por usuario: añade equipos sin aumentar la factura.
  • Soberanía sobre los datos contables y de RRHH, que permanecen en tu servidor.
  • Todos los módulos disponibles (contabilidad, inventario, CRM, fabricación, nóminas) sin nivel de pago.
  • Personalización libre mediante el framework Frappe y las apps complementarias.
  • Copias de seguridad y retención gestionadas, adaptadas a tus obligaciones legales.
  • Escalabilidad: aumenta RAM/vCPU a medida que crece el volumen de transacciones.

Los módulos clave de ERPNext

ERPNext cubre el ciclo operativo completo de una empresa. Contabilidad: plan de cuentas multidivisa, libro mayor, informes normativos (balance, cuenta de resultados), gestión del IVA y conciliación bancaria. Ventas y compras: presupuestos, pedidos, albaranes, facturas y abonos con flujos de aprobación. Gestión de inventario: múltiples almacenes, lotes y números de serie, inventarios rotativos, valoración FIFO o promedio móvil. CRM: leads, oportunidades, campañas y pipeline comercial con cuadro de actividades. Fabricación: listas de materiales (BOM), órdenes de fabricación, seguimiento de puestos de trabajo y mermas. RRHH: fichas de empleados, ausencias, asistencia, nóminas configurables por país y evaluación del desempeño.

Cada módulo se activa desde el escritorio de ERPNext; solo instalas lo que necesitas, y los derechos de acceso se definen por rol a nivel de documento.

Requisitos de hardware y software

ERPNext es más exigente que la media. Cuenta con un mínimo de 2 vCPU y 4 GB de RAM para uso de prueba, y 4 vCPU / 8 GB de RAM para producción con varios usuarios simultáneos. Reserva 20 GB de disco para la base de datos MariaDB, Redis y los archivos subidos.

En cuanto al software: Docker y Docker Compose v2 (>= 2.20), un nombre de dominio (p. ej. erp.myapp.com) apuntando a la IP del VPS y el puerto 443 abierto en entrada. ERPNext usa MariaDB 10.6+ como base de datos principal y Redis para caché y workers en tiempo real — ambos están incluidos en el stack frappe_docker; no es necesario instalarlos por separado.

Desplegar ERPNext con Frappe Docker y HTTPS

  1. Preparar el VPS y Docker

    Por SSH, actualiza el sistema (apt update && apt upgrade -y) e instala Docker con curl -fsSL https://get.docker.com | sh. Añade tu usuario al grupo docker: usermod -aG docker $USER. Comprueba con docker compose version (v2 requerido).

  2. Obtener frappe_docker

    Clona el repositorio oficial y elige la rama correspondiente a la versión objetivo:

    git clone https://github.com/frappe/frappe_docker
    cd frappe_docker

    La carpeta overrides/ contiene compose partials para Caddy (HTTPS automático), Traefik y la app HRMS — combínalos según tus necesidades.

  3. Configurar el entorno

    Copia example.env a .env y ajusta las variables clave:

    cp example.env .env

    En .env, define FRAPPE_SITE_NAME_HEADER, DB_PASSWORD, REDIS_CACHE y, si usas el override de Caddy, LETSENCRYPT_EMAIL y el dominio en Caddyfile. Nunca despliegues con contraseñas por defecto.

  4. Lanzar el stack

    Inicia todos los servicios:

    docker compose --project-name erpnext \
      -f compose.yaml \
      -f overrides/compose.mariadb.yaml \
      -f overrides/compose.redis.yaml \
      -f overrides/compose.https.yaml \
      up -d

    Luego crea el sitio ERPNext e instala la app:

    docker compose exec backend bench new-site erp.myapp.com \
      --mariadb-root-password <rootpwd> \
      --admin-password <adminpwd>
    docker compose exec backend bench --site erp.myapp.com install-app erpnext
    docker compose exec backend bench --site erp.myapp.com migrate

    Sigue los logs para confirmar que todos los servicios (db, redis, workers, scheduler) están sanos: docker compose logs -f.

  5. Configurar el reverse proxy

    Si no usas el override de Caddy incluido, coloca Nginx delante de ERPNext. Ejemplo mínimo:

    server {
      listen 443 ssl;
      server_name erp.myapp.com;
      ssl_certificate     /etc/letsencrypt/live/erp.myapp.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/erp.myapp.com/privkey.pem;
      location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; }
    }

    Con Caddy basta un Caddyfile sencillo: erp.myapp.com { reverse_proxy backend:8000 } — el certificado Let's Encrypt se obtiene y renueva automáticamente.

  6. Asegurar y hacer copias de seguridad

    Restringe los puertos internos (MariaDB 3306, Redis 6379) al loopback o a la red Docker interna. Programa copias de seguridad regulares con bench backup y almacénalas fuera del VPS:

    docker compose exec backend bench --site erp.myapp.com backup --with-files

    Los archivos de copia se guardan en sites/erp.myapp.com/private/backups/ dentro del volumen sites — cópialos a un almacenamiento de objetos externo (S3, Garage) para recuperación ante desastres.

  7. Primera conexión

    Abre la dirección de tu aplicación e inicia sesión con el usuario Administrator y la contraseña de administrador definida en bench new-site. Espera unos minutos tras la instalación antes de que la dirección responda — las migraciones iniciales se ejecutan en segundo plano. ERPNext continúa con su asistente de configuración: idioma, zona horaria, moneda, ejercicio fiscal y empresa.

Posinstalación: empresa, ejercicio y usuarios

Una vez conectado como Administrator, ve a Configuración → Ajustes del sistema para confirmar la zona horaria y el formato de fecha, y luego a Contabilidad → Plan de cuentas para adaptar la estructura a las normas locales (ERPNext incluye planes de cuentas para cerca de cien países).

Crea tu empresa en Contabilidad → Empresa: introduce la moneda base, el número fiscal y el ejercicio fiscal de inicio. ERPNext crea automáticamente las cuentas de cierre y los asientos de apertura.

Para los usuarios, ve a Configuración → Usuarios y permisos → Usuario: asigna roles de negocio (Accounts Manager, Stock User, HR Manager…) en lugar de derechos documento a documento. Los roles se combinan: un usuario puede ser a la vez Sales User y Purchase User sin derechos de administración.

Monitorización y mantenimiento

ERPNext ofrece varios puntos de entrada para supervisar una instancia en producción.

bench doctor es el comando de diagnóstico integrado: comprueba el estado de los workers Celery, el scheduler y la conexión Redis. Ejecútalo desde el contenedor:

docker compose exec backend bench doctor

Un worker ausente o una cola bloqueada aparece de inmediato.

Logs de la aplicación — los logs de ERPNext están en sites/<site>/logs/ dentro del volumen sites:
- web.log: errores HTTP y trazas Python del backend Gunicorn;
- worker.error.log: excepciones de los workers Celery (tareas programadas, envío de correos);
- scheduler.log: ciclos del planificador.

Copia de seguridad automatizada — crea un trabajo cron en el host para ejecutar bench backup diariamente y copiar los archivos a almacenamiento remoto:

0 3 * * * docker compose -p erpnext exec -T backend \
  bench --site erp.myapp.com backup --with-files \
  && rclone copy /path/to/backups remote:erpnext-backups

Actualizaciones — antes de cada actualización a una versión mayor, haz una copia completa, lee las notas de la versión, prueba en una copia y luego: bench update --reset dentro del contenedor. Las migraciones de esquema se aplican automáticamente, pero algunas versiones mayores de ERPNext requieren actualizar primero a la versión menor más alta (p. ej. v14 → v14.x latest antes de pasar a v15).

Resolución de errores comunes

Caída del worker: RedisBroadcastError o ConnectionRefusedError hacia Redis
Error en worker.error.log: redis.exceptions.ConnectionRefusedError: [Errno 111] Connection refused. Causa: el contenedor Redis se detuvo o reinició tras un OOM. Comprueba: docker compose ps redis — si está en Exited, reinícialo con docker compose up -d redis y luego los workers. Si el fallo se repite, aumenta la RAM del VPS o limita el número de workers en common_site_config.json.

Migración de esquema bloqueada: frappe.exceptions.SchemaChangedError
Error durante bench migrate: SchemaChangedError: <DocType> has been manually modified. Causa: una columna fue modificada manualmente en la base de datos, ERPNext se niega a sobreescribir. Solución: bench --site erp.myapp.com migrate --skip-failing, luego inspecciona el doctype afectado en la interfaz y relanza migrate sin el flag.

Timeout de bench: Traceback ... requests.exceptions.ReadTimeout
Error durante una acción larga (importación CSV masiva, recálculo de inventario): ReadTimeout: HTTPConnectionPool. Aumenta el timeout de Gunicorn en common_site_config.json: "gunicorn_workers": 2, "web_timeout": 120. Reinicia el servicio web: docker compose restart backend.

Conexión MariaDB rechazada: OperationalError: (2003, "Can't connect to MySQL server on 'db'")
Error al ejecutar bench new-site o al iniciar los workers. Causa habitual: el contenedor MariaDB aún no está listo o el health check ha fallado. Comprueba: docker compose logs db | tail -20. Si MariaDB muestra [ERROR] InnoDB: Page 0 log sequence number, los ficheros de base de datos están corruptos — restaura desde la última copia de seguridad. Si es un simple retraso de arranque, espera 30 segundos y relanza el comando.

Sitio en blanco tras bench migrate: TemplateNotFound
ERPNext muestra una página en blanco o un error Jinja tras una actualización. Causa: los assets estáticos no se reconstruyeron. Ejecuta: docker compose exec backend bench --site erp.myapp.com clear-cache && bench build --app erpnext. Reiniciar el contenedor frontend (si es independiente) también puede ser suficiente.

ERPNext vs Odoo Community: cuándo elegir uno u otro

Desplace la tabla

CriterioERPNextOdoo Community
LicenciaGPL v3 — código y módulos libresLGPL v3 (core) — módulos Enterprise propietarios
Módulos incluidosContabilidad, inventario, CRM, fabricación, RRHH — todos gratuitosNúcleo funcional; módulos avanzados reservados a Odoo Enterprise de pago
Lenguaje / stackPython + Frappe, JS vanilla en el clientePython + OWL (framework JS propio)
InterfazEscritorio de apps, formularios configurables sin códigoVista kanban/lista, studio low-code (Enterprise)
Complejidad de instalaciónStack Docker oficial bien documentadoDocker disponible, pero menos experiencia comunitaria
ComunidadActiva en GitHub y foro Frappe; fuerte en India y ÁfricaMuy amplia; denso ecosistema de partners en Europa
Ideal paraPymes que buscan un ERP completo gratuito, fabricación, multidivisaEmpresas que quieren CRM avanzado o e-commerce Odoo sin desarrollo personalizado

ERPNext evoluciona con versiones mayores que incluyen migraciones de esquema: antes de cada actualización, haz un bench backup completo y prueba la subida de versión en una copia antes de aplicarla en producción. Las migraciones entre versiones mayores deben seguir el camino oficial (p. ej. v14 → v15 sin saltar versiones).

La documentación oficial

Para la configuración avanzada y las opciones propias de la herramienta, consulta la documentación oficial de ERPNext y el repositorio frappe_docker. Esta guía cubre el despliegue en VPS; la documentación del editor sigue siendo la referencia para ajustes finos, actualizaciones mayores y casos de uso específicos.

Despliegue su instancia en un VPS Cloud ServOrbit

Un VPS Cloud ServOrbit con Docker preconfigurado y recursos escalables le permite instalar esta herramienta sin fricción, y ajustar la RAM y los vCPU a medida que crece el uso.

¿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