🗂️ Este artículo forma parte de una serie dedicada a n8n y las automatizaciones. Te invitamos a estar atento/a a futuras entregas para obtener una visión más completa y detallada de esta herramienta y su potencial.
En este post vamos a instalar n8n en un servidor Debian. Asumiremos que el servidor está recién creado y que viene con el sistema operativo base, sin nada adicional instalado.
✍️ Nota: la versión de n8n actual es 1.34.2 y la última versión estable de la distribución Debian que usaremos en el servidor es Debian 12 (bookworm).
1. Requerimientos necesarios para seguir esta guía.
El usuario que siga esta guía debería tener los siguientes conocimientos:
Para crear el servidor y configurarlo:
- Comandos de consola en Linux (nivel básico, añadir/eliminar usuarios, instalar/eliminar paquetes, resolución de problemas o troubleshooting).
- Poder conectarse al servidor con SSH u otro protocolo.
Y para crear un flujo y probarlo:
- JavaScript (nivel básico, para hacer scripts en los nodos de código y para la configuración de variables).
- Python (nivel básico, también para los nodos de código, pero es opcional).
⚠️ Antes de instalar n8n o reportar un error a los desarrolladores, comprobaremos que el puerto 5678 está permitido en nuestro cortafuegos y en nuestro proveedor de servidores (Google Cloud, Azure, …).
⚠️ En caso de desplegar n8n en producción, nos aseguraremos de tener un dominio o subdominio a nuestra disposición, y apuntando a la IP de nuestro servidor. En esta guía, usaremos n8n.tudominio.com.
2. Configuración inicial del servidor.
Para desplegar correctamente n8n en producción, vamos a tener que realizar configuraciones previas en nuestro servidor.
✍️ Nota: En caso de probarlo a nivel local (es decir, en tu propio ordenador), puedes saltarte toda esta configuración inicial.
2.1. Configuración de la fecha y hora del servidor.
Para configurar la fecha y hora del servidor, debemos ejecutar lo siguiente (por ejemplo, utilizaremos el huso horario de Madrid):
sudo ln -fs /usr/share/zoneinfo/Europe/Madrid /etc/localtime sudo dpkg-reconfigure --frontend noninteractive tzdata
2.2. Configuración del servicio de sistema para n8n.
Configuraremos un servicio de arranque para n8n en segundo plano, para iniciar n8n automáticamente cuando se reinicia el servidor o ocurre algún error inesperado.
Debemos ejecutar el siguiente comando:
sudo bash -c 'cat > /etc/systemd/system/n8n.service << "EOF" [Unit] Description=N8N process manager Documentation=https://n8n.io/ After=network.target [Service] Type=simple User=n8n LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin PIDFile=/etc/n8n/n8n.pid Restart=on-failure ExecStart=/usr/bin/node /usr/bin/n8n ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -TERM $MAINPID [Install] WantedBy=multi-user.target EOF'
Los límites de memoria y velocidad (LimitNOFILE, LimitNPROC y LimitCORE) los hemos puesto muy laxos (sin límites), ya que n8n también puede tener procesos muy intensos de memoria, dependiendo siempre de la cantidad de datos que consultamos.
Como el servidor es dedicado y este es el único servicio importante que tendremos ejecutando en segundo plano, podemos permitir que n8n pueda utilizar lo máximo de CPU y memoria RAM.
✍️ Nota: Sólo el núcleo (o kernel) del sistema operativo será quién limitará el servicio de n8n en caso de utilización muy brusca de CPU o memoria, para no irrumpir el funcionamiento del sistema operativo a nivel básico.
Vemos que el usuario que ejecuta dicho servicio (en User=n8n) se llama n8n (lo vamos a crear más adelante). Es muy importante ejecutar n8n sin ser superusuario (o root), para minimizar los permisos y no otorgar demasiados privilegios de usuario.
Por supuesto, el usuario n8n no tiene ningún acceso a comandos de superusuario, es decir, no forma parte de los grupos wheel o sudoers ni tampoco tendrá ningún acceso especial en /etc/sudoers.d/.
2.3. Configuración de las variables de entorno.
Las variables de entorno ayudan a arrancar n8n con unas especificaciones en concreto. Para guardar las variables de entorno, lo haremos en otro archivo de configuración de este servicio.
Ejecutaremos el siguiente comando:
sudo mkdir -p "/etc/systemd/system/n8n.service.d" sudo bash -c 'cat > /etc/systemd/system/n8n.service.d/30-env.conf << "EOF" [Service] # Configuracion basica # La API de n8n se encuentra en https://n8n.tudominio.com/api/b1 por defecto # Reemplaza tudominio.com por tu dominio o subdominio a tu eleccion. Environment=N8N_HOST="n8n.tudominio.com" Environment=N8N_PORT="5678" Environment=N8N_PROTOCOL="http" Environment=NODE_ENV=production # Direcciones de Webhooks y UI de n8n Environment=VUE_APP_URL_BASE_API="http://n8n.tudominio.com:5678" Environment=N8N_EDITOR_BASE_URL="https://n8n.tudominio.com" Environment=WEBHOOK_URL="https://n8n.tudominio.com" # Activar plantillas de n8n Environment=N8N_TEMPLATES_ENABLED=true # Activar diagnostico de n8n Environment=N8N_DIAGNOSTICS_ENABLED=false # LOGGING Environment=N8N_LOG_LEVEL=verbose # Configurar la salida de log por consola y a un archivo a la vez Environment=N8N_LOG_OUTPUT=console,file # Configurar la ruta absoluta del archivo del cual escribiremos n8n. # Debemos tener permisos de lectura y escritura en el directorio padre. Environment=N8N_LOG_FILE_LOCATION=/home/n8n/n8n-verbose.log # Establece un maximo de 10 MB para el log de n8n Environment=N8N_LOG_FILE_MAXSIZE=10 # Establece 60 como el numero maximo de archivos de log a ser conservados Environment=N8N_LOG_FILE_MAXCOUNT=60 # Vease https://community.n8n.io/t/why-is-my-database-so-big/7981/13 Environment=EXECUTIONS_DATA_SAVE_ON_SUCCESS=none Environment=EXECUTIONS_DATA_SAVE_ON_ERROR=all Environment=EXECUTIONS_DATA_SAVE_ON_PROGRESS=true Environment=EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false Environment=EXECUTIONS_DATA_MAX_AGE=168 Environment=DB_SQLITE_VACUUM_ON_STARTUP=true # Activar purga automatica (y mantenimiento) de la base de datos (sqlite) Environment=EXECUTIONS_DATA_PRUNE=true Environment=EXECUTIONS_DATA_PRUNE_TIMEOUT=604800 # A partir de este numero de horas, el historico de ejecucion del flujo sera eliminado Environment=EXECUTIONS_DATA_MAX_AGE=336 # Configura el huso horario Environment=GENERIC_TIMEZONE=Europe/Madrid EOF'
Leeremos detenidamente los comentarios respecto a cada una de las variables, para saber el contexto.
Recuerda reemplazar tudominio.com por el dominio a tu elección.
Es muy importante también leernos la documentación de variables de entorno para saber más variables útiles y el detalle de cada una de ellas.
Nota Hemos puesto la interfaz de n8n en el puerto 5678, ya que el puerto 443 (HTTPS) es un puerto privilegiado que sólo puede ejecutar el usuario root. En caso de configurarlo así, vamos a tener problemas para hacer login o logout.
2.4. Creación del usuario n8n.
Tal como hemos mencionado anteriormente, el usuario n8n no tendrá ningún tipo de privilegio a excepción del propio servicio de n8n. Por supuesto, podremos poner el nombre de usuario que queramos, pero en caso de cambiarlo debemos cerciorarnos que todo apunta a este nuevo usuario.
Ejecutaremos el siguiente comando:
sudo useradd -m n8n -s /bin/bash
2.5. Configuración del HTTPS para n8n.
Para comunicar la interfaz web de n8n (ubicada al puerto 5678) vamos configurar un servidor web que haga de proxy. En pocas palabras, ejecutaremos un servidor web (nginx, por ejemplo) como root en el puerto 443, que redirigirá la petición al puerto 5678, que es donde se ubica la interfaz de n8n.
Servidor web Nginx
NGINX es un software de servidor web de código abierto, similar a Apache.
Para instalarlo, ejecutaremos lo siguiente:
sudo apt-get install -yq nginx
Para configurar el proxy inverso con Nginx, escribiremos lo siguiente:
sudo bash -c 'cat > /etc/nginx/sites-available/n8n.conf << "EOF" # From https://github.com/sutidor/misc/blob/main/proxy-confs/n8n.subdomain.conf.sample server { server_name n8n.tudominio.com; listen 80; location / { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; # config to set HTTPOnly and Secure Cookie proxy_cookie_path / "/; HTTPOnly; Secure"; } location ~ ^/(webhook|webhook-test) { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; # config to set HTTPOnly and Secure Cookie proxy_cookie_path / "/; HTTPOnly; Secure"; } } EOF' # Activamos el servicio web de n8n sudo ln -fs /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/n8n.conf # Reiniciamos Nginx sudo service nginx reload
Certbot
Para añadir un certificado seguro para la dirección de n8n, podemos utilizar Certbot, que creará un certificado seguro HTTPS mediante LetsEncrypt y lo renovará automáticamente cada cierto tiempo.
sudo apt-get -yq install python3-certbot-nginx sudo certbot -d n8n.tudominio.com
y contestaremos en la consola las preguntas pertinentes que nos pregunte Certbot.
Veremos que el fichero que tenemos en /etc/nginx/sites-available/n8n.conf está cambiado (Certbot ha añadido sus directivas), debería quedar algo así:
# From https://github.com/sutidor/misc/blob/main/proxy-confs/n8n.subdomain.conf.sample server { server_name n8n.tudominio.com; listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/n8n.tudominio.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/n8n.tudominio.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Connection ''; proxy_set_header Host $host; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; # config to set HTTPOnly and Secure Cookie proxy_cookie_path / "/; HTTPOnly; Secure"; } location ~ ^/(webhook|webhook-test) { proxy_pass http://localhost:5678; proxy_http_version 1.1; proxy_set_header Connection ''; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; # config to set HTTPOnly and Secure Cookie proxy_cookie_path / "/; HTTPOnly; Secure"; } } server { if ($host = n8n.tudominio.com) { return 301 https://$host$request_uri; } # managed by Certbot server_name n8n.tudominio.com; listen 80; return 404; # managed by Certbot }
3. Instalación de n8n y primer arranque.
Ya que vamos a instalar n8n en un servidor dedicado a ello, utilizaremos la vía de instalación con npm. También lo podemos instalar y configurar mediante Docker, pero al tener un servidor a propósito no hace falta ningún tipo de contenerización, además de ahorrarnos memoria y recursos.
Para instalar n8n es tan fácil como introducir los siguientes comandos:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo bash - sudo apt-get install -yq nodejs sudo npm install n8n -g
El primer comando añadirá la fuente oficial de NodeJS a la lista de repositorios de Debian.
✍️ Nota: La versión 18 de NodeJS está disponible nativamente en los repositorios oficiales de Debian, pero si instalamos el repositorio oficial de NodeJS, tendremos actualizaciones menores de la versión más rápidamente, y será más fácil cambiar de versión en caso de que n8n requiera de una versión de NodeJS mayor que 18.
Y así instalamos la última versión en producción. n8n también ofrece versiones next (beta), pero no son recomendables para instalar en producción, ya que no están probadas tan rigurosamente.
Para arrancar n8n es tan fácil como:
– En servidor:
sudo systemctl daemon-reload; # Este comando es opcional, sólamente es necesario ejecutarlo cuando se modifiquen las variables de entorno establecidas sudo service n8n start
– En local:
n8n
A partir de aquí, nos saldrá un formulario inicial como este para rellenar nuestros datos:
✍️ Nota: En la versión actual de n8n (1.34.2), salvo que tengamos habilitado un método de recuperación de contraseñas (no contemplado en esta guía), no se utilizará el email introducido para campañas publicitarias de la empresa de n8n. También puedes poner cualquier email ([email protected]) ya que en ningún momento se verifica el email.
Y con esto concluimos nuestra guía para instalar n8n en servidor. Espero que encuentres este post útil tanto para uso personal como empresarial y que te permita adentrarte en la automatización de tareas y la optimización de procesos. No dudes en explorar y adaptar n8n para satisfacer tus necesidades más específicas.
3 comentarios
Buenas noches, muchas gracias por las indicaciones.
¿Cuáles serían los comandos para las actualizaciones de versiones?
¿Cómo se podrían configurar backups?
Saludos
Buenos días Jose Ignacio,
> ¿Cuáles serían los comandos para las actualizaciones de versiones?
Para actualizar, por ejemplo, a la versión 1.38.0, utilizo esta serie de comandos:
sudo npm install -g [email protected]
sudo npm -g cache clean --force
sudo service n8n restart
Con esto de aquí, instalo la nueva versión de n8n, limpio la caché para eliminar archivos antiguos o redundantes y reinicio el servicio.
Personalmente, recomiendo actualizar a la última versión lo antes posible para evitar posibles sorpresas al saltar muchas versiones de una vez, y leer siempre las notas de la versión (Release Notes). También aconsejo tener dos entornos: un entorno de pruebas en local, para comprobar que la actualización ha sido exitosa; y el propio entorno de producción donde utilizas n8n habitualmente. Más detalles aquí: https://docs.n8n.io/hosting/installation/updating
Además, n8n aplica las actualizaciones y migraciones de forma incremental. Es decir, si actualizas de la versión 1.34.2 a la 1.38.0, se aplicarán también las migraciones de las versiones intermedias (1.35.0, 1.36.0 y 1.37.0). Las actualizaciones incrementales se aplicarán cuando se reinicie n8n (con el `sudo service n8n restart` que hemos visto anteriormente).
Por si acaso, debo recalcar que las versiones actuales de n8n (1.70.1 en el momento de escribir este comentario) ya no utilizan NodeJS 18, sino NodeJS 20, con lo que también habría que actualizar dicho entorno de ejecución.
> ¿Cómo se podrían configurar backups?
En nuestro caso, configuramos las copias de seguridad utilizando una plantilla muy similar a la siguiente, pero sustituyendo los nodos de Slack por Email: https://n8n.io/workflows/1534-back-up-your-n8n-workflows-to-github .
No realizamos copias de las credenciales, y esto es intencional. Es recomendable que las credenciales se gestionen mediante un gestor de contraseñas, y por lo tanto no están incluidas. Es cierto que al restaurar desde una copia de seguridad tendrás que introducir todas las credenciales nuevamente, pero preferimos este enfoque por razones de seguridad.
Si también deseas utilizar comandos de consola para hacer la copia de seguridad, puedes consultar lo siguiente: https://docs.n8n.io/hosting/cli-commands/#workflows
Espero haberte ayudado, un saludo.
Antoni Aloy Torrens
Muchas gracias por tu respuesta.
De todas formas siguiendo esos pasos, se ha instalado la versión de desarrollo, ¿cómo la puedo pasar a explotación?
También, no sería recomendable en un entorno de producción, instalarlo con postgress?