MAATRIX / Блог / Huginn на Ubuntu 24.04: пошаговая установка

Huginn на Ubuntu 24.04: пошаговая установка

MAATRIX

Если вам тесно в лимитах Zapier и IFTTT и не хочется отдавать доступ к почте, API и вебхукам стороннему облаку — логичный шаг поставить агентную систему автоматизации у себя. Huginn — открытый проект на Ruby on Rails, который умеет следить за сайтами, RSS-лентами, API и вебхуками, а затем действовать по вашим правилам: слать письма, публиковать в Telegram, дёргать другие сервисы. Установка немного дольше, чем у типового Node-приложения, — Rails-стек тянет за собой Ruby, отдельную базу и фоновые процессы, — но ниже расписан весь путь по шагам, без Docker, с systemd-сервисами и SSL на домене.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что понадобится

Huginn — не самое лёгкое приложение: сборка ассетов (assets:precompile) и одновременная работа нескольких фоновых процессов требуют памяти с запасом. На 1 ГБ RAM сборка ассетов почти гарантированно упадёт по OOM.

РесурсМинимумКомфортно
RAM2 ГБ (+ своп)4 ГБ
CPU1 vCPU2 vCPU
Диск20 ГБ SSD40 ГБ SSD
ОСUbuntu 24.04 LTS, чистая установка
Доменне обязателен для тестанужен для SSL

Дальше всё выполняется от sudo-пользователя без root, если не указано иное.

Системные пакеты, пользователь и своп

Обновляем систему и ставим сборочные зависимости — они нужны, чтобы собрать нативные расширения Ruby-гемов (nokogiri, pg и другие) и обработать изображения:

sudo apt update && sudo apt -y upgrade
sudo apt install -y git curl build-essential libssl-dev libreadline-dev \
  zlib1g-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev \
  libcurl4-openssl-dev libffi-dev libpq-dev imagemagick libmagickwand-dev \
  pkg-config autoconf bison

Создаём отдельного системного пользователя — Huginn не должен работать от root, и это же упростит настройку systemd-юнитов:

sudo useradd -m -s /bin/bash huginn
sudo passwd -l huginn   # блокируем вход по паролю, останется su/sudo -iu

Если оперативной памяти меньше 4 ГБ, добавьте своп — иначе assets:precompile на шаге сборки с высокой вероятностью убьёт процесс:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

PostgreSQL и Redis

Huginn поддерживает и PostgreSQL, и MySQL — ниже вариант с PostgreSQL как более предсказуемый в связке с Rails. Если разворачиваете базу отдельно или хотите более подробный разбор настройки — есть отдельная статья по установке PostgreSQL на Ubuntu 24.04.

sudo apt install -y postgresql postgresql-contrib redis-server
sudo systemctl enable --now postgresql redis-server

Создаём роль и базу для приложения:

sudo -u postgres psql <<'SQL'
CREATE ROLE huginn WITH LOGIN PASSWORD 'замените_на_свой_пароль';
CREATE DATABASE huginn_production OWNER huginn ENCODING 'UTF8';
SQL

Проверьте, что стандартный pg_hba.conf в Ubuntu 24.04 уже разрешает подключение к 127.0.0.1 по паролю (scram-sha-256 или md5) — обычно так и есть из коробки, менять ничего не нужно. Redis проверяется одной командой:

redis-cli ping   # должно вернуть PONG

Ruby через rbenv и .env-конфигурация

Ruby ставим версионным менеджером rbenv — так проще подобрать версию, которую реально требует Huginn (она зафиксирована в файле .ruby-version репозитория). Работаем уже от пользователя huginn:

sudo -iu huginn
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
exec $SHELL

Клонируем сам Huginn и ставим ту версию Ruby, которую требует проект:

git clone https://github.com/huginn/huginn.git ~/huginn
cd ~/huginn
cat .ruby-version          # смотрим требуемую версию
rbenv install "$(cat .ruby-version)"
rbenv local "$(cat .ruby-version)"
gem install bundler

Node.js для сборки фронтенд-ассетов ставим системно, от root, через NodeSource (актуальная LTS-ветка на конец августа 2026 — уточните версию под ваш случай, ниже пример с 20.x):

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

Готовим .env из шаблона и заполняем ключевые переменные:

cd ~/huginn
cp .env.example .env

Минимальный набор правок в .env:

DATABASE_ADAPTER=postgresql
DATABASE_NAME=huginn_production
DATABASE_USERNAME=huginn
DATABASE_PASSWORD=замените_на_свой_пароль
DATABASE_HOST=localhost
DATABASE_PORT=5432

REDIS_URL=redis://localhost:6379

APP_SECRET_TOKEN=вставьте_вывод_openssl_rand_hex_64
DOMAIN=huginn.example.com
FORCE_SSL=true
TIMEZONE=Europe/Moscow

INVITATION_CODE=придумайте_код_для_приглашений

APP_SECRET_TOKEN генерируется отдельной командой:

openssl rand -hex 64

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

Установка: bundle, база, ассеты

Ставим гемы в production-режиме, исключая группы для разработки и не тот СУБД-адаптер, который не используете:

cd ~/huginn
bundle install --deployment --without development test mysql

Создаём схему базы и заполняем стартовыми данными:

RAILS_ENV=production bundle exec rake db:create db:schema:load db:seed

Собираем фронтенд-ассеты — самый тяжёлый по памяти шаг, именно здесь чаще всего вылезает OOM на слабых тарифах:

RAILS_ENV=production bundle exec rake assets:precompile

Если процесс падает с ошибкой нехватки памяти — это почти всегда своп, который вы не добавили на шаге 2 (см. раздел выше), либо слишком маленький тариф для сборки. Первый пользователь, зарегистрированный через веб-интерфейс после запуска, автоматически становится администратором — держите это в уме и не публикуйте домен без INVITATION_CODE, пока не создали свой аккаунт.

Systemd, Nginx и SSL

В корне репозитория есть файл Procfile — в нём перечислены процессы, которые Huginn ожидает видеть в проде (обычно это веб-сервер и один-два фоновых воркера для очереди задач и планировщика). Откройте его и перенесите каждую строку в отдельный systemd-юнит по этому шаблону, подставив реальную команду:

# /etc/systemd/system/huginn-web.service
[Unit]
Description=Huginn web
After=network.target postgresql.service redis-server.service

[Service]
Type=simple
User=huginn
WorkingDirectory=/home/huginn/huginn
Environment=RAILS_ENV=production
Environment=PORT=3000
ExecStart=/home/huginn/.rbenv/shims/bundle exec rails server -e production -p 3000 -b 127.0.0.1
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

По тому же образцу создайте huginn-worker.service и huginn-schedule.service, заменив ExecStart на соответствующие строки из Procfile. Включаем и запускаем всё разом:

sudo systemctl daemon-reload
sudo systemctl enable --now huginn-web huginn-worker huginn-schedule
sudo systemctl status huginn-web

Теперь отдаём приложение наружу через nginx как reverse proxy на 127.0.0.1:3000:

# /etc/nginx/sites-available/huginn
server {
    listen 80;
    server_name huginn.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
sudo ln -s /etc/nginx/sites-available/huginn /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

SSL выпускаем certbot'ом:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d huginn.example.com

Не забудьте открыть файрвол — если UFW ещё не настроен, здесь есть пошаговая инструкция по установке и настройке UFW на Ubuntu 24.04:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли поставить Huginn на MySQL вместо PostgreSQL?

Да, проект поддерживает оба адаптера. Меняете DATABASE_ADAPTER=mysql2 в .env, ставите mysql-server и libmysqlclient-dev вместо postgres-пакетов и исключаете из bundle install группу postgresql, а не mysql.

Сколько реально нужно памяти в проде, а не на этапе сборки?

Зависит от количества и активности агентов — тех, что часто дёргают внешние API и обрабатывают большие ответы, будет заметно больше по памяти, чем тихих RSS-чекеров. Для одного-двух десятков агентов обычно достаточно тарифа на 2 ГБ с включённым свопом; при росте числа сценариев ориентируйтесь на реальную нагрузку через htop, а не на цифры из статьи.

После перезагрузки сервера Huginn не отвечает.

Проверьте, что все три unit'а (huginn-web, huginn-worker, huginn-schedule) включены командой enable, а не просто запущены через start — иначе они не поднимутся автоматически. То же самое касается postgresql и redis-server.

Нужен ли обязательно Docker?

Нет, описанный выше способ полностью нативный. У проекта есть и docker-compose вариант — он избавляет от возни с rbenv и системными библиотеками, но даёт меньше контроля над версиями и процессом сборки; если чистая установка кажется избыточной, посмотрите официальный docker-compose.yml в репозитории Huginn.

Как ограничить, кто может зарегистрироваться на моём инстансе?

Через переменную INVITATION_CODE в .env — без правильного кода регистрация в веб-интерфейсе недоступна. Задайте её до того, как откроете домен наружу.

Как обновить Huginn до новой версии?

Останавливаете сервисы, делаете git pull, bundle install --deployment, bundle exec rake db:migrate, bundle exec rake assets:precompile, затем systemctl restart huginn-web huginn-worker huginn-schedule. Перед обновлением на проде стоит сделать бэкап базы.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →