Feedbin のインストール

Posted on
Feedbin News a News aggregator News Feeder RSS RSSリーダー

結果的に、動作しなかったが、勿体ないので、記事は残しておく。

ニュースサイトの閲覧に、サーバー設置型であるニュースフィーダーの Fever を使っているのだが、ディスコンになってしまって、乗り換え先を探していたところ、オープンソースで公開されている Freebin がよさげだったので、Debian GNU/Linux 9 Stretch にインストールしてみた。Feedbin に月 $5 払えば、インストールなどいらないのだが、ドキュメントに書かれていない設定が多数あって、試行錯誤に丸一日費やしたので、どこかに残しておかないと勿体なかったというのもある。😁

まず、Stripe.com のアカウントが必要なので、サインアップする。

ダッシュボードの「テスト API キーの取得」に、公開可能キーとシークレットキーがあるので、これをいったんコピーしておく。

次に、サイドバーの Billing → 商品から、商品を 9 種類追加する。商品ごとの料金プランで、API ID に以下の値をひとつずつ設定する。面倒だが、Stripe.com に該当の API ID を持つ商品(料金プラン)がないとエラーになるので、頑張って設定する。

  1. basic-monthly
  2. basic-yearly
  3. basic-monthly-2
  4. basic-yearly-2
  5. basic-monthly-3
  6. basic-yearly-3
  7. free
  8. timed
  9. trial

設定が終わったら、インストール作業に入る。まず、Feedbin を実行するユーザーを作成する。

sudo useradd -m feedbin

実行には、memcahedelasticsearchruby が必要なので、インストールする。ただし、システムデフォルトの ruby は、バージョンが古い (2.3) ので、rvm から必要なバージョンを導入しなくてはならない。(無論、rbenv から導入してもよい)

sudo apt install dirmngr
sudo apt install apt-transport-https
sudo apt install curl
sudo apt install memcached
sudo apt install -t stretch-backports redis
sudo gpg --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E37D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | sudo bash -s stable
source /etc/profile.d/rvm.sh
sudo rvm install 2.5.0
sudo rvm install 2.6.1
sudo rvm use 2.6.1 --default

rvm グループにユーザーを追加しておく。

usermod -aG rvm feedbin

前提となるツール/ライブラリ群をインストールする。

sudo apt install build-essential
sudo apt install postgresql-client
sudo apt install libpq-dev
sudo apt install libxml2-dev
sudo apt install zlib1g-dev
sudo apt install libcurl4-openssl-dev
sudo apt install libidn11-dev
sudo apt install libmagick++-dev
sudo apt install libopencv-dev libopencv-calib3d-dev
sudo apt install libgmp3-dev

elsticsearch は、java で書かれているので、java をインストールする。折角なので、最新版を入れる。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EA8CACC073C3DB2A
echo "deb http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic main" | sudo tee /etc/apt/sources.list.d/linuxuprising-java.list
sudo apt update
sudo apt install oracle-java11-installer

elasticsearch 本体をインストールする。

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt update
apt install elasticsearch

/etc/default/elasticsearch を以下のように編集して、再起動。

JAVA_HOME=/usr/lib/jvm/java-11-oracle
systemctl enable elasticsearch
systemctl restart elasticsearch

次に、bundle をインストールする。

sudo gem install bundler

camo という、イメージプロキシの実行に必要なので、node.js をインストールする。

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt update
sudo apt install nodejs
sudo npm install -g coffee-script

camo をインストールする。

cd /srv/
sudo git clone https://github.com/atmos/camo.git
sudo rake bundle
chown -R feedbin:feedbin .

/lib/systemd/system/camo.service を作成する。

[Unit]
Description=Camo - image proxy
After=network.target

[Service]
WorkingDirectory=/srv/camo
Environment=CAMO_KEY=xxx (←ランダムな値を生成して指定する)
ExecStart=/usr/bin/coffee server.coffee
Restart=always
User=feedbin
Group=feedbin

[Install]
WantedBy=multi-user.target

camo サービスを有効にして、起動する。

systemctl enable camo
systemctl start camo

Feedbin 本体をインストールする。

cd /srv/
sudo git clone https://github.com/feedbin/feedbin.git
cd feedbin
sudo bundle
sudo RAILS_ENV=production rake secret
sudo cp .env.example .env

.env ファイルを編集する。

# Required settings
export DATABASE_URL=postgres://db名:パスワード@dbホスト:5432/db名

# Comma seperated memcached ip address
export MEMCACHED_HOSTS=127.0.0.1:11211

# Your env
export RACK_ENV=production
export RAILS_ENV=production

# AWS credentials required for file uploads
export AWS_ACCESS_KEY_ID=XXX (Amazon S3 のアクセスキー)
export AWS_S3_BUCKET=バケット名
export AWS_SECRET_ACCESS_KEY=xxx (Amazon S3 の秘密キー)

# Required to enable certain features
export ANALYTICS_DOMAIN=
export ANALYTICS_ID=
export APPLE_PUSH_CERT=
export APPLE_PUSH_CERT_IOS=
export APPLE_PUSH_TOPIC=
export APPLE_PUSH_WEBSITE_ID=
export ASSET_HOST=
export CAMO_HOST=http://localhost:8081
export CAMO_KEY=xxx (←/lib/systemd/system/camo.service で指定した値)
export DEFAULT_URL_OPTIONS_HOST=www.example.com
export ELASTICSEARCH_URL=http://127.0.0.1:9200/feedbin
export ENTRY_IMAGE_HOST=www.example.com
export ENV_PATH=
export EVERNOTE_KEY=
export EVERNOTE_SECRET=
export FEEDBIN_URL=https://www.example.com (←公開用 URL)
export FEED_REFRESHER_REPORT_URL=
export FONT_STYLESHEET=
export FROM_ADDRESS=
export FROM_ADDRESS_MARKETING=
export HONEYBADGER_API_KEY=
export INSTAPAPER_KEY=
export INSTAPAPER_SECRET=
export KINDLEGEN_PATH=
export KINDLE_EMAIL=
export LIBRATO_SOURCE=
export LIBRATO_TOKEN=
export LIBRATO_USER=
export MAILGUN_INBOUND_KEY=
export MERCURY_API_KEY=
export NOTIFICATION_EMAIL=
export POCKET_CONSUMER_KEY=
export PUSH_URL=https://www.example.com
export READABILITY_API_TOKEN=
export READABILITY_READER_KEY=
export READABILITY_READER_SECRET=
export REDIS_ID_URL=
export REDIS_URL=redis://127.0.0.1:6379/feedbin
export REDIS_URL_ENTRY_CREATED=
export SECRET_KEY_BASE=xxxx (←rake secret で生成したシークレットキー)
export SIDEKIQ_PASSWORD=
export SITE_PATH=
export SMTP_ADDRESS=
export SMTP_BULK_PASSWORD=
export SMTP_BULK_USERNAME=
export SMTP_PASSWORD=
export SMTP_USERNAME=
export STRIPE_API_KEY=sk_test_xxx (←stripe.com で取得したシークレットキー)
export STRIPE_PUBLIC_KEY=pk_test_xxx (←stripe.com で取得した公開可能キー)
export SUPPORT_URL=
export TUMBLR_KEY=
export TUMBLR_SECRET=

PostgreSQL のユーザーとデータベースを作成する。

createuser -s feedbin
createdb -O feedbin feedbin
echo "alter user feedbin encrypted password 'password'" | psql

データベーステーブルを作成する。

sudo RAILS_ENV=production rake db:setup

Refresher をインストールする。

cd /srv/
sudo git clone https://github.com/feedbin/refresher.git
cd refresher
sudo bundlle

Image フィーダーをインストールする。

cd /srv/
sudo git clone https://github.com/feedbin/image.git
cd image
sudo bundle

ログディレクトリを作成する。

cd /var/log
sudo mkdir feedbin
sudo chown feedbin:feedbin feedbin

Feedbin 本体起動用スクリプト /usr/local/bin/startfeedbin を作成する。

#!/usr/bin/env bash
set -x

PORT=9191

LOGDIR=/var/log/feedbin
LOG1=$LOGDIR/feedbin.log
LOG2=$LOGDIR/rackup.log
LOG3=$LOGDIR/refresher.log
export REDIS_URL=redis://127.0.0.1:6379/feedbin

source /etc/profile.d/rvm.sh

cd /srv/feedbin
rvm use 2.6.1
bundle exec foreman start > $LOG1 2>&1 &
sleep 10
bundle exec rackup --port $PORT > $LOG2 2>&1 &

cd /srv/refresher
rvm use 2.5.0
bundle exec foreman start > $LOG3 2>&1

/lib/systemd/system/feedbin.service を作成する。

[Unit]
Description=FeedBin - Feed Aggregator
After=network.target memcached.service redis-server.service elasticsearch.service camo.service image.service

[Service]
WorkingDirectory=/srv/feedbin
ExecStart=/usr/local/bin/startfeedbin
Restart=always
User=feedbin
Group=feedbin

[Install]
WantedBy=multi-user.target

Image フィーダー起動用スクリプト /usr/local/bin/startimage を作成

#! /bin/bash

LOGDIR=/var/log/feedbin
LOG=$LOGDIR/image.log

source /etc/profile.d/rvm.sh
export AWS_ACCESS_KEY_ID=XXX (Amazon S3 のアクセスキー) 
export AWS_SECRET_ACCESS_KEY=xxx (Amazon S3 の秘密キー)
export AWS_S3_BUCKET=バケット名
export REDIS_URL=redis://127.0.0.1:6379/feedbin

cd /srv/image
rvm use 2.5.0
bundle exec foreman start > $LOG 2>&1

/lib/systemd/system/image.service を作成する。

[Unit]
Description=Image - feedbin image feeder
After=network.target

[Service]
WorkingDirectory=/srv/image
ExecStart=/usr/local/bin/startimage
Restart=always
User=feedbin
Group=feedbin

[Install]
WantedBy=multi-user.target

サービスを有効化して、起動する。

systemctl enable image
systemctl start image
systemctl enable feedbin
systemctl start feedbin

あとは、Web サーバーに http://localhost:9191 を参照するリバースプロキシを設定して、ブラウザからアクセスすれば、ログイン画面が出る。

ユーザー登録をすませたら、試用期間中になるので、データベースを直接書き換えて、契約済みにしておく。

\c feedbin;
update users set admin = true;
update users set plan_id = 6;

これで後は読むだけ…とか思ってたら、フィードが更新されない…ググっても解決しないので、諦めた。