Как стать автором
Обновить

Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx

Уровень сложностиПростой

История о том, как попытка автоматизировать рутину привела к открытию и прокачке моих технических навыков в DevOps.

Сначала я думал, что справлюсь за пару часов. В итоге — несколько суток, десятки ошибок, и первый боевой сервер с доменом, Docker и полноценным развертыванием n8n. История о том, как попытка автоматизировать рутину привела к открытию и прокачке моих технических навыков.

Я создал свой проект с полноценной документацией с сылкой на Github по развертыванию n8n на собственном сервере.

Завязка

Изначально я хотел лишь сократить рутинные задачи. Создавал контент, работал над свежими идеями и понимал — мне не хватает времени на то, что действительно важно. На горизонте замаячила идея: создать собственного ИИ-ассистента, который автоматизирует мелочи вроде шаблонов, публикаций и повседневных действий.

В сети крутился хайп вокруг n8n — open-source, который можно развернуть на любом сервере, и с полной свободой действий. Конечно, до меня не сразу дошло, на официальном сайте очень дорогие тарифы. Поэтому я начал изучать туториалы на Ютубе. В этот момент я даже не подозревал, что эта идея затянет меня на неделю, подарит десятки ошибок и первый полноценный сервер.

Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx 1
Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx 1

Развитие: от ноды до ноды

Railway: первая проба пера

Самые простые туториалы были про развертывание n8n на собственном компьютере. Некоторые комментарии под такими видео ссылались на то, что развертывание n8n на собственной машине — не самая лучшая идея, и возможно, не самая удачная. Я тогда прислушался к их мнению и решил попробовать сразу поискать другие способы.

Подходящей оказалась платформа Railway. Бесплатный пробный период, $5 бонуса за привязку GitHub — всё выглядело перспективно. Я:

  • подключил GitHub;

  • получил API-ключ;

  • запустил n8n;

  • настроил Telegram-бота.

И всё шло нормально, пока не начались проблемы с Telegram Trigger — он просто не отвечал. Ошибок в логах почти не было, но и связи — тоже. Я тратил часы, пробовал разные переменные, гуглил, спрашивал у нейросетей — без толку. Тогда в рекламе мне попался Yandex Cloud с двухмесячным бесплатным периодом. Я решил попробовать развернуть n8n на нем.

Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx 2
Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx 2

Виртуалка, SSH и первый затык

Я развернул ВМ на Ubuntu 20.04 LTS, выбрав её за стабильность и поддержку. Конфигурация:

  • 2 vCPU

  • 50 ГБ SSD

  • Снятие с бонуса: 2683.50 руб/мес

Сгенерировал SSH-ключ через Git Bash. Первый облом: ключ исчез. После нескольких безуспешных попыток изменить его, понял — проще пересоздать ВМ. У Yandex Cloud есть ограничения:

ssh-keys

нельзя обновить на лету.

Подключение выглядело так:

ssh -i /c/Users/username/.ssh/n8n_key ubuntu@

Когда получилось зайти — был настоящий кайф. Я обновил систему, установил Docker, понял, что GUI у сервера не будет — только терминал. Ну что ж, поехали.

Docker, docker-compose, и n8n-raw.env

Следующим шагом стал

docker-compose.yml

и файл

n8n-raw.env

В нём я прописал:

N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=securepass123
N8N_HOST=mydomain.ru

Это позволило не держать всё в голове и запускать конфигурации быстрее. Первые ошибки появились почти сразу — что-то не так с путями, потом — с переменными. Без ChatGPT и stackoverflow не обошлось.

Домены и HTTPS

Купил домен

.ru

настроил A-записи, скачал сертификаты. Nginx — отдельная песня. Нужно было:

  1. Объединить три сертификата в один;

  2. Подключить его через конфиг;

  3. Настроить редирект на HTTPS.

Вот пример из моего nginx.conf:

server {
    listen 443 ssl;
    server_name mydomain.ru;
    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;
    location / {
        proxy_pass http://localhost:5678;
        proxy_set_header Host $host;
    }
}
Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx 3
Как я хотел создать ИИ-ассистента, а в итоге развернул свой первый сервер с n8n, Docker и Nginx 3

Telegram и «почему ты не работаешь?!»

Подключил Telegram Trigger — ноль. Ни один запрос не проходил. Ошибки:

  • Lost connection to the server

  • Webhook error: unexpected status code 403

  • Логи молчали или выдавали бессмысленное.

Проблема оказалась в том, что webhooks шли через HTTP, а всё у меня уже работало через HTTPS. Куки не обрабатывались, туннель API оказался лишним, docker не доверял IP клиента. Пришлось в docker-compose.yml прописывать:

networks:
      default:
        ipv4_address: 172.20.0.2

Потом был конфликт сертификатов, SSE и WebSocket. Я потратил день на всё это — и наконец бот ответил.

Разгрузка: спасение в Obsidian и GitHub

Всю документацию, команды, даже ошибки я хранил в Obsidian. Там же создавал шаблоны, чтобы не печатать одни и те же команды. Это было моим вторым спасением после ChatGPT.

Когда всё начало получаться — создал репозиторий. Сейчас там:

  • README.md с пошаговыми действиями;

  • n8n-raw.env для автоматизации запуска;

  • Docker-конфиги.

Проект пока не идеален, но рабочий и повторяемый.

Финал: в этой истории я вырос

Когда Telegram наконец сработал — было 3 часа ночи. Я сидел в темноте, всматривался в терминал и не верил. Всё. Бот работает. HTTPS есть. Docker жив. Я сам развернул свой первый полноценный сервер. Сам. С нуля. С ошибками. Без опыта.

Теперь я могу:

  • Развернуть ВМ и подключиться через SSH;

  • Настроить Docker и Nginx;

  • Создать и связать домен;

  • Конфигурировать n8n под прод;

  • Документировать всё на GitHub.

Я только начал, но теперь точно знаю — могу не просто тестировать, а создавать решения с нуля.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.