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.
sudo apt update
sudo apt upgrade -y
Creamos el usuario:
sudo useradd -c "Usuario para ERPNext" -m -s "/bin/bash" erpnext
sudo passwd erpnextuser
Lo asignamos al grupo de sudo, para que tenga permisos de administrador.
sudo usermod -aG sudo erpnext
Accedemos al usuario:
su - erpnext
Modificamos las variables de entorno del usuario mediante el fichero «.bashrc»
#Modificamos el fichero
vi .bashrc
#Añadimos
PATH=$PATH:~/.local/bin/
#Guardamos y salimos
Instalar los paquetes necesarios
Instalamos los paquetes y librerías necesarias:
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:
sudo apt install nginx mariadb-server -y
Una vez instalado el motor de base de datos, debemos editar el fichero de configuración:
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
Y añadir:
[mysqld]
innodb-file-format=barracuda
innodb-file-per-TABLE=1
innodb-large-prefix=1
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-SET = utf8mb4
Reiniciamos el motor de base de datos:
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:
sudo curl --silent --location https://deb.nodesource.com/setup_8.x | sudo bash -
sudo apt-get install gcc g++ make -y
sudo apt-get install nodejs redis-server -y
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.
# Accedemos
sudo mysql -u root -p
Creamos la base de datos y el usuario correspondiente:
CREATE DATABASE erpnext;
CREATE USER erpnext@localhost IDENTIFIED BY 'hackme';
Asignamos privilegios del usuario sobre la base de datos:
GRANT ALL ON erpnext.* TO 'erpnext'@'localhost' IDENTIFIED BY 'hackme' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'hackme' WITH GRANT OPTION;
Una vez hecho esto recargamos privilegios y salimos:
FLUSH PRIVILEGES;
EXIT;
Instalar ERPNext
Creamos el directorio donde ubicaremos los paquetes del producto y le asignamos como propietario al usuario que hemos creado antes:
sudo mkdir -p /opt/erpnext
sudo chown -R erpnextuser /opt/erpnext/
Accedemos al directorio y descargamos los paquetes desde su página de GitHub:
cd /opt/erpnext
git clone https://github.com/frappe/bench bench-repo
Con una salida similar a la siguiente:
erpnextuser@servtest1:/opt/erpnext$ git clone https://github.com/frappe/bench bench-repo
Cloning into 'bench-repo'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 6391 (delta 0), reused 2 (delta 0), pack-reused 6382
Receiving objects: 100% (6391/6391), 29.76 MiB | 14.88 MiB/s, done.
Resolving deltas: 100% (4111/4111), done.
Ahora sí, instalamos ERPNext, utilizando la herramienta «pip» de la que ya hemos hablado:
sudo pip install -e bench-repo
E inicializamos:
bench init erpnext
Con el resultado, en mi caso:
Production mode
✔ Built js/moment-bundle.min.js
✔ Built js/libs.min.js
Building frappe assets...
✔ Built js/dialog.min.js
✔ Built js/modules.min.js
✔ Built js/social.min.js
✔ Built js/web_form.min.js
✔ Built js/list.min.js
✔ Built js/chat.js
✔ Built css/frappe-rtl.css
✔ Built css/printview.css
✔ Built css/module.min.css
✔ Built css/form.min.css
✔ Built css/list.min.css
✔ Built css/report.min.css
✔ Built frappe/css/email.css
✔ Built css/frappe-web.css
✔ Built js/desk.min.js
✔ Built js/frappe-web.min.js
✔ Built css/web_form.css
✔ Built css/desk.min.css
✔ Built js/bootstrap-4-web.min.js
✔ Built js/frappe-recorder.min.js
✔ Built css/frappe-web-b4.css
✔ Built js/control.min.js
✔ Built js/form.min.js
✔ Built js/report.min.js
✨ Done in 61.336s
Done in 62.47s.
INFO:bench.utils:setting up backups
no crontab for erpnext
INFO:bench.utils:setting up auto update
no crontab for erpnext
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:
cd erpnext
bench new-site erpnext.bitsandlinux.com --db-name erpnext
Al hacer esto nos pedirá la contraseña de ‘root’ de Mariadb.
MySQL root password:
Installing frappe...
Updating DocTypes for frappe : [========================================]
Updating country info : [========================================]
Set Administrator password:
Re-enter Administrator password:
*** Scheduler is disabled ***
También lo podemos hacer de manera manual, especifiando los detalles:
bench new-site erpnext.bitsandlinux.com --db-name erpnext \
--mariadb-root-username root --mariadb-root-password password \
--install-app erpnext --verbose --force
Asigamos permisos para el usuario y el grupo sobre la carpeta, de forma recursiva:
sudo chown -R erpnext:erpnext /opt/erpnext/erpnext
Encendemos la aplicación:
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.
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