Instalamos n8n en FastPanel con Docker Compose: Guía clara
Publicado el 03.07.2025
En esta guía le mostraré cómo instalar fácilmente n8n, una potente herramienta para la automatización de flujos de trabajo, en su servidor con FastPanel, usando Docker Compose. FastPanel es ideal para la gestión de servidores web, y Docker Compose facilita el despliegue de aplicaciones complejas como n8n con sus dependencias (PostgreSQL y Redis).
Qué necesitarás
- Su servidor con FastPanel instalado.
- Un dominio o subdominio que usará para acceder a n8n (por ejemplo,
n8n.yourdomain.com). - Conocimientos básicos de SSH y la línea de comandos.
Paso 1: Preparación del servidor
Conéctese al servidor por SSH y cree el directorio:
sudo mkdir -p /opt/n8n_stack
cd /opt/n8n_stack
Paso 2: Creación de los archivos de configuración
Necesitará los siguientes archivos:
docker-compose.yml.envinit-data.shhealthcheck.js
2.1. docker-compose.yml
nano docker-compose.yml
version: '3.8'
x-shared: &shared
restart: always
image: docker.n8n.io/n8nio/n8n:1.91.3
env_file: .env
user: "1000:1000"
volumes:
- /opt/n8n_stack/n8n_storage:/home/node/.n8n
- ./healthcheck.js:/healthcheck.js
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
services:
postgres:
image: postgres:11
restart: always
env_file: .env
volumes:
- /opt/n8n_stack/db_storage:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
redis:
image: redis:6-alpine
restart: always
volumes:
- /opt/n8n_stack/redis_storage:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 10
n8n:
<<: *shared
ports:
- "127.0.0.1:5678:5678"
healthcheck:
test: ["CMD", "node", "/healthcheck.js"]
interval: 5s
timeout: 5s
retries: 10
n8n-worker:
<<: *shared
command: worker
depends_on:
- n8n
healthcheck:
test: ["CMD-SHELL", "wget -q -O - http://localhost:5678/healthz || exit 1"]
interval: 5s
timeout: 5s
retries: 10
2.2. .env
nano .env
# n8n
N8N_HOST=your_n8n_domain.com
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://your_n8n_domain.com/
N8N_ENCRYPTION_KEY=your_secure_password_for_n8n
GENERIC_TIMEZONE=Europe/Moscow
TZ=Europe/Moscow
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=your_db_name
DB_POSTGRESDB_USER=your_non_root_db_user
DB_POSTGRESDB_PASSWORD=your_non_root_db_password
# PostgreSQL (root)
POSTGRES_DB=your_db_name
POSTGRES_USER=your_db_user
POSTGRES_PASSWORD=your_db_password
# PostgreSQL (non-root for n8n)
POSTGRES_NON_ROOT_USER=your_non_root_db_user
POSTGRES_NON_ROOT_PASSWORD=your_non_root_db_password
2.3. init-data.sh
nano init-data.sh
#!/bin/bash
set -e;
if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
DO
\$do\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '${POSTGRES_NON_ROOT_USER}') THEN
CREATE USER "${POSTGRES_NON_ROOT_USER}" WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
ELSE
ALTER USER "${POSTGRES_NON_ROOT_USER}" WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
END IF;
END
\$do\$;
GRANT ALL PRIVILEGES ON DATABASE "${POSTGRES_DB}" TO "${POSTGRES_NON_ROOT_USER}";
EOSQL
else
echo "SETUP INFO: Las variables de entorno POSTGRES_NON_ROOT_USER o POSTGRES_NON_ROOT_PASSWORD no están definidas."
fi
chmod +x init-data.sh
2.4. healthcheck.js
nano healthcheck.js
var http = require('http');
var options = {
host: '127.0.0.1',
port: 5678,
path: '/healthz',
method: 'GET',
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
process.exit(res.statusCode === 200 ? 0 : 1);
});
req.on('error', function(e) {
console.log('ERROR: ' + e.message);
process.exit(1);
});
req.end();
Paso 3: Iniciar n8n con Docker Compose
docker compose up -d
Compruebe el estado:
docker compose ps
Todos los servicios deben tener el estado running o healthy.
Paso 4: Configuración de FastPanel
Entra en FastPanel → Sitios → Agregar sitio.
Usa el dominio indicado en
.env(n8n.yourdomain.com).Después de crear el sitio:
- Vaya a la configuración del sitio.
- Habilite Proxy inverso (Reverse Proxy).
- Indique la dirección:
127.0.0.1:5678. - Asegúrese de que se haya emitido el certificado SSL (normalmente Let’s Encrypt lo hace automáticamente).
Soporte WebSocket (si es necesario configurar manualmente):
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Paso 5: Acceso a n8n
Abra en el navegador:
https://n8n.yourdomain.com
Verá la página de bienvenida de n8n. Todo está listo — puede comenzar a crear automatizaciones.
Si tiene preguntas o problemas — déjelos en los comentarios.
Reseñas relacionadas
Como siempre, rápido y de calidad. Para asuntos con los servidores, me dirijo a Mijaíl.
Vadim_U · Migración de n8n a otro servidor
Cliente habituado14.11.2025 · ⭐ 5/5
¡Como siempre, rápido y de calidad! Para asuntos relacionados con los servidores, me dirijo a Mijaíl.