Апгрейд n8n. Переходим на профессиональный стек (n8n + Postgres + Docker)

Ранее мы разбирали установку n8n на свой сервер со стандартной базой SQLite. Для тестов и простых задач этого достаточно, но если вы планируете нагружать систему или хранить много данных, SQLite начнет «задыхаться» (блокировки базы, медленная работа). Сегодня делюсь мануалом по настройке Production-ready версии.

Наш стек:

  1. n8n - сама платформа для автоматизации.
  2. PostgreSQL - надежная база данных (убирает ботлнеки SQLite).
  3. Portainer - удобный веб-интерфейс для Docker (забываем про консоль).
  4. Nginx Proxy Manager (NPM) - управление доменами и SSL в пару кликов.

Инструкция (Ubuntu 20.04 - 24.04)

Нужен чистый VPS и домен, направленный на IP сервера.

Ставим Docker Обновляем систему и накатываем свежий Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh

Готовим структуру папок Настроим хранение данных правильно, чтобы не терять их при перезапусках сервера:

sudo mkdir -p /docker_volumes/{postgres_n8n,npm_data,npm_letsencrypt,n8n_data}

Запускаем Portainer ⚠️ Важно: После запуска у нас будет 5 минут, чтобы зайти в админку и создать пароль, иначе сработает блокировка и контейнер нужно будет перезапускать.

docker run -d --name portainer --restart=always \
  -p 8000:8000 -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data portainer/portainer-ce:latest

Запускаем Nginx Proxy Manager Создаем файл docker-compose.yml для прокси:

version: "3.8"
services:
  app:
    image: "jc21/nginx-proxy-manager:latest"
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - /docker_volumes/npm_data:/data
      - /docker_volumes/npm_letsencrypt:/etc/letsencrypt

Запускаем: docker compose up -d

Запускаем связку n8n + Postgres Создаем отдельный docker-compose.yml для n8n:

version: "3.8"
services:
  postgres:
    image: postgres:16
    container_name: postgres_n8n
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ПРИДУМАЙТЕ_ПАРОЛЬ
      POSTGRES_DB: n8n
    volumes:
      - /docker_volumes/postgres_n8n:/var/lib/postgresql/data
    networks:
      - n8n_net
 
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres_n8n
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=ТОТ_ЖЕ_ПАРОЛЬ
      - N8N_HOST=n8n.yourdomain.com
      - WEBHOOK_URL=https://n8n.yourdomain.com
    depends_on:
      - postgres
    networks:
      - n8n_net
 
networks:
  n8n_net:
    driver: bridge

Запускаем: docker compose up -d


Что делать дальше?

  1. Portainer: Идем на https://IP-СЕРВЕРА:9443 и настраиваем учетную запись администратора. Это важно сделать в течение 5 минут с момента поднятия контейнера, как я писал выше.
  2. NPM: Идем на http://IP-СЕРВЕРА:81 (при первом запуске также запросит создать администраторскую учетку)
  3. В NPM настраиваем Proxy Hosts:
    • n8n.site.com → IP:5678
    • portainer.site.com → IP:9443 (Scheme: https, Websockets: ON)
    • nginx.site.com → IP:81

Автоматизация

А теперь самое главное. Если лень делать все вышеописанное вручную, я упаковал этот процесс в bash-скрипт. Он сам установит и настроит все необходимое, сгенерирует пароль для базы, создаст директрории и поднимет контейнеры за 2 минуты. Останется только прокинуть вручную поддомены в npm.

🔗 Забирай на GitHub

🔪 Если информация оказалась полезной - подпишись на канал “Не ешь с ножа!”, чтоб не пропустить следующий пост. Там я расскажу про то, как обеспечить безопасность сервера с n8n.

n8n docker devops tutorial