Miniflux on Heroku

#heroku #miniflux

В качестве feed reader использую miniflux . Считаю его одним из самых удобных и функциональных. При этом размещал его на своем сервере. А тут решил вынести его на отдельный хостинг, чтобы не хранить все в одной карзине.

Долго выбирал, куда его можно перенести. Рассматривал бесплатные варианты. Так как нести дополнительные расходы не хотелось. Были варианты организовать новые сервера в облаке Oracle или Google. Но поднимать отдельный сервер под такой простой сервис затратно по времени и усилиям. И тут вспомнил про Heroku . Тарифные планы у них уже несколько раз менялись. И на сегодняшний день есть возможность использования приложений бесплатно до 550 часов в месяц для обычного аккаунта и до 1000 часов в месяц для аккаунта с платежной информацией.

Единственное ограничение для бесплатного аккаунта в том, что Dyno уходят в сон, если в течение 30 минут к ним не было обращений. При следующем обращении они довольно быстро поднимаются, но в случае с Miniflux нам необходимо чтобы приложение работало 24x7. И таким образом нам необходимо будет создать автоматические обращения на свой домен.

Heroku CLI

Изначально необходимо провести регистрацию на сайте Heroku и затем установить консольный клиент.

Установка приложение описана в официальной документации , где приводяться необходимые действия, для MacOS выполняем установку из homebrew:

brew tap heroku/brew && brew install heroku
heroku autocomplete

Вторая строка необходимо для того, чтобы клиент авторизовался и включилось автодополнение в командной строке.

Теперь все готово к работе.

Minilux

В официальной документации Miniflux приводятся необходимые шаги для того, чтобы запустить свое приложение в окружении Heroku:

git clone https://github.com/miniflux/v2.git miniflux
git checkout 2.0.26
heroku apps:create
heroku addons:create heroku-postgresql:hobby-dev

Кратко, клонируем репозиторий в директорию miniflux, переходим в нее, переключаемся на последнюю стабильную версию, создаем Heroku приложение и подключаем к нему Postgres дополнение.

Теперь необходимо задать переменные приложения, которые будут использоваться в работе. В официальной документации приводятся только самые основные, мы же зададим все необходимые:

heroku config:set RUN_MIGRATIONS=1
heroku config:set CREATE_ADMIN=1
heroku config:set ADMIN_USERNAME=admin
heroku config:set ADMIN_PASSWORD=test123
# additional settings
heroku config:set BASE_URL=https://miniflux.domain.org
heroku config:set POLLING_FREQUENCY=10
heroku config:set POCKET_CONSUMER_KEY=sdfjkjhksdfkjh

Дополнительно задаем BASE_URL для использования собственного домена, меняем POLLING_FREQUENCY на опрос фидов раз в 10 минут, против стандартных раз в час. И задаем POCKET_CONSUMER_KEY, который берем из параметров getpocket, если планируем его использовать в своем веб-приложении.

Осталось запустить приложение:

git push heroku master

И по завершении операции, у меня на это ушло порядка 5 минут, удаляем уже ненужные переменные из окружения:

heroku config:unset CREATE_ADMIN
heroku config:unset ADMIN_USERNAME
heroku config:unset ADMIN_PASSWORD

Осталось только прикрутить домен к своему приложению:

heroku domains:add miniflux.domain.org

И в совем доменном регистраторе изменить CNAMR для данного поддомена на значение из параметров, которое можно получить из команды:

heroku domains

Постоянная работа

Как уже указывал выше бесплатное приложение, если не используется в течение 30 минут, будет засыпать до момента следующего обращения к нему. Чтобы этого избежать, необходимо организовать периодические обращения от внешнего сервиса. К примеру с сервиса uptimerobot .

Регистрируемся, добавляем домен для проверки, стандартных 5 минут вполне достаточно.

Таким образом, во-первых, это не даст уснуть приложению, и во-вторых даст понимание по стабильности работы приложения на протяженнии времени.