Vanilla Forums

Debian GNU/Linux 10 Buster をインストールした VPS に、nginx を入れて、Vanilla Forums を立ち上げたので、そのメモ。Web サーバーに Apache を使う場合は、.htaccess のひな形が予め仕込まれてるので、注意点はない。

まずは、nginx と php をインストール

sudo apt install nginx
sudo apt install php php-apcu php-bz2 php-cli php-curl php-fpm php-gettext php-imagick php-imap php-mbstring php-mdb2-driver-mysql php-mdb2-driver-pgsql php-mysql php-pgsql php-readline php-tokenizer php-xml php-xmlrpc php-zip 

Github からリリース版を取得。適切な位置 (仮に、/srv/vanilla とする) へ展開。

nginx の server {} ディレクティブ内で以下のように設定。

	root /srv/vanilla;

	# Add index.php to the list if you are using PHP
	index index.php;

	# Block some folders as an extra hardening measure.
	location ~* "/\.git" { deny all; return 403; }
	location ~* "^/build/" { deny all; return 403; }
	location ~* "^/cache/" { deny all; return 403; }
	location ~* "^/cgi-bin/" { deny all; return 403; }
	location ~* "^/uploads/import/" { deny all; return 403; }
	location ~* "^/conf/" { deny all; return 403; }
	location ~* "^/tests/" { deny all; return 403; }
	location ~* "^/vendor/" { deny all; return 403; }
	location ^~ "/favicon.ico" { access_log off; log_not_found off; return 404; }

	# This handles all the main requests thru index.php.
	location ~ \.php$ {
		# send to fastcgi
		include fastcgi.conf;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_pass unix:/run/php/php7.3-fpm.sock;
	}

	# Default path handling
	location / {
		try_files $uri @vanilla;
	}

	location @vanilla {
		fastcgi_param X_VANILLA 1;
		rewrite ^/(.+)$ /index.php?p=$1 last;
	}

/srv/vanilla/conf/config.php に以下の設定を追加

$Configuration['Garden']['RewriteUrls'] = true;

Newspipe のインストール

Feedbin の設置には成功したものの、どうやってもフィードを更新してくれなくて、使用を断念したが、他によさげなアグリゲーターがないか、😎 Awesome lists about all kinds of interesting topicsで探したところ、Newspipe が使いやすそうだったので、これをインストールしてみた。

結果から言うと、丸二日かかって稼働に成功。やったね!😁

まず、Python 3.7 以上が必要だが、Debian 9 (Stretch) に入っているのは、3.5。ということで、ソースからインストールする。現時点での最新版は、3.7.3

最初に、前提となるパッケージをインストールしておく。

sudo apt install -y build-essential python-dev python-setuptools python-pip python-smbus libssl-dev libffi-dev zlib1g-dev libreadline-gplv2-dev libsqlite3-dev libbz2-dev libncursesw5-dev libgdbm-dev liblzma-dev uuid-dev tk-dev zlibc libpq-dev libmariadbclient-dev
sudo apt install -y apache2-dev
sudo pip install pipenv

次に、適当なところでアーカイブを展開し、以下を実行する。

./configure --enable-shared --enable-optimizations
make
sudo make altinstall
sudo ldconfig

--enable-shared オプションって推奨されてないんじゃないの?と思う人もいるかも知れませんが、mod_wsgi に共有ライブラリが必要なので、指定せざるを得ません。最後の ldconfig は、Python 共有ライブラリを認識させるためのおまじない。やっておかないと実行時にエラーが起きます。

Python がインストールできたら、PostgreSQL も必要なので、インストールしておく。うちは、別インスタンスにインストール済みなので、パス。いずれにせよ、データベースを作成しておく。

su - postgres
createuser -D -A -P newspipe
(パスワードを入力する)
createdb -O newspipe newspipe

NewspipeGitLab からクローンする。

cd /srv
sudo git clone https://gitlab.com/newspipe/newspipe

Newspipe を実行するユーザーを作成する。

sudo user add -c "Newspipe User" -s /bin/bash -d /srv/newspipe newspipe

README にある通りに実行…したら、上手くいかないので、以下のようにする。

cd /srv/newspipe
sudo chown -R newspipe:newspipe .
su - newspipe
cd /srv/newspipe
pip3.7 install psycopg2-binary
pipenv install
npm install
npm run build
cp src/conf.cfg-sample conf.cfg

ここで、src/conf.cfg を編集する。うちは、こんな感じ。ドメイン名は example.com ではなく、自分で取得したドメインに適宜置換すること。

[webserver]
host = 0.0.0.0
port = 5000
secret_key = 
debug = true
[cdn]
cdn_address = 
[misc]
platform_url = https://www.example.com/
admin_email = hostmaster@example.com
security_password_salt = 
token_validity_period = 3600
log_path = ./var/log/newspipe.log
log_level = info
self_registration = false
[database]
database_url = postgres://newspipe:(パスワード)@192.168.207.202/newspipe
[crawler]
crawling_method = default
default_max_error = 6
user_agent = Newspipe (https://gitlab.com/newspipe/newspipe)
timeout = 30
resolv = true
feed_refresh_interval = 120
[notification]
notification_email = Newspipe@example.com
host = mx1.mail-services.net
port = 465
tls = false
ssl = true
username = (メールサーバーにログインするユーザー)
password = (メールサーバーにログインする時のパスワード)

編集を終えたら、以下を実行。

pipenv shell
python src/manager.py db_create
Python src/manager.py create_admin (Newspipe でログインするユーザー名) '(パスワード)'
python src/runserver.py

ここで、エラーが出なかったら、うまくインストールできている。が、mod_wsgi で実行すると、地味にエラーが出るので、以下のパッチを当てておく。

--- forms.py.orig	2019-04-04 22:14:34.957318408 -0700
+++ forms.py	2019-04-04 22:14:44.241393931 -0700
@@ -27,7 +27,7 @@
 __license__ = "GPLv3"
 
 from flask import flash, url_for, redirect
-from flask_wtf import Form
+from flask_wtf import FlaskForm as Form
 from flask_babel import lazy_gettext
 from werkzeug.exceptions import NotFound
 from wtforms import TextField, TextAreaField, PasswordField, BooleanField, \

mod_wsgi をインストールする。

sudo pip3.7 install mod_wsgi

エラーや警告が出たら、何か足りないので、せっせと追加する。

さらに apache を設定する。まず、/etc/apache2/mods-availabe/mod_wsgi.load を作成する。

LoadModule wsgi_module /usr/local/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
WSGIPythonHome /srv/newspipe/.local/share/virtualenvs/newspipe-9a8gK120
WSGIPythonPath /srv/newspipe/.local/share/virtualenvs/newspipe-9a8gK120/lib/python3.7/site-packages

WSGIPythonHome や、WSGIPythonPath は実際にインストールされているディレクトリに適宜置換することをお忘れなく。

次に、/etc/apache2/sites-availabe に設定ファイルを作成する。ファイル名は仮に、newspipe.conf としておく。あと、ドメイン名は example.com ではなく、自分で取得したドメインに置き換えること。


	ServerName www.example.com
	ServerAlias example.com
	RewriteEngine on
	RewriteCond %{SERVER_NAME} =www.example.com [OR]
	RewriteCond %{SERVER_NAME} =example.com
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]




	ServerName www.example.com
	ServerAlias example.com
	ServerAdmin postmaster@example.com

	Include /etc/letsencrypt/options-ssl-apache.conf
	SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

	WSGIDaemonProcess newspipe user=newspipe group=newspipe threads=5
	WSGIScriptAlias / /srv/newspipe/src/web/app.wsgi

	
		WSGIProcessGroup newspipe
		WSGIApplicationGroup %{GLOBAL}
		WSGIScriptReloading On
		Require all granted
	

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined



見ておわかりの通り、WSGIScriptAlias に、/srv/newspipe/src/web/app.wsgi を指定してるけど、そんなファイルはない。つまり作成する必要がある。

import sys
import logging

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/srv/newspipe/src')

from runserver import application

ここまで辿り着いたら、あとは、

sudo a2enmod mod_wsgi
sudo a2ensite newspipe
sudo systemctl restart apache2

これでブラウザからアクセスして、ログイン画面が出れば完了!

Feedbin のインストール

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

ニュースサイトの閲覧に、サーバー設置型であるニュースフィーダーの 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

実行には、memcahedrediselasticsearchruby が必要なので、インストールする。ただし、システムデフォルトの 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.feedcontainer.com
export ELASTICSEARCH_URL=http://127.0.0.1:9200/feedbin
export ENTRY_IMAGE_HOST=www.feedcontainer.com
export ENV_PATH=
export EVERNOTE_KEY=
export EVERNOTE_SECRET=
export FEEDBIN_URL=https://www.feedcontainer.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.feedcontainer.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;

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

小槌をインストールしてみた

サーバーインストール型の家計簿があるのを見つけて、インストールしてみたので、手順を備忘録として残しておく。家計簿ソフトの名前は小槌 (GitHub リポジトリ)

まず、node.js をインストール

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

続けて、ruby その他をインストール

sudo apt install -y ruby ruby-dev build-essential zlib1g-dev

MySQL/MariaDB のライブラリをインストール

sudo apt install libmysqlclient-dev

または、

sudo apt install libmariadbclient-dev-compat

Debian 9 stretch デフォルトの gem はバージョンが低いので、アップデートする。

gem -v
2.5.2.1
sudo gem update --system
(省略)
gem -v
3.0.3

Bundler をインストール

sudo gem install bundler

GitHub から、ソースをクローン。

sudo git clone https://github.com/everyleaf/kozuchi.git

Bundle を使って、必要なモジュールをインストール

cd kozuchi
sudo bin/bundle install
(省略)

database.yml を修正

cd config
sudo cp database.yml.sample database.yml
sudo vi database.yml
production:
  adapter: mysql2
  database: kozuchi
  username: kozuchi
  encoding: utf8
  password: password_of_kozuchi
  host: 192.168.0.1

hosting.rb を修正

cd initializers
sudo cp hosting.rb.example hosting.rb
sudo vi hosting.rb

MySQL/MariaDB でデータベースとユーザーを作成する。

create database kozuchi;
create user 'kozuchi'@'%' identified by 'password_of_kozuchi';
grant all on kozuchi.* to 'kozuchi'@'%';

テーブルの作成、アセットのコンパイルを行う。

sudo RAILS_ENV=production rake db:migrate
sudo RAILS_ENV=production rake assets:environment
sudo RAILS_ENV=production rake assets:precompile

ファイル/ディレクトリのオーナーを変更

sudo chown -R www-data:www-data .

Passenger をインストールする

sudo apt-get install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger stretch main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update
sudo apt-get install -y libapache2-mod-passenger

Apache のホストを設定して、再起動。

sudo systemctl restart apache2

Apache の設定は、

RailsEnv production

を忘れずに!

Pydio Cells の隠し仕様

ファイル共有サーバーソフト、Pydio が、内容を一新、Go でスクラッチから書き直されて、Pydio Cells となった。

最近になって、更新のための時間が取れたので、インストールしてみた。ところ、このブログも乗っかってる専鯖上の VM には問題なくインストール完了。ところが、ストレージ目的で借りている VPS で、所謂ヌルポインタエラーが出た。フォーラムで質問しても解決しなかったが、うまくいったケースとそうでないケースを見比べて違いを埋めていった結果、Pydio Cells は、プライベート IP アドレスがないとセグメンテーションフォールトを起こす仕様になっていることがわかった。

ドキュメントのどこにも書いてないが、ソースではしっかりチェックされてて、確かにプライベートアドレスがないとエラーになる箇所があった。ところがそのエラーをチェックせずに実行を継続しているので所謂ぬるぽになっている。明らかなバグ。フォーラムで報告しておいた。

[2019/03/15 追記] バージョン 1.4 でこの問題が解決されていることを確認しました。

 

Twitter links powered by Tweet This v1.8.3, a WordPress plugin for Twitter.