Newspipe のインストール

Posted on
News aggregator News Feeder Newspipe RSS RSSリーダー

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 ではなく、自分で取得したドメインに置き換えること。

<VirtualHost *:80>
	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]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
	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

	<Directory "/srv/newspipe/src/web">
		WSGIProcessGroup newspipe
		WSGIApplicationGroup %{GLOBAL}
		WSGIScriptReloading On
		Require all granted
	</Directory>

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

</VirtualHost>
</IfModule>

見ておわかりの通り、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

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