{"id":280,"date":"2026-03-16T10:45:00","date_gmt":"2026-03-16T09:45:00","guid":{"rendered":"https:\/\/blumhost.net\/blog\/?p=280"},"modified":"2026-03-15T22:47:19","modified_gmt":"2026-03-15T21:47:19","slug":"instalar-n8n-docker-vps","status":"publish","type":"post","link":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/","title":{"rendered":"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026)"},"content":{"rendered":"\n<p>Esta gu\u00eda explica paso a paso c\u00f3mo instalar <strong>n8n con Docker en un VPS Linux<\/strong> (Ubuntu 24.04 LTS recomendado), publicarlo con tu dominio, activar SSL con Let&#8217;s Encrypt y dejarlo funcionando en producci\u00f3n de forma estable. Sin rodeos, sin pasos innecesarios.<\/p>\n\n\n\n<p>n8n es una herramienta de automatizaci\u00f3n de workflows open-source. Con un VPS puedes tener n8n self-hosted: tus datos en tu servidor, sin l\u00edmites por ejecuci\u00f3n y sin pagar por cada workflow activo. Exactamente lo que necesitas si usas n8n en serio.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_74 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabla de contenidos\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Requisitos_previos\" >Requisitos previos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_1_Preparar_el_servidor\" >Paso 1: Preparar el servidor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_2_Instalar_Docker_y_Docker_Compose\" >Paso 2: Instalar Docker y Docker Compose<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_3_Instalar_Nginx_como_reverse_proxy\" >Paso 3: Instalar Nginx como reverse proxy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_4_Obtener_el_certificado_SSL_con_Certbot\" >Paso 4: Obtener el certificado SSL con Certbot<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_5_Crear_la_estructura_de_directorios\" >Paso 5: Crear la estructura de directorios<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_6_Crear_el_archivo_docker-composeyml\" >Paso 6: Crear el archivo docker-compose.yml<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_7_Configurar_Nginx_como_reverse_proxy_para_n8n\" >Paso 7: Configurar Nginx como reverse proxy para n8n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_8_Arrancar_N8N\" >Paso 8: Arrancar N8N<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_9_Configurar_autenticacion_basica\" >Paso 9: Configurar autenticaci\u00f3n b\u00e1sica<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Paso_10_Configurar_renovacion_automatica_del_SSL\" >Paso 10: Configurar renovaci\u00f3n autom\u00e1tica del SSL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Comandos_utiles_para_el_mantenimiento_diario\" >Comandos \u00fatiles para el mantenimiento diario<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Buenas_practicas_para_n8n_en_produccion\" >Buenas pr\u00e1cticas para n8n en producci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Solucion_de_problemas_habituales\" >Soluci\u00f3n de problemas habituales<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#Proximos_pasos\" >Pr\u00f3ximos pasos<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Requisitos_previos\"><\/span>Requisitos previos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Antes de empezar necesitas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un <strong>VPS con Ubuntu 24.04 LTS<\/strong> (tambi\u00e9n funciona con Debian 12). M\u00ednimo 1 vCPU y 2 GB RAM para uso personal; 2 vCPU y 4 GB RAM para producci\u00f3n con varios workflows activos. Consulta los <a href=\"https:\/\/blumhost.net\/vps-n8n\" target=\"_blank\" rel=\"noreferrer noopener\">planes VPS para n8n de BlumHost<\/a> con los requisitos detallados.<\/li>\n\n\n\n<li>Un <strong>dominio o subdominio<\/strong> apuntando a la IP del VPS (registro A configurado y propagado)<\/li>\n\n\n\n<li><strong>Acceso SSH<\/strong> al servidor con usuario root o con sudo<\/li>\n\n\n\n<li>Conocimientos b\u00e1sicos de terminal Linux (no necesitas ser experto, esta gu\u00eda cubre cada comando)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_1_Preparar_el_servidor\"><\/span>Paso 1: Preparar el servidor<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Con\u00e9ctate al VPS por SSH y actualiza el sistema:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">apt update &amp;&amp; apt upgrade -y\n<\/pre>\n\n\n\n<p>Instala paquetes b\u00e1sicos que necesitaremos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">apt install -y curl wget git ufw\n<\/pre>\n\n\n\n<p>Configura el firewall para permitir solo los puertos necesarios:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ufw allow ssh\nufw allow 80\nufw allow 443\nufw enable\n<\/pre>\n\n\n\n<p>Confirma con <code>y<\/code> cuando te lo pregunte. Ahora el servidor solo acepta conexiones SSH, HTTP y HTTPS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_2_Instalar_Docker_y_Docker_Compose\"><\/span>Paso 2: Instalar Docker y Docker Compose<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>N8N se despliega con Docker, que es la forma m\u00e1s limpia y mantenible de instalarlo. Docker Compose permite definir todos los servicios (n8n + base de datos + proxy) en un solo archivo.<\/p>\n\n\n\n<p>Instala Docker con el script oficial:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">curl -fsSL https:\/\/get.docker.com | sh\n<\/pre>\n\n\n\n<p>Verifica que Docker est\u00e1 funcionando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker --version\ndocker compose version\n<\/pre>\n\n\n\n<p>Deber\u00edas ver algo como <code>Docker version 26.x.x<\/code> y <code>Docker Compose version v2.x.x<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_3_Instalar_Nginx_como_reverse_proxy\"><\/span>Paso 3: Instalar Nginx como reverse proxy<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>n8n corre en el puerto 5678. Para publicarlo en el puerto 443 (HTTPS) con tu dominio, necesitas un reverse proxy. Nginx es la opci\u00f3n m\u00e1s sencilla.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">apt install -y nginx\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_4_Obtener_el_certificado_SSL_con_Certbot\"><\/span>Paso 4: Obtener el certificado SSL con Certbot<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">apt install -y certbot python3-certbot-nginx\ncertbot --nginx -d tu-dominio.com\n<\/pre>\n\n\n\n<p>Sustituye <code>tu-dominio.com<\/code> por tu dominio real. Certbot pedir\u00e1 un email para notificaciones de renovaci\u00f3n y configurar\u00e1 el certificado autom\u00e1ticamente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_5_Crear_la_estructura_de_directorios\"><\/span>Paso 5: Crear la estructura de directorios<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p \/opt\/n8n\ncd \/opt\/n8n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_6_Crear_el_archivo_docker-composeyml\"><\/span>Paso 6: Crear el archivo docker-compose.yml<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Crea el archivo de configuraci\u00f3n principal:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/opt\/n8n\/docker-compose.yml\n<\/pre>\n\n\n\n<p>Pega el siguiente contenido, sustituyendo los valores en MAY\u00daSCULAS:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">version: '3.8'\n\nservices:\n  postgres:\n    image: postgres:16\n    restart: always\n    environment:\n      POSTGRES_DB: n8n\n      POSTGRES_USER: n8n\n      POSTGRES_PASSWORD: TU_CONTRASE\u00d1A_POSTGRES\n    volumes:\n      - postgres_data:\/var\/lib\/postgresql\/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U n8n\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  n8n:\n    image: n8nio\/n8n:latest\n    restart: always\n    ports:\n      - \"5678:5678\"\n    environment:\n      - DB_TYPE=postgresdb\n      - DB_POSTGRESDB_HOST=postgres\n      - DB_POSTGRESDB_PORT=5432\n      - DB_POSTGRESDB_DATABASE=n8n\n      - DB_POSTGRESDB_USER=n8n\n      - DB_POSTGRESDB_PASSWORD=TU_CONTRASE\u00d1A_POSTGRES\n      - N8N_HOST=tu-dominio.com\n      - N8N_PORT=5678\n      - N8N_PROTOCOL=https\n      - WEBHOOK_URL=https:\/\/tu-dominio.com\/\n      - GENERIC_TIMEZONE=Europe\/Madrid\n      - TZ=Europe\/Madrid\n      - N8N_ENCRYPTION_KEY=UNA_CLAVE_ALEATORIA_32_CARACTERES\n    volumes:\n      - n8n_data:\/home\/node\/.n8n\n    depends_on:\n      postgres:\n        condition: service_healthy\n\nvolumes:\n  postgres_data:\n  n8n_data:\n<\/pre>\n\n\n\n<p><strong>Variables que debes personalizar:<\/strong><br>&#8211; <code>TU_CONTRASE\u00d1A_POSTGRES<\/code>: una contrase\u00f1a segura para la base de datos (usa letras, n\u00fameros y s\u00edmbolos)<br>&#8211; <code>tu-dominio.com<\/code>: tu dominio o subdominio real<br>&#8211; <code>UNA_CLAVE_ALEATORIA_32_CARACTERES<\/code>: genera una clave con <code>openssl rand -hex 16<\/code><\/p>\n\n\n\n<p>Para generar la clave de cifrado:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">openssl rand -hex 16\n<\/pre>\n\n\n\n<p>Guarda y cierra el archivo (<code>Ctrl+X<\/code>, <code>Y<\/code>, <code>Enter<\/code>).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_7_Configurar_Nginx_como_reverse_proxy_para_n8n\"><\/span>Paso 7: Configurar Nginx como reverse proxy para n8n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Crea la configuraci\u00f3n de Nginx para tu dominio:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/etc\/nginx\/sites-available\/n8n\n<\/pre>\n\n\n\n<p>Pega este contenido (sustituye <code>tu-dominio.com<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">server {\n    server_name tu-dominio.com;\n\n    location \/ {\n        proxy_pass http:\/\/localhost:5678;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_cache_bypass $http_upgrade;\n        proxy_read_timeout 300s;\n        proxy_connect_timeout 75s;\n    }\n\n    listen 443 ssl;\n    ssl_certificate \/etc\/letsencrypt\/live\/tu-dominio.com\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/tu-dominio.com\/privkey.pem;\n    include \/etc\/letsencrypt\/options-ssl-nginx.conf;\n    ssl_dhparam \/etc\/letsencrypt\/ssl-dhparams.pem;\n}\n\nserver {\n    if ($host = tu-dominio.com) {\n        return 301 https:\/\/$host$request_uri;\n    }\n    listen 80;\n    server_name tu-dominio.com;\n    return 404;\n}\n<\/pre>\n\n\n\n<p>Activa la configuraci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ln -s \/etc\/nginx\/sites-available\/n8n \/etc\/nginx\/sites-enabled\/\nnginx -t\nsystemctl reload nginx\n<\/pre>\n\n\n\n<p><code>nginx -t<\/code> debe devolver <code>syntax is ok<\/code> y <code>test is successful<\/code>. Si hay errores, revisa que el dominio en el archivo coincide exactamente con el del certificado SSL.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_8_Arrancar_N8N\"><\/span>Paso 8: Arrancar N8N<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/n8n\ndocker compose up -d\n<\/pre>\n\n\n\n<p>Docker descargar\u00e1 las im\u00e1genes (puede tardar 2-3 minutos la primera vez) y arrancar\u00e1 los servicios. Verifica que todo est\u00e1 corriendo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose ps\n<\/pre>\n\n\n\n<p>Deber\u00edas ver dos servicios con estado <code>Up<\/code>: <code>postgres<\/code> y <code>n8n<\/code>.<\/p>\n\n\n\n<p>Espera 30-60 segundos y abre tu navegador en <code>https:\/\/tu-dominio.com<\/code>. Ver\u00e1s el wizard de configuraci\u00f3n inicial de n8n para crear el usuario administrador.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_9_Configurar_autenticacion_basica\"><\/span>Paso 9: Configurar autenticaci\u00f3n b\u00e1sica<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>La primera vez que accedes a n8n, el wizard te pedir\u00e1 crear una cuenta de administrador. Elige una contrase\u00f1a fuerte.<\/p>\n\n\n\n<p>Para mayor seguridad, considera tambi\u00e9n:<\/p>\n\n\n\n<p><strong>Limitar acceso por IP<\/strong> si n8n es solo para tu equipo (a\u00f1adir en la configuraci\u00f3n de Nginx o con ufw):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Solo desde IPs espec\u00edficas\nufw allow from TU_IP_FIJA to any port 443\n<\/pre>\n\n\n\n<p><strong>Activar autenticaci\u00f3n de dos factores<\/strong> desde el panel de n8n: Settings \u2192 Personal \u2192 Two-factor authentication.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paso_10_Configurar_renovacion_automatica_del_SSL\"><\/span>Paso 10: Configurar renovaci\u00f3n autom\u00e1tica del SSL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Certbot renueva el certificado autom\u00e1ticamente, pero hay que asegurarse de que el servicio de renovaci\u00f3n est\u00e1 activo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl status certbot.timer\n<\/pre>\n\n\n\n<p>Si est\u00e1 activo, perfecto. Si no:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl enable certbot.timer\nsystemctl start certbot.timer\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comandos_utiles_para_el_mantenimiento_diario\"><\/span>Comandos \u00fatiles para el mantenimiento diario<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Ver logs de n8n en tiempo real:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/n8n &amp;&amp; docker compose logs -f n8n\n<\/pre>\n\n\n\n<p><strong>Actualizar n8n a la \u00faltima versi\u00f3n:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/n8n\ndocker compose pull\ndocker compose up -d\n<\/pre>\n\n\n\n<p><strong>Reiniciar n8n:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/n8n &amp;&amp; docker compose restart n8n\n<\/pre>\n\n\n\n<p><strong>Parar todos los servicios:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/opt\/n8n &amp;&amp; docker compose down\n<\/pre>\n\n\n\n<p><strong>Ver uso de recursos:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker stats\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Buenas_practicas_para_n8n_en_produccion\"><\/span>Buenas pr\u00e1cticas para n8n en producci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Usa PostgreSQL (ya est\u00e1 en el docker-compose).<\/strong> La configuraci\u00f3n anterior ya usa PostgreSQL en lugar de SQLite. PostgreSQL es imprescindible para producci\u00f3n: escala mejor, permite backups consistentes y no tiene los l\u00edmites de concurrencia de SQLite.<\/p>\n\n\n\n<p><strong>Configura backups de la base de datos.<\/strong> El VPS tiene backups diarios del disco completo incluidos, pero tambi\u00e9n puedes hacer backups espec\u00edficos de PostgreSQL:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker exec -t n8n-postgres-1 pg_dump -U n8n n8n &gt; \/backup\/n8n_$(date +%Y%m%d).sql\n<\/pre>\n\n\n\n<p>Puedes automatizarlo con un cron: <code>crontab -e<\/code> y a\u00f1ade:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0 3 * * * docker exec -t n8n-postgres-1 pg_dump -U n8n n8n &gt; \/opt\/backups\/n8n_$(date +\\%Y\\%m\\%d).sql\n<\/pre>\n\n\n\n<p><strong>Controla el historial de ejecuciones.<\/strong> n8n guarda el historial de todas las ejecuciones en la base de datos. Con el tiempo, esto puede crecer mucho. Configura el l\u00edmite en Settings \u2192 Executions \u2192 Save data of successful executions: elige \u00abLatest X\u00bb en lugar de \u00abAll\u00bb.<\/p>\n\n\n\n<p><strong>Monitoriza el uso de recursos.<\/strong> El VPS II (2 vCPU, 4 GB RAM) es suficiente para la mayor\u00eda de instalaciones de producci\u00f3n con n8n. Monitoriza con <code>htop<\/code> o <code>docker stats<\/code> si notas lentitud.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Solucion_de_problemas_habituales\"><\/span>Soluci\u00f3n de problemas habituales<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>N8N no arranca (error de base de datos):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose logs postgres\n<\/pre>\n\n\n\n<p>Si ves errores de permisos, prueba:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose down -v\ndocker compose up -d\n<\/pre>\n\n\n\n<p>Esto borra los vol\u00famenes y los recrea. Cuidado: perder\u00e1s los datos de n8n si ya ten\u00edas workflows guardados.<\/p>\n\n\n\n<p><strong>Los webhooks no funcionan:<\/strong><br>Verifica que <code>WEBHOOK_URL<\/code> en el docker-compose.yml es exactamente <code>https:\/\/tu-dominio.com\/<\/code> (con la barra al final). Reinicia n8n despu\u00e9s de cualquier cambio en las variables de entorno.<\/p>\n\n\n\n<p><strong>SSL caducado o error de certificado:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">certbot renew --force-renewal\nsystemctl reload nginx\n<\/pre>\n\n\n\n<p><strong>N8N va lento:<\/strong><br>Comprueba el uso de RAM con <code>free -h<\/code>. Si el sistema usa swap de forma intensiva, es se\u00f1al de que necesitas m\u00e1s RAM. Considera el VPS II (4 GB RAM) para producci\u00f3n con muchos workflows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Proximos_pasos\"><\/span>Pr\u00f3ximos pasos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Con n8n instalado y funcionando, puedes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Conectar tus primeras integraciones desde el panel de n8n<\/li>\n\n\n\n<li>Explorar los m\u00e1s de 400 nodos disponibles (Slack, Gmail, Webhook, HTTP Request, bases de datos&#8230;)<\/li>\n\n\n\n<li>Configurar workers para workflows intensivos si tienes colas grandes<\/li>\n\n\n\n<li>A\u00f1adir m\u00e1s instancias de n8n si necesitas escalar horizontalmente<\/li>\n<\/ul>\n\n\n\n<p>Si tienes dudas durante la instalaci\u00f3n o quieres que te ayudemos a configurarlo, <a href=\"https:\/\/blumhost.net\/contacto\" target=\"_blank\" rel=\"noreferrer noopener\">abre un ticket de soporte<\/a> tras contratar tu VPS y te guiamos paso a paso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>Esta gu\u00eda cubre la instalaci\u00f3n b\u00e1sica de producci\u00f3n. Para configuraciones avanzadas (m\u00faltiples workers, balanceo de carga, integraci\u00f3n con Redis), consulta la <a href=\"https:\/\/docs.n8n.io\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">documentaci\u00f3n oficial de n8n<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta gu\u00eda explica paso a paso c\u00f3mo instalar n8n con Docker en un VPS Linux (Ubuntu 24.04 LTS recomendado), publicarlo con tu dominio, activar SSL con Let&#8217;s Encrypt y dejarlo funcionando en producci\u00f3n de forma estable. Sin rodeos, sin pasos&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66,55],"tags":[76,48],"class_list":["post-280","post","type-post","status-publish","format-standard","hentry","category-tutoriales","category-vps","tag-n8n","tag-vps"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026) - Blog de BlumHost<\/title>\n<meta name=\"description\" content=\"Gu\u00eda paso a paso para instalar n8n con Docker en un VPS Linux (Ubuntu 24.04): configuraci\u00f3n de PostgreSQL, Nginx, SSL con Let&#039;s Encrypt ...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026) - Blog de BlumHost\" \/>\n<meta property=\"og:description\" content=\"Gu\u00eda paso a paso para instalar n8n con Docker en un VPS Linux (Ubuntu 24.04): configuraci\u00f3n de PostgreSQL, Nginx, SSL con Let&#039;s Encrypt ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog de BlumHost\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/BlumHost\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-16T09:45:00+00:00\" \/>\n<meta name=\"author\" content=\"Miguel Taboada\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Miguel Taboada\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\"},\"author\":{\"name\":\"Miguel Taboada\",\"@id\":\"https:\/\/blumhost.net\/blog\/#\/schema\/person\/33aa890af362ded38723fc4c1ef65ee7\"},\"headline\":\"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026)\",\"datePublished\":\"2026-03-16T09:45:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\"},\"wordCount\":1063,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blumhost.net\/blog\/#organization\"},\"keywords\":[\"N8N\",\"vps\"],\"articleSection\":[\"tutoriales\",\"VPS\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\",\"url\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\",\"name\":\"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026) - Blog de BlumHost\",\"isPartOf\":{\"@id\":\"https:\/\/blumhost.net\/blog\/#website\"},\"datePublished\":\"2026-03-16T09:45:00+00:00\",\"description\":\"Gu\u00eda paso a paso para instalar n8n con Docker en un VPS Linux (Ubuntu 24.04): configuraci\u00f3n de PostgreSQL, Nginx, SSL con Let's Encrypt ...\",\"breadcrumb\":{\"@id\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/blumhost.net\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blumhost.net\/blog\/#website\",\"url\":\"https:\/\/blumhost.net\/blog\/\",\"name\":\"Blog de BlumHost\",\"description\":\"Gu\u00eda completa con consejos pr\u00e1cticos, precios y ventajas reales para tu proyecto.\",\"publisher\":{\"@id\":\"https:\/\/blumhost.net\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blumhost.net\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blumhost.net\/blog\/#organization\",\"name\":\"Blog de BlumHost\",\"url\":\"https:\/\/blumhost.net\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/blumhost.net\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blumhost.net\/blog\/wp-content\/uploads\/2025\/05\/cropped-blumhost.webp\",\"contentUrl\":\"https:\/\/blumhost.net\/blog\/wp-content\/uploads\/2025\/05\/cropped-blumhost.webp\",\"width\":240,\"height\":67,\"caption\":\"Blog de BlumHost\"},\"image\":{\"@id\":\"https:\/\/blumhost.net\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/BlumHost\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blumhost.net\/blog\/#\/schema\/person\/33aa890af362ded38723fc4c1ef65ee7\",\"name\":\"Miguel Taboada\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/blumhost.net\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bf9731b74ae636e457ef0ddcebbeb20f37a75f89668501ce0a80767a29e02722?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bf9731b74ae636e457ef0ddcebbeb20f37a75f89668501ce0a80767a29e02722?s=96&d=mm&r=g\",\"caption\":\"Miguel Taboada\"},\"description\":\"Ingeniero en Telecomunicaciones e Inform\u00e1tica. Cre\u00e9 BlumHost para ofrecer un hosting distinto a los dem\u00e1s, que ofrezca la mejor atenci\u00f3n al cliente, al menor precio y con la mejor calidad.\",\"sameAs\":[\"https:\/\/blumhost.net\/\",\"https:\/\/es.linkedin.com\/in\/miguel-taboada-iglesias\"],\"url\":\"https:\/\/blumhost.net\/blog\/author\/miguel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026) - Blog de BlumHost","description":"Gu\u00eda paso a paso para instalar n8n con Docker en un VPS Linux (Ubuntu 24.04): configuraci\u00f3n de PostgreSQL, Nginx, SSL con Let's Encrypt ...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026) - Blog de BlumHost","og_description":"Gu\u00eda paso a paso para instalar n8n con Docker en un VPS Linux (Ubuntu 24.04): configuraci\u00f3n de PostgreSQL, Nginx, SSL con Let's Encrypt ...","og_url":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/","og_site_name":"Blog de BlumHost","article_publisher":"https:\/\/www.facebook.com\/BlumHost","article_published_time":"2026-03-16T09:45:00+00:00","author":"Miguel Taboada","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Miguel Taboada","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#article","isPartOf":{"@id":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/"},"author":{"name":"Miguel Taboada","@id":"https:\/\/blumhost.net\/blog\/#\/schema\/person\/33aa890af362ded38723fc4c1ef65ee7"},"headline":"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026)","datePublished":"2026-03-16T09:45:00+00:00","mainEntityOfPage":{"@id":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/"},"wordCount":1063,"commentCount":0,"publisher":{"@id":"https:\/\/blumhost.net\/blog\/#organization"},"keywords":["N8N","vps"],"articleSection":["tutoriales","VPS"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/","url":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/","name":"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026) - Blog de BlumHost","isPartOf":{"@id":"https:\/\/blumhost.net\/blog\/#website"},"datePublished":"2026-03-16T09:45:00+00:00","description":"Gu\u00eda paso a paso para instalar n8n con Docker en un VPS Linux (Ubuntu 24.04): configuraci\u00f3n de PostgreSQL, Nginx, SSL con Let's Encrypt ...","breadcrumb":{"@id":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blumhost.net\/blog\/instalar-n8n-docker-vps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blumhost.net\/blog\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo Instalar n8n con Docker en un VPS Linux (Gu\u00eda 2026)"}]},{"@type":"WebSite","@id":"https:\/\/blumhost.net\/blog\/#website","url":"https:\/\/blumhost.net\/blog\/","name":"Blog de BlumHost","description":"Gu\u00eda completa con consejos pr\u00e1cticos, precios y ventajas reales para tu proyecto.","publisher":{"@id":"https:\/\/blumhost.net\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blumhost.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blumhost.net\/blog\/#organization","name":"Blog de BlumHost","url":"https:\/\/blumhost.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blumhost.net\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/blumhost.net\/blog\/wp-content\/uploads\/2025\/05\/cropped-blumhost.webp","contentUrl":"https:\/\/blumhost.net\/blog\/wp-content\/uploads\/2025\/05\/cropped-blumhost.webp","width":240,"height":67,"caption":"Blog de BlumHost"},"image":{"@id":"https:\/\/blumhost.net\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/BlumHost"]},{"@type":"Person","@id":"https:\/\/blumhost.net\/blog\/#\/schema\/person\/33aa890af362ded38723fc4c1ef65ee7","name":"Miguel Taboada","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blumhost.net\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/bf9731b74ae636e457ef0ddcebbeb20f37a75f89668501ce0a80767a29e02722?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bf9731b74ae636e457ef0ddcebbeb20f37a75f89668501ce0a80767a29e02722?s=96&d=mm&r=g","caption":"Miguel Taboada"},"description":"Ingeniero en Telecomunicaciones e Inform\u00e1tica. Cre\u00e9 BlumHost para ofrecer un hosting distinto a los dem\u00e1s, que ofrezca la mejor atenci\u00f3n al cliente, al menor precio y con la mejor calidad.","sameAs":["https:\/\/blumhost.net\/","https:\/\/es.linkedin.com\/in\/miguel-taboada-iglesias"],"url":"https:\/\/blumhost.net\/blog\/author\/miguel\/"}]}},"_links":{"self":[{"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/posts\/280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/comments?post=280"}],"version-history":[{"count":1,"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/posts\/280\/revisions"}],"predecessor-version":[{"id":281,"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/posts\/280\/revisions\/281"}],"wp:attachment":[{"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/media?parent=280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/categories?post=280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blumhost.net\/blog\/wp-json\/wp\/v2\/tags?post=280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}