Перейти до вмісту
VPS і сервери · 7 хв

n8n на сервері VPS: встановлення з Docker Compose і HTTPS через Caddy

Щоб розгорнути n8n на сервері, запустіть його в Docker Compose разом із PostgreSQL, а перед ним поставте Caddy: він сам отримує сертифікат Let's Encrypt, тож редактор і вебхуки працюють через HTTPS від першого запуску. На Ubuntu 24.04 або Debian 12 усе займає близько 15 хвилин.

Що знадобиться

  • VPS. Pulse (2 vCPU, 2 ГБ RAM, 15 ГБ NVMe, $10 на місяць) — комфортний мінімум для n8n із PostgreSQL. Якщо плануєте важкі сценарії з великими JSON чи файлами, беріть Drive.
  • Домен або піддомен (наприклад, n8n.example.com) з A-записом на IP сервера. Без нього Caddy не випустить сертифікат.
  • Root-доступ по SSH (див. Підключення по SSH) і встановлений Docker (див. Docker на VPS).

1. Файрвол і Docker

apt update && apt install -y ufw
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw allow 443/udp
ufw enable
curl -fsSL https://get.docker.com | sh

Порти публікує лише Caddy. n8n і PostgreSQL лишаються всередині мережі Docker, бо опубліковані порти Docker обходять ufw.

2. Секрети

mkdir -p /opt/n8n && cd /opt/n8n
cat > .env <<EOF
DOMAIN=n8n.example.com
DB_PASSWORD=$(openssl rand -hex 16)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .env

Збережені облікові дані n8n шифрує ключем N8N_ENCRYPTION_KEY. Втратите його — і всі збережені credentials стануть нечитабельними, тож робіть резервну копію .env разом із базою.

3. docker-compose.yml

/opt/n8n/docker-compose.yml:

services:
  db:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: n8n
    volumes:
      - db:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on: [db]
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: db
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${DB_PASSWORD}
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_HOST: ${DOMAIN}
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://${DOMAIN}/
      N8N_PROXY_HOPS: 1
      GENERIC_TIMEZONE: Europe/Berlin
      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: 168
    volumes:
      - n8n:/home/node/.n8n

  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data

volumes:
  db:
  n8n:
  caddy_data:

У GENERIC_TIMEZONE вкажіть свій часовий пояс: за ним працюють вузли Cron і Schedule.

4. Caddyfile

/opt/n8n/Caddyfile (замініть домен):

n8n.example.com {
    reverse_proxy n8n:5678
}

WebSocket Caddy проксує одразу, тож живі оновлення в редакторі працюють без додаткових налаштувань.

5. Запуск

cd /opt/n8n
docker compose up -d
docker compose logs -f caddy n8n

Відкрийте https://n8n.example.com і одразу створіть обліковий запис власника. Доки ви цього не зробили, екземпляр дістанеться тому, хто першим відкриє сторінку.

Типові помилки

  • В адресах вебхуків localhost:5678. Не задано або неправильно задано WEBHOOK_URL. Виправте його в compose-файлі й виконайте docker compose up -d.
  • Немає сертифіката. A-запис ще не вказує на сервер або закриті порти 80/443. Точну причину покаже docker compose logs caddy.
  • Закінчується диск. Історія виконань зберігається в PostgreSQL. При 15 ГБ тримайте очищення увімкненим (як вище) і не зберігайте бінарні файли у виконаннях.
  • Оновлення. docker compose pull && docker compose up -d. Перед мажорними версіями читайте release notes n8n.
  • Резервні копії — ваша справа. docker compose exec -T db pg_dump -U n8n n8n > n8n.sql плюс файл .env, за розкладом і за межі сервера.

Хочете на такій самій схемі файли й календарі? Дивіться Nextcloud на VPS.

Замовити Pulse

n8n на сервері VPS: встановлення з Docker Compose і HTTPS через Caddy · dedisrv