Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| vm:n8n:01-install_vps [2025/08/10 19:22] – admin | vm:n8n:01-install_vps [2025/12/09 22:00] (текущий) – admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | Установка n8n через Docker | + | ====== |
| - | Комплексная установка на одну машину n8n, nginx-proxy, | + | |
| - | Шаг 1: Обновление системы | + | Инструкция по развертыванию n8n в Docker |
| - | < | + | |
| - | Шаг 2: Установи Docker | + | ===== Требования ===== |
| - | < | + | |
| - | sudo systemctl enable --now docker</ | + | |
| - | Шаг 3: Создай папку для n8n в /opt и выставь права | + | * Ubuntu 20.04/ |
| - | < | + | * Минимум 1 ГБ RAM |
| - | sudo chown -R $USER:$USER / | + | * Настроенный reverse proxy (Nginx Proxy Manager или аналог) |
| - | Шаг | + | ===== Шаг |
| - | < | + | |
| - | nano docker-compose.yml</ | + | |
| - | Шаг 5: Вставляем текст в файл yml | + | < |
| - | < | + | sudo apt update && sudo apt upgrade |
| - | nginx-proxy: | + | </code> |
| - | | + | |
| - | container_name: | + | |
| - | restart: always | + | |
| - | ports: | + | |
| - | - " | + | |
| - | - " | + | |
| - | volumes: | + | |
| - | - / | + | |
| - | - ./ | + | |
| - | - ./ | + | |
| - | - ./ | + | |
| - | labels: | + | |
| - | com.github.nginx-proxy.nginx: | + | |
| - | networks: | + | |
| - | - webproxy | + | |
| - | nginx-letsencrypt: | + | ===== Шаг 2: Установка Docker ===== |
| - | image: nginxproxy/ | + | |
| - | | + | ==== Вариант A: Установка из репозитория Ubuntu ==== |
| - | | + | |
| - | | + | <code bash> |
| - | | + | sudo apt install |
| - | | + | sudo systemctl enable |
| - | | + | </ |
| - | - /var/run/docker.sock:/var/run/docker.sock:ro | + | |
| - | - ./certs:/etc/nginx/certs | + | ==== Вариант B: Установка из официального репозитория Docker ==== |
| - | - ./vhost.d:/etc/nginx/vhost.d | + | |
| - | - ./html:/usr/share/nginx/html | + | <code bash> |
| - | | + | sudo apt install |
| - | - nginx-proxy | + | sudo install -m 0755 -d /etc/apt/keyrings |
| - | | + | curl -fsSL https:// |
| - | - webproxy | + | sudo chmod a+r /etc/apt/keyrings/ |
| + | |||
| + | echo "deb [arch=$(dpkg | ||
| + | |||
| + | sudo apt update | ||
| + | sudo apt install | ||
| + | </code> | ||
| + | |||
| + | ==== Добавление пользователя в группу docker ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo usermod -aG docker $USER | ||
| + | newgrp docker | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 3: Создание структуры папок ===== | ||
| + | |||
| + | <code bash> | ||
| + | sudo mkdir -p /opt/n8n/ | ||
| + | sudo chown -R $USER: | ||
| + | cd /opt/n8n | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 4: Создание сети Docker ===== | ||
| + | |||
| + | <code bash> | ||
| + | docker network create webproxy | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 5: Создание файла переменных окружения ===== | ||
| + | |||
| + | <code bash> | ||
| + | cd /opt/n8n | ||
| + | nano .env | ||
| + | </ | ||
| + | |||
| + | Содержимое файла **.env**: | ||
| + | |||
| + | < | ||
| + | N8N_ENCRYPTION_KEY=сгенерируйте_случайный_ключ | ||
| + | </ | ||
| + | |||
| + | Генерация ключа: | ||
| + | |||
| + | <code bash> | ||
| + | openssl rand -hex 32 | ||
| + | </ | ||
| + | |||
| + | ===== Шаг 6: Создание docker-compose.yml ===== | ||
| + | |||
| + | <code bash> | ||
| + | nano docker-compose.yml | ||
| + | </ | ||
| + | |||
| + | Содержимое файла **docker-compose.yml**: | ||
| + | <code yaml> | ||
| + | services: | ||
| n8n: | n8n: | ||
| - | image: n8nio/n8n | + | image: n8nio/n8n:latest |
| + | env_file: | ||
| + | - .env | ||
| container_name: | container_name: | ||
| restart: always | restart: always | ||
| environment: | environment: | ||
| - | - N8N_GENERIC_RESPONSE_MIDDLEWARE_TRUST_PROXY=true | ||
| - | - N8N_RUNNERS_ENABLED=true | ||
| - | - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true | ||
| - TZ=Europe/ | - TZ=Europe/ | ||
| - | | + | - N8N_HOST=n8n.example.com |
| - | - N8N_BASIC_AUTH_USER=admin | + | - WEBHOOK_URL=https:// |
| - | - N8N_BASIC_AUTH_PASSWORD=**pass** | + | - N8N_PROXY_HOPS=1 |
| - | | + | - N8N_SECURE_COOKIE=false |
| - | - WEBHOOK_URL=https:// | + | - N8N_ALLOW_CODE_ENV_VARS=true |
| - | - VIRTUAL_HOST=**host.test.ru** | + | |
| - | - VIRTUAL_PORT=5678 | + | |
| - | - LETSENCRYPT_HOST=**host.test.ru** | + | |
| - | - LETSENCRYPT_EMAIL=**email** | + | |
| - N8N_EXPERIMENTAL_CHAT=true | - N8N_EXPERIMENTAL_CHAT=true | ||
| - N8N_ENABLE_COMMUNITY_NODES=true | - N8N_ENABLE_COMMUNITY_NODES=true | ||
| - N8N_ALLOW_SUPERDANGEROUS_EXECUTION=true | - N8N_ALLOW_SUPERDANGEROUS_EXECUTION=true | ||
| + | - N8N_ALLOW_DANGEROUS_NODES=true | ||
| - N8N_CUSTOM_EXTENSIONS=/ | - N8N_CUSTOM_EXTENSIONS=/ | ||
| + | - N8N_SMTP_HOST=mail.example.com | ||
| + | - N8N_SMTP_PORT=465 | ||
| + | - N8N_SMTP_USER=noreply@example.com | ||
| + | - N8N_SMTP_PASS=your_smtp_password | ||
| + | - N8N_SMTP_SENDER=noreply@example.com | ||
| + | - N8N_SMTP_SECURE=true | ||
| volumes: | volumes: | ||
| - ./ | - ./ | ||
| Строка 83: | Строка 120: | ||
| networks: | networks: | ||
| webproxy: | webproxy: | ||
| - | external: true</ | + | external: true |
| - | | + | </ |
| - | Шаг | + | ===== Шаг |
| - | < | + | |
| - | Шаг 7: Создаем все необходимые папки для маппинга дисков и запускаем контейнер | + | < |
| - | < | + | |
| - | sudo chown -R $USER:$USER /opt/n8n | + | |
| cd /opt/n8n | cd /opt/n8n | ||
| - | docker-compose up -d</ | + | docker |
| + | </ | ||
| + | |||
| + | ===== Шаг 8: Проверка статуса ===== | ||
| + | |||
| + | <code bash> | ||
| + | docker compose ps | ||
| + | docker compose logs -f n8n | ||
| + | </ | ||
| + | |||
| + | ====== N8N_ENCRYPTION_KEY ====== | ||
| + | |||
| + | ===== Назначение ===== | ||
| + | |||
| + | **N8N_ENCRYPTION_KEY** — ключ шифрования для защиты конфиденциальных данных в базе n8n: | ||
| + | |||
| + | * Credentials (API ключи, пароли, | ||
| + | * OAuth токены | ||
| + | * Другие секретные данные в workflows | ||
| + | |||
| + | **Важно: | ||
| + | |||
| + | ===== Поведение n8n ===== | ||
| + | |||
| + | ^ Ситуация ^ Поведение ^ | ||
| + | | Ключ не задан | n8n автоматически сгенерирует случайный ключ и сохранит в файл config | | ||
| + | | Ключ задан в .env | Используется указанный ключ | | ||
| + | | Ключ изменён | Все ранее сохранённые credentials перестанут работать | | ||
| + | | Миграция на другой сервер | Необходимо использовать тот же ключ | | ||
| + | |||
| + | ===== Как посмотреть текущий ключ ===== | ||
| + | |||
| + | ==== Способ 1: Из файла config на хосте ==== | ||
| + | |||
| + | <code bash> | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | ==== Способ 2: Изнутри контейнера ==== | ||
| + | |||
| + | <code bash> | ||
| + | docker compose exec n8n cat / | ||
| + | </ | ||
| + | |||
| + | ==== Способ 3: Через grep ==== | ||
| + | |||
| + | <code bash> | ||
| + | grep -i encryptionkey / | ||
| + | </ | ||
| + | |||
| + | ===== Рекомендации ===== | ||
| + | |||
| + | **Новая установка n8n:** | ||
| + | * Сгенерируйте ключ заранее: | ||
| + | * Добавьте ключ в файл .env | ||
| + | * Сохраните ключ в надёжном месте (менеджер паролей, | ||
| + | |||
| + | **Существующая установка n8n:** | ||
| + | * Не добавляйте новый ключ в .env | ||
| + | * Используйте ключ, который n8n уже сгенерировал автоматически | ||
| + | * Если нужно перенести — скопируйте ключ из файла config | ||
| + | |||
| + | **Миграция на другой сервер: | ||
| + | * Скопируйте папку n8n_data целиком | ||
| + | * Убедитесь, | ||
| + | * Проверьте работу credentials после миграции | ||
| + | |||
| + | ====== Обновление n8n ====== | ||
| + | |||
| + | ===== Стандартное обновление ===== | ||
| + | |||
| + | <code bash> | ||
| + | cd /opt/n8n | ||
| + | docker compose pull | ||
| + | docker | ||
| + | </ | ||
| + | |||
| + | ===== Обновление с резервным копированием ===== | ||
| + | |||
| + | <code bash> | ||
| + | cd /opt/n8n | ||
| + | tar -czvf n8n_backup_$(date +%Y%m%d).tar.gz n8n_data .env docker-compose.yml | ||
| + | docker compose pull | ||
| + | docker compose up -d | ||
| + | </ | ||
| + | |||
| + | ===== Очистка старых образов ===== | ||
| + | |||
| + | <code bash> | ||
| + | docker image prune -f | ||
| + | </ | ||
| + | |||
| + | ===== Проверка версии ===== | ||
| + | |||
| + | <code bash> | ||
| + | docker inspect n8n --format ' | ||
| + | docker compose logs --tail 50 n8n | ||
| + | </ | ||
| + | |||
| + | ====== Полезные команды ====== | ||
| + | |||
| + | ^ Команда ^ Описание ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | ====== Резервное копирование ====== | ||
| + | |||
| + | ===== Создание бэкапа ===== | ||
| + | |||
| + | <code bash> | ||
| + | cd /opt/n8n | ||
| + | tar -czvf n8n_backup_$(date +%Y%m%d_%H%M%S).tar.gz n8n_data .env docker-compose.yml | ||
| + | </ | ||
| + | |||
| + | ===== Восстановление из бэкапа ===== | ||
| + | |||
| + | <code bash> | ||
| + | cd /opt/n8n | ||
| + | docker compose down | ||
| + | tar -xzvf n8n_backup_YYYYMMDD_HHMMSS.tar.gz | ||
| + | docker compose up -d | ||
| + | </ | ||
| + | |||
| + | ====== Устранение неполадок ====== | ||
| + | |||
| + | ===== Проверка логов ===== | ||
| + | |||
| + | <code bash> | ||
| + | docker compose logs n8n | ||
| + | </ | ||
| + | |||
| + | ===== Перезапуск сервиса ===== | ||
| + | |||
| + | <code bash> | ||
| + | cd /opt/n8n | ||
| + | docker compose down | ||
| + | docker compose up -d | ||
| + | </ | ||
| + | |||
| + | ===== Проверка сети ===== | ||
| + | |||
| + | <code bash> | ||
| + | docker network inspect webproxy | ||
| + | </ | ||
| + | |||
| + | ====== Переменные окружения ====== | ||
| + | |||
| + | ^ Переменная ^ Описание ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | ====== Ссылки ====== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||