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

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

Развитие: от ноды до ноды
Railway: первая проба пера
Самые простые туториалы были про развертывание n8n на собственном компьютере. Некоторые комментарии под такими видео ссылались на то, что развертывание n8n на собственной машине — не самая лучшая идея, и возможно, не самая удачная. Я тогда прислушался к их мнению и решил попробовать сразу поискать другие способы.
Подходящей оказалась платформа Railway. Бесплатный пробный период, $5 бонуса за привязку GitHub — всё выглядело перспективно. Я:
подключил GitHub;
получил API-ключ;
запустил
n8n
;настроил Telegram-бота.
И всё шло нормально, пока не начались проблемы с Telegram Trigger — он просто не отвечал. Ошибок в логах почти не было, но и связи — тоже. Я тратил часы, пробовал разные переменные, гуглил, спрашивал у нейросетей — без толку. Тогда в рекламе мне попался Yandex Cloud с двухмесячным бесплатным периодом. Я решил попробовать развернуть n8n на нем.

Виртуалка, 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 — отдельная песня. Нужно было:
Объединить три сертификата в один;
Подключить его через конфиг;
Настроить редирект на 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;
}
}

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.
Я только начал, но теперь точно знаю — могу не просто тестировать, а создавать решения с нуля.