Nitterをセルフホストしています.
最新に追従しているのですが,以前と少し手順が変わっているので上の記事に補足する形でメモしておきます.
Nitterをセルフホストしています.
最新に追従しているのですが,以前と少し手順が変わっているので上の記事に補足する形でメモしておきます.
以前軽量TwitterフロントエンドのNitter をセルフホストしました.
最近アクセスが増えていて少しサーバが重くなったり自分が使うときに調子が悪かったりしています.クローラなんかが多いようなのでこれを robots.txt
で拒否すると大分アクセスが減るのではと思い設定してみました.
NitterというTwitterのフロントエンドがあります.最近はTwitterが重くてなにか検索しようと思っても待ち長かったり画像読み込み失敗したりといったこともよくあります(PCのスペックと回線が細いせいも大きいですが).軽量ブラウザを使ったりもしてみましたがそうすると見た目や使い勝手がいまいち.
そして現在そういった軽量ブラウザは利用もできなくなりました.
This browser is no longer supported.
Please switch to a supported browser to continue using twitter.com. You can see a list of supported browsers in our Help Center.
そこで Nitter を試してみたところ軽くていい感じです.
現在ログイン機能はないので,投稿や非公開Tweetや非公開リストなどは使えませんが,イベントのハッシュタグを追ったり,過去のtweetを検索といったことをするのに便利です.
RSS形式での出力にも対応しています.
軽量で便利なのでロカールマシンでNitterを動かして外にURLを共有するときは https://nitter.net/ を利用していました.
という話を以前オープンソースカンファレンス2020福岡内の鹿児島らぐのコマで発表しました.
しかし,最近は https://nitter.net/ がTwitterの制限に掛かって利用できないことが多くなってきました.なので自分のVPS上にホストしてみました.
Note
|
同じ手順で Raspberry Pi OS buster armhf や Debian sid(nimはDebinaパッケージのもの利用)でも動作しました. |
Nitterが依存している Redis
と libsass
を導入しておきます.
$ sudo apt install redis-server libsass-dev
Nitterを専用アカウントで動かしたいので nitter
ユーザ,グループを作ってそのユーザで操作します.
$ sudo groupadd nitter (1)
$ sudo useradd -m -g nitter nitter (2)
$ sudo -iu nitter (3)
nitter
グループを作成nitter
ユーザを作成nitter
ユーザのシェルを開くNitterはnim-langで出来ています.Nitterのコンパイルにはnim 1.2.0以上が必要ですが,Debian busterのパッケージ版のnimは 0.19.4
でコンパイル出来ません.buster-backports も 1.0.4-1~bpo10+1
と対応していません.(bullseyeは1.4.2)
$ nimble build -d:release
Verifying dependencies for nitter@0.1.0
Tip: 2 messages have been suppressed, use --verbose to show them.
Error: Unsatisfied dependency: nim (>= 1.2.0)
$ dpkg-query -W nim
nim 0.19.4-1
とりあえずnimの公式サイトのバイナリを利用してコンパイルすることにします.
$ wget https://nim-lang.org/download/nim-1.4.2-linux_x64.tar.xz \
https://nim-lang.org/download/nim-1.4.2-linux_x64.tar.xz.sha256 (1)
$ sha256sum -c ./nim-1.4.2-linux_x64.tar.xz.sha256 (2)
nim-1.4.2-linux_x64.tar.xz: OK
$ tar tvf nim-1.4.2-linux_x64.tar.xz | lv (3)
$ tar xvf nim-1.4.2-linux_x64.tar.xz (4)
Nitterのsourceをcloneしてさっきダウンロードして展開したnimでコンパイルします.
$ git clone https://github.com/zedeus/nitter
$ cd nitter
$ PATH=~/nim-1.4.2/bin:$PATH nimble build -d:release
$ PATH=~/nim-1.4.2/bin:$PATH nimble scss
$ mkdir ./tmp
Redis が起動しているのを確認して nitter
を起動してみます.この状態で 8080
ポートにアクセスして Nitter が利用できるのを確認します.ポート番号などは nitter.conf
で変更できます.
$ ps -ef|grep -i redis (1)
redis 11786 1 0 Feb11 ? 00:15:28 /usr/bin/redis-server 127.0.0.1:6379
$ ./nitter & (2)
$ w3m http://localhost:8080/ (3)
$ kill %1 (4)
$ exit (5)
nitter
アカウントから抜ける次にNitterに起動設定を行います.Systemd環境なので以下のようなサービスファイルを用意しました.
[Unit] Description=Nitter (An alternative Twitter front-end) After=syslog.target After=network.target [Service] Type=simple # set user and group User=nitter Group=nitter # configure location WorkingDirectory=/home/nitter/nitter ExecStart=/home/nitter/nitter/nitter Restart=always RestartSec=15 [Install] WantedBy=multi-user.target
サービスを有効にしてNitterを起動します.
$ sudo systemctl enable --now nitter.service
$ systemctl status nitter
● nitter.service - Nitter (An alternative Twitter front-end)
Loaded: loaded (/etc/systemd/system/nitter.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-02-17 01:13:07 JST; 34s ago
Main PID: 19702 (nitter)
Tasks: 1 (limit: 4696)
Memory: 3.6M
CGroup: /system.slice/nitter.service
└─19702 /home/nitter/nitter/nitter
$ w3m http://localhost:8080/
外に公開せず,ローカルで動作させる場合はここまでの手順でOKです.
※この手順はローカルで動かす場合は必要ありません.
今回はサブドメインを用意しました.DNSを設定して nitter.matoken.org を用意しました.設定ミスしたときにリカバリしやすいようにTTlを短く設定してうまく行ったらいつもの長さにします.
証明書はcertbotを使いLet’s encryptで作成しました.
$ sudo certbot certonly -d nitter.matoken.org
※この手順はローカルで動かす場合は必要ありません.
Nitterをそのまま外に公開するのはセキュリティ的に良くないということで,apache httpdでhttpdの処理をしてNitterの8080に転送するようにしました.
Nitter用のapache httpd設定ファイルを用意します.
<VirtualHost *:80>
ServerName nitter.matoken.org
Redirect permanent / https://nitter.matoken.org/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName nitter.matoken.org
ServerAdmin webmaster@matoken.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/ nocanon
ProxyPassReverse / http://127.0.0.1:8080/
AllowEncodedSlashes On
ErrorLog ${APACHE_LOG_DIR}/error.nitter.matoken.org.log
CustomLog ${APACHE_LOG_DIR}/access.nitter.matoken.org.log combined
SSLCertificateFile /etc/letsencrypt/live/nitter.matoken.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nitter.matoken.org/privkey.pem
</VirtualHost>
</IfModule>
設定を有効にしてテスト後反映します.
$ sudo a2ensite nitter.matoken.org.conf (1)
$ sudo apache2ctl configtest (2)
$ sudo systemctl reload apache2 (3)
この状態で http://nitter.matoken.org/ 及び https://nitter.matoken.org/ にアクセスしてみて Nitter が利用できたらOKです.
とりあえず一般公開しておきますが,今の https://nitter.net みたいにアクセス制限がしょっちゅうかかるようになったら制限するかもしれません.
$ git -C ~nitter/nitter log -1
commit f392b6ca37e66c7c759aa98db23e0bdc62b39c3d (HEAD -> master, origin/master, origin/HEAD)
Author: Lukas Winkler <github@lw1.at>
Date: Sun Feb 14 12:49:09 2021 +0100
run optipng -o 9 on all images (#337)
$ dpkg-query -W apache2 redis* libsass-dev certbot
apache2 2.4.38-3+deb10u4
certbot 0.31.0-1+deb10u1
libsass-dev:amd64 3.5.5-4
redis-server 5:5.0.3-4+deb10u2
redis-tools 5:5.0.3-4+deb10u2
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64