Перейти к содержимому

Docker

Развёртывание n8n через Docker и Docker Compose

Окно терминала
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n

Откройте http://localhost:5678

docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://${N8N_HOST}/
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
interval: 5s
timeout: 5s
retries: 5
volumes:
n8n_data:
postgres_data:
.env
POSTGRES_PASSWORD=your_secure_password
N8N_HOST=n8n.example.com
N8N_ENCRYPTION_KEY=your_32_char_encryption_key_here
  1. Создайте файлы

    docker-compose.yml и .env

  2. Запустите

    Окно терминала
    docker-compose up -d
  3. Проверьте логи

    Окно терминала
    docker-compose logs -f n8n
  4. Откройте

    http://localhost:5678 (или ваш домен)

Окно терминала
# Остановить
docker-compose down
# Обновить образ
docker-compose pull
# Запустить
docker-compose up -d
VolumeСодержимое
n8n_dataКонфигурация, SQLite DB (если используется)
postgres_dataДанные PostgreSQL
Окно терминала
# Бэкап
docker run --rm -v n8n_data:/data -v $(pwd):/backup \
alpine tar czf /backup/n8n_backup.tar.gz /data
# Восстановление
docker run --rm -v n8n_data:/data -v $(pwd):/backup \
alpine tar xzf /backup/n8n_backup.tar.gz -C /
server {
listen 80;
server_name n8n.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name n8n.example.com;
ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
}
# docker-compose.yml с Traefik
services:
n8n:
image: n8nio/n8n
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.example.com`)"
- "traefik.http.routers.n8n.tls=true"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
# ... остальные настройки
services:
n8n:
# ...
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
services:
n8n:
# ...
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '0.5'
memory: 1G
services:
n8n:
# ...
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"