[{"data":1,"prerenderedAt":196},["ShallowReactive",2],{"seo-verification":3,"blog-como-alojar-erpnext-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-como-alojar-erpnext-en-un-vps-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":134,"ctaBody":135,"ctaButton":136,"ctaUrl":137,"relatedPosts":138},150,"como-alojar-erpnext-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-erpnext-vps","how-to-host-erpnext-on-a-vps","كيفية-استضافة-erpnext-على-vps","Alojar ERPNext en un VPS: guía completa","Despliega ERPNext en tu VPS: módulos, posinstalación, monitorización, resolución de errores y comparativa con Odoo Community. Guía completa con Frappe Docker.",9,0,false,"2026-01-26T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-erpnext-vps-poster.svg",{"categorySlug":34,"appSlug":35},"erp-gestion-empresarial","erpnext","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.",[38,42,52,55,58,83,86,89,92,128,131],{"type":39,"title":40,"body":41},"h2","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.\n\nERPNext se apoya en **Frappe**, un framework Python\u002FJavaScript 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.",{"type":43,"title":44,"items":45},"ul","Las ventajas concretas de un ERPNext auto-alojado",[46,47,48,49,50,51],"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\u002FvCPU a medida que crece el volumen de transacciones.",{"type":39,"title":53,"body":54},"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.\n\nCada 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.",{"type":39,"title":56,"body":57},"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 \u002F 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.\n\nEn 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.",{"type":59,"title":60,"steps":61},"steps","Desplegar ERPNext con Frappe Docker y HTTPS",[62,65,68,71,74,77,80],{"title":63,"body":64},"Preparar el VPS y Docker","Por SSH, actualiza el sistema (`apt update && apt upgrade -y`) e instala Docker con `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. Añade tu usuario al grupo docker: `usermod -aG docker $USER`. Comprueba con `docker compose version` (v2 requerido).",{"title":66,"body":67},"Obtener frappe_docker","Clona el repositorio oficial y elige la rama correspondiente a la versión objetivo:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\ncd frappe_docker\n```\n\nLa carpeta `overrides\u002F` contiene compose partials para Caddy (HTTPS automático), Traefik y la app HRMS — combínalos según tus necesidades.",{"title":69,"body":70},"Configurar el entorno","Copia `example.env` a `.env` y ajusta las variables clave:\n\n```bash\ncp example.env .env\n```\n\nEn `.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.",{"title":72,"body":73},"Lanzar el stack","Inicia todos los servicios:\n\n```bash\ndocker compose --project-name erpnext \\\n  -f compose.yaml \\\n  -f overrides\u002Fcompose.mariadb.yaml \\\n  -f overrides\u002Fcompose.redis.yaml \\\n  -f overrides\u002Fcompose.https.yaml \\\n  up -d\n```\n\nLuego crea el sitio ERPNext e instala la app:\n\n```bash\ndocker compose exec backend bench new-site erp.myapp.com \\\n  --mariadb-root-password \u003Crootpwd> \\\n  --admin-password \u003Cadminpwd>\ndocker compose exec backend bench --site erp.myapp.com install-app erpnext\ndocker compose exec backend bench --site erp.myapp.com migrate\n```\n\nSigue los logs para confirmar que todos los servicios (db, redis, workers, scheduler) están sanos: `docker compose logs -f`.",{"title":75,"body":76},"Configurar el reverse proxy","Si no usas el override de Caddy incluido, coloca Nginx delante de ERPNext. Ejemplo mínimo:\n\n```bash\nserver {\n  listen 443 ssl;\n  server_name erp.myapp.com;\n  ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Ferp.myapp.com\u002Ffullchain.pem;\n  ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Ferp.myapp.com\u002Fprivkey.pem;\n  location \u002F { proxy_pass http:\u002F\u002F127.0.0.1:8080; proxy_set_header Host $host; }\n}\n```\n\nCon Caddy basta un `Caddyfile` sencillo: `erp.myapp.com { reverse_proxy backend:8000 }` — el certificado Let's Encrypt se obtiene y renueva automáticamente.",{"title":78,"body":79},"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:\n\n```bash\ndocker compose exec backend bench --site erp.myapp.com backup --with-files\n```\n\nLos archivos de copia se guardan en `sites\u002Ferp.myapp.com\u002Fprivate\u002Fbackups\u002F` dentro del volumen `sites` — cópialos a un almacenamiento de objetos externo (S3, Garage) para recuperación ante desastres.",{"title":81,"body":82},"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.",{"type":39,"title":84,"body":85},"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).\n\nCrea 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.\n\nPara 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.",{"type":39,"title":87,"body":88},"Monitorización y mantenimiento","ERPNext ofrece varios puntos de entrada para supervisar una instancia en producción.\n\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:\n\n```bash\ndocker compose exec backend bench doctor\n```\n\nUn worker ausente o una cola bloqueada aparece de inmediato.\n\n**Logs de la aplicación** — los logs de ERPNext están en `sites\u002F\u003Csite>\u002Flogs\u002F` dentro del volumen `sites`:\n- `web.log`: errores HTTP y trazas Python del backend Gunicorn;\n- `worker.error.log`: excepciones de los workers Celery (tareas programadas, envío de correos);\n- `scheduler.log`: ciclos del planificador.\n\n**Copia de seguridad automatizada** — crea un trabajo cron en el host para ejecutar `bench backup` diariamente y copiar los archivos a almacenamiento remoto:\n\n```bash\n0 3 * * * docker compose -p erpnext exec -T backend \\\n  bench --site erp.myapp.com backup --with-files \\\n  && rclone copy \u002Fpath\u002Fto\u002Fbackups remote:erpnext-backups\n```\n\n**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).",{"type":39,"title":90,"body":91},"Resolución de errores comunes","**Caída del worker: `RedisBroadcastError` o `ConnectionRefusedError` hacia Redis**\nError 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`.\n\n**Migración de esquema bloqueada: `frappe.exceptions.SchemaChangedError`**\nError durante `bench migrate`: `SchemaChangedError: \u003CDocType> 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.\n\n**Timeout de bench: `Traceback ... requests.exceptions.ReadTimeout`**\nError 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`.\n\n**Conexión MariaDB rechazada: `OperationalError: (2003, \"Can't connect to MySQL server on 'db'\")`**\nError 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.\n\n**Sitio en blanco tras `bench migrate`: `TemplateNotFound`**\nERPNext 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.",{"type":93,"title":94,"headers":95,"rows":99},"comparison","ERPNext vs Odoo Community: cuándo elegir uno u otro",[96,97,98],"Criterio","ERPNext","Odoo Community",[100,104,108,112,116,120,124],[101,102,103],"Licencia","GPL v3 — código y módulos libres","LGPL v3 (core) — módulos Enterprise propietarios",[105,106,107],"Módulos incluidos","Contabilidad, inventario, CRM, fabricación, RRHH — todos gratuitos","Núcleo funcional; módulos avanzados reservados a Odoo Enterprise de pago",[109,110,111],"Lenguaje \u002F stack","Python + Frappe, JS vanilla en el cliente","Python + OWL (framework JS propio)",[113,114,115],"Interfaz","Escritorio de apps, formularios configurables sin código","Vista kanban\u002Flista, studio low-code (Enterprise)",[117,118,119],"Complejidad de instalación","Stack Docker oficial bien documentado","Docker disponible, pero menos experiencia comunitaria",[121,122,123],"Comunidad","Activa en GitHub y foro Frappe; fuerte en India y África","Muy amplia; denso ecosistema de partners en Europa",[125,126,127],"Ideal para","Pymes que buscan un ERP completo gratuito, fabricación, multidivisa","Empresas que quieren CRM avanzado o e-commerce Odoo sin desarrollo personalizado",{"type":129,"body":130},"tip","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).",{"type":129,"title":132,"body":133},"La documentación oficial","Para la configuración avanzada y las opciones propias de la herramienta, consulta la \u003Ca href=\"https:\u002F\u002Fdocs.erpnext.com\">documentación oficial de ERPNext\u003C\u002Fa> y el repositorio \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffrappe\u002Ffrappe_docker\">frappe_docker\u003C\u002Fa>. 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.","Lanzar mi VPS Cloud","\u002Fvps-cloud",[139,156,180],{"id":140,"slug":141,"slugs":142,"title":146,"excerpt":147,"readTime":148,"views":18,"isPinned":19,"publishedAt":149,"updatedAt":21,"category":150,"categories":151,"featuredImage":30,"bgImage":31,"posterImage":153,"relatedSolution":154},143,"alojar-dolibarr-en-un-vps-erp-libre",{"fr":143,"en":144,"ar":145,"es":141},"heberger-dolibarr-vps","hosting-dolibarr-on-a-vps-open-source-erp-under-control","استضافة-dolibarr-على-خادم-vps-نظام-erp-حر-تحت-السيطرة","Alojar Dolibarr en VPS: ERP libre bajo control","Despliegue Dolibarr en un VPS ServOrbit: ERP\u002FCRM libre, base de datos controlada, copias de seguridad y acceso HTTPS para su pyme.",3,"2026-02-02T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[152],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-dolibarr-vps-poster.svg",{"categorySlug":34,"appSlug":155},"dolibarr",{"id":157,"slug":158,"slugs":159,"title":163,"excerpt":164,"readTime":165,"views":18,"isPinned":19,"publishedAt":166,"updatedAt":167,"category":168,"categories":174,"featuredImage":30,"bgImage":31,"posterImage":176,"relatedSolution":177},56,"alojar-postgresql-en-un-vps",{"fr":160,"en":161,"ar":162,"es":158},"heberger-postgresql-vps","postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","PostgreSQL en VPS: base de datos fiable y controlada","Aloje PostgreSQL en un VPS: volúmenes, copias de seguridad, acceso de red restringido y configuración sólida para sus aplicaciones.",4,"2026-04-25T00:00:00+00:00","2026-09-08T22:00:02+00:00",{"id":169,"name":170,"slug":171,"color":172,"icon":173},6,"Bases de datos","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[175],{"id":169,"name":170,"slug":171,"color":172,"icon":173},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":178,"appSlug":179},"bases-de-datos","postgresql-stack",{"id":181,"slug":182,"slugs":183,"title":187,"excerpt":188,"readTime":165,"views":18,"isPinned":19,"publishedAt":189,"updatedAt":21,"category":190,"categories":191,"featuredImage":30,"bgImage":31,"posterImage":193,"relatedSolution":194},134,"alojar-twenty-crm-en-un-vps",{"fr":184,"en":185,"ar":186,"es":182},"self-host-twenty-crm-vps","self-host-twenty-crm-on-vps-open-source-salesforce-alternative","استضف-twenty-crm-بنفسك-على-vps-بديل-salesforce-مفتوح-المصدر","Alojar Twenty CRM en un VPS: la alternativa a Salesforce","Despliegue Twenty CRM en un VPS ServOrbit: alternativa open source a Salesforce con objetos a medida, API GraphQL y automatizaciones. AGPL-3.0, listo para producción.","2026-02-13T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[192],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-twenty-crm-vps-poster.svg",{"categorySlug":34,"appSlug":195},"twenty",1789665009749]