Ранее мы разбирали установку n8n на свой сервер со стандартной базой SQLite. Для тестов и простых задач этого достаточно, но если вы планируете нагружать систему или хранить много данных, SQLite начнет «задыхаться» (блокировки базы, медленная работа).
Сегодня делюсь мануалом по настройке Production-ready версии.
Наш стек:
- n8n - сама платформа для автоматизации.
- PostgreSQL - надежная база данных (убирает ботлнеки SQLite).
- Portainer - удобный веб-интерфейс для Docker (забываем про консоль).
- 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
Что делать дальше?
- Portainer: Идем на
https://IP-СЕРВЕРА:9443и настраиваем учетную запись администратора. Это важно сделать в течение 5 минут с момента поднятия контейнера, как я писал выше. - NPM: Идем на
http://IP-СЕРВЕРА:81(при первом запуске также запросит создать администраторскую учетку) - В NPM настраиваем Proxy Hosts:
n8n.site.com→ IP:5678portainer.site.com→ IP:9443 (Scheme: https, Websockets: ON)nginx.site.com→ IP:81
Автоматизация
А теперь самое главное. Если лень делать все вышеописанное вручную, я упаковал этот процесс в bash-скрипт. Он сам установит и настроит все необходимое, сгенерирует пароль для базы, создаст директрории и поднимет контейнеры за 2 минуты. Останется только прокинуть вручную поддомены в npm.
🔪 Если информация оказалась полезной - подпишись на канал “Не ешь с ножа!”, чтоб не пропустить следующий пост. Там я расскажу про то, как обеспечить безопасность сервера с n8n.