Instalar ERPNext en Ubuntu 18.04

ERPNext es un software de gestión empresarial gratuito, que utiliza para su desarrollo la filosofía del código abierto, moderno y fácil de usar que utilizan miles de empresas en todo el mundo. Es una plataforma ERP muy simple pensada para minoristas, comercio, servicios, manufactura, recursos humanos, organizaciones sin fines de lucro y otros sectores. Es un sistema ERP potente y con todas las funciones escrito en Python sobre el framework Frappe. Utiliza Node.js para la parte de «front-end» y MariaDB para almacenar sus datos en el «backend». ERPNext ofrece una interfaz basada en web para realizar tareas diarias. Además, incluye un sistema de informes que permite integración con una suite ofimática.

Incluye módulos de contabilidad, gestión de activos, gestión de relaciones con el cliente (CRM), de recursos humanos (GRH), fabricación, punto de venta (POS), gestión de proyectos, gestión de ventas, sistema de administración de inventario, del estudiante o de información hospitalaria, entre otros.

Este producto se ha lanzado utilizando una licencia GNU GPLv3. Por lo que se puede modificar siempre respetando esta misma licencia.

Pasos para instalar ERPNext en Ubuntu 18.04

Debemos seguir una serie de pasos para realizar la instalación de manera correcta y sin contratiempos.

Para ello voy a utilizar mi proveedor de confianza Clouding.io, en dicha plataforma voy a utilizar unos de los VPS que nos ofrecen. Si no sabéis muy bien como hacerlo, aquí os dejo enlace a la entrada que escribí en su día al respecto:

Servidores Cloud VPS con clouding.io

Una vez ya lo tenemos creado, accedemos a él vía «ssh» y empezamos a trabajar.

El primer paso es crear un usuario de trabajo, para así no tener que utilizar «root», previa actualización del sistema.

  1. sudo apt update
  2. sudo apt upgrade -y

Creamos el usuario:

  1. sudo useradd -c "Usuario para ERPNext" -m -s "/bin/bash" erpnext
  2. sudo passwd erpnextuser

Lo asignamos al grupo de sudo, para que tenga permisos de administrador.

  1. sudo usermod -aG sudo erpnext

Accedemos al usuario:

  1. su - erpnext

Modificamos las variables de entorno del usuario mediante el fichero «.bashrc»

  1. #Modificamos el fichero
  2. vi .bashrc
  3. #Añadimos
  4. PATH=$PATH:~/.local/bin/
  5. #Guardamos y salimos

Instalar los paquetes necesarios

Instalamos los paquetes y librerías necesarias:

  1. sudo apt install libffi-dev python-pip python-dev python3-dev libssl-dev wkhtmltopdf -y

Instalamos el servidor web y el motor de base de datos. En esta entrada utilizamos los paquetes del motor de base de datos que vienen en los repositorios de Ubuntu:

  1. sudo apt install nginx mariadb-server -y

Una vez instalado el motor de base de datos, debemos editar el fichero de configuración:

  1. sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

Y añadir:

  1. [mysqld]
  2. innodb-file-format=barracuda
  3. innodb-file-per-TABLE=1
  4. innodb-large-prefix=1
  5. character-set-client-handshake = FALSE
  6. character-set-server = utf8mb4
  7. collation-server = utf8mb4_unicode_ci
  8.  
  9. [mysql]
  10. default-character-SET = utf8mb4

Reiniciamos el motor de base de datos:

  1. sudo systemctl restart mariadb

Instalar Redis y Node.js

De ambas instalaciones ya hemos hablado en la web, pero en ambos casos la instalación se hacía sobre Centos 7, así que aquí os explico. Debemos seguir los siguientes pasos:

  1. sudo curl --silent --location https://deb.nodesource.com/setup_8.x | sudo bash -
  2. sudo apt-get install gcc g++ make -y
  3. sudo apt-get install nodejs redis-server -y
  4. sudo npm install -g yarn

Configurar Mariadb

Ya hemos dicho anteriormente que Mariadb es esencial para el funcionamiento del producto. Por lo que debemos asegurar la instalación mediante mysql_secure_installation. Básicamente tendremos que asignar una contraseña al usuario «root» sino ya tiene, además de eliminar bases de datos y usuarios innecesarios.

Una vez hecho esto, accedemos para crear el usuario y la base de datos necesaria para el buen funcionamiento del producto. Es muy importante que tanto la base de datos como su usuario administrador se llamen igual, para que se pueda desplegar el producto correctamente, más adelante.

  1. # Accedemos
  2. sudo mysql -u root -p

Creamos la base de datos y el usuario correspondiente:

  1. CREATE DATABASE erpnext;
  2. CREATE USER erpnext@localhost IDENTIFIED BY 'hackme';

Asignamos privilegios del usuario sobre la base de datos:

  1. GRANT ALL ON erpnext.* TO 'erpnext'@'localhost' IDENTIFIED BY 'hackme' WITH GRANT OPTION;
  2. GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'hackme' WITH GRANT OPTION;

Una vez hecho esto recargamos privilegios y salimos:

  1. FLUSH PRIVILEGES;
  2. EXIT;

Instalar ERPNext

Creamos el directorio donde ubicaremos los paquetes del producto y le asignamos como propietario al usuario que hemos creado antes:

  1. sudo mkdir -p /opt/erpnext
  2. sudo chown -R erpnextuser /opt/erpnext/

Accedemos al directorio y descargamos los paquetes desde su página de GitHub:

  1. cd /opt/erpnext
  2. git clone https://github.com/frappe/bench bench-repo

Con una salida similar a la siguiente:

  1. erpnextuser@servtest1:/opt/erpnext$ git clone https://github.com/frappe/bench bench-repo
  2. Cloning into 'bench-repo'...
  3. remote: Enumerating objects: 9, done.
  4. remote: Counting objects: 100% (9/9), done.
  5. remote: Compressing objects: 100% (8/8), done.
  6. remote: Total 6391 (delta 0), reused 2 (delta 0), pack-reused 6382
  7. Receiving objects: 100% (6391/6391), 29.76 MiB | 14.88 MiB/s, done.
  8. Resolving deltas: 100% (4111/4111), done.

Ahora sí, instalamos ERPNext, utilizando la herramienta «pip» de la que ya hemos hablado:

  1. sudo pip install -e bench-repo

E inicializamos:

  1. bench init erpnext

Con el resultado, en mi caso:

  1. Production mode
  2. ✔ Built js/moment-bundle.min.js
  3. ✔ Built js/libs.min.js
  4.  
  5. Building frappe assets...
  6.  
  7. ✔ Built js/dialog.min.js
  8. ✔ Built js/modules.min.js
  9. ✔ Built js/social.min.js
  10. ✔ Built js/web_form.min.js
  11. ✔ Built js/list.min.js
  12. ✔ Built js/chat.js
  13. ✔ Built css/frappe-rtl.css
  14. ✔ Built css/printview.css
  15. ✔ Built css/module.min.css
  16. ✔ Built css/form.min.css
  17. ✔ Built css/list.min.css
  18. ✔ Built css/report.min.css
  19. ✔ Built frappe/css/email.css
  20. ✔ Built css/frappe-web.css
  21. ✔ Built js/desk.min.js
  22. ✔ Built js/frappe-web.min.js
  23. ✔ Built css/web_form.css
  24. ✔ Built css/desk.min.css
  25. ✔ Built js/bootstrap-4-web.min.js
  26. ✔ Built js/frappe-recorder.min.js
  27. ✔ Built css/frappe-web-b4.css
  28. ✔ Built js/control.min.js
  29. ✔ Built js/form.min.js
  30. ✔ Built js/report.min.js
  31. ✨  Done in 61.336s
  32. Done in 62.47s.
  33. INFO:bench.utils:setting up backups
  34. no crontab for erpnext
  35. INFO:bench.utils:setting up auto update
  36. no crontab for erpnext
  37. Bench erpnext initialized

A continuación, cambiamos el directorio a erpnext y creamos un nuevo sitio para el dominio node1.example.com con el siguiente comando:

  1. cd erpnext
  2. bench new-site  erpnext.bitsandlinux.com --db-name erpnext

Al hacer esto nos pedirá la contraseña de ‘root’ de Mariadb.

  1. MySQL root password:
  2.  
  3. Installing frappe...
  4. Updating DocTypes for frappe        : [========================================]
  5. Updating country info               : [========================================]
  6. Set Administrator password:
  7. Re-enter Administrator password:
  8. *** Scheduler is disabled ***

También lo podemos hacer de manera manual, especifiando los detalles:

  1. bench new-site erpnext.bitsandlinux.com --db-name erpnext \
  2. --mariadb-root-username root --mariadb-root-password password \
  3. --install-app erpnext --verbose --force

Asigamos permisos para el usuario y el grupo sobre la carpeta, de forma recursiva:

  1. sudo chown -R erpnext:erpnext /opt/erpnext/erpnext

Encendemos la aplicación:

  1. bench start

Una vez hecho esto, al finalizar el arranque del producto, ya deberíamos poder acceder vía web, utilizando «localhost» más el puerto 8000, o bien la IP del servidor o el dominio, más el mismo puerto.

Vista del panel de acceso a ERPNext

La parte de la instalación vía web es bastante simple, básicamente es seleccionar nuestro idioma, ubicación y alguna cosa más.

Alguna cosa más

La verdad es que quedan cosas por pulir para que la instalación sea más elegante. Por ejemplo utilizar un proxy inverso con Nginx, para no tener que escribir el puerto en el navegador. Además de utilizar una conexión web cifrada, con HTTPS. Para ello podéis seguir las instrucciones de esta entrada:

Instalar y configurar un proxy inverso con Nginx en Ubuntu 18.04

Solo debemos modificar algún dato, es bien sencillo.

Otra cosa que veo necesaria es crear un servicio de arranque y parada para Systemd, sobre todo si vamos a tener el nodo en producción.

Para más información: ERPNext.com

Fuentes consultadas

Foro ERPNext – ERPNext + Python 3
Computingforgeeks.com – How to Install ERPNext ERP System on Ubuntu 18.04 Bionic Beaver Linux