オプション機能のインストール
マストドンには、必要に応じて使用できるオプション機能がいくつか用意されています。
全文検索
ElasticSearchで、authored, favorited, mentioned inのステータスを検索するように設定する。
Mastodonは、ElasticSearchが利用可能な場合、全文検索に対応しています。Mastodonの全文検索は、ログインしているユーザーが自分のステータス、メンション、お気に入り、ブックマークから結果を見つけることができます。データベース全体から任意の文字列を検索することは、意図的に許可していません。
ElasticSearchのインストール
ElasticSearchはJavaランタイムを必要とします。Javaがまだインストールされていない場合は、今すぐインストールしましょう。root
でログインしていると仮定します。
apt install openjdk-17-jre-headless
aptにElasticSearchの公式リポジトリを追加します。
wget -O /usr/share/keyrings/elasticsearch.asc https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list
これで、ElasticSearchのインストールができました。
apt update
apt install elasticsearch
WARNING
セキュリティ警告: デフォルトでは、ElasticSearchはlocalhostにのみバインドされ、外部ネットワークからはアクセスできないようになっています。ElasticSearchがどのアドレスにバインドされているかは、 /etc/elasticsearch/elasticsearch.yml
内の network.host
で確認することができます。認証レイヤーがないため、ElasticSearchにアクセスできる人なら誰でも、その中のあらゆるデータにアクセスし、変更することができると考えてください。ですから、アクセスの安全性を確保することは本当に重要です。メインインストール手順](../../prerequisites/#install-a-firewall and only-whitelist-ssh-http-and-https-ports) にあるように、22、80、443ポートのみを公開するファイアウォールを設置することが推奨されます。マルチホストのセットアップを行う場合、内部トラフィックを保護する方法を知っておく必要があります。
WARNING
セキュリティ警告: ElasticSearch の 2.0
から 2.14.1
までのバージョンには、 log4j
ライブラリの exploit の影響を受けています。影響を受ける場合は、ElasticSearch issue tracker の temporary mitigation を参照してください。
ElasticSearchを起動する。
systemctl daemon-reload
systemctl enable --now elasticsearch
マストドンの構成
.env.production` を編集して、以下の変数を追加します。
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
同じマシンに複数のMastodonサーバがあり、全てのサーバで同じElasticSearchを使用する場合、インデックスを区別するために、全てのサーバの設定で REDIS_NAMESPACE
がユニークであることを確認してください。ElasticSearchのインデックスのプレフィックスを上書きしたい場合は、ES_PREFIX
を直接設定します。
新しい設定を保存した後、Mastodon プロセスを再起動すると、設定が有効になります。
systemctl restart mastodon-sidekiq
systemctl reload mastodon-web
さて、いよいよElasticSearchのインデックスを作成し、データを入れていきます。
su - mastodon
cd live
RAILS_ENV=production bin/tootctl search deploy
他言語での検索最適化
中国語検索最適化
ElasticSearchのデフォルトの解析ツールは標準の解析ツールですが、特に中国語については最適とは言えないかもしれません。検索性能を向上させるには、言語固有の解析ツールをインストールすることができます。ElasticSearchでインデックスを作成する前に、以下のElasticSearchエクステンションをインストールしてください。
そして、Mastodonのインデックス定義を以下のように修正します。
diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb
--- a/app/chewy/accounts_index.rb
+++ b/app/chewy/accounts_index.rb
@@ -4,7 +4,7 @@ class AccountsIndex < Chewy::Index
settings index: { refresh_interval: '5m' }, analysis: {
analyzer: {
content: {
- tokenizer: 'whitespace',
+ tokenizer: 'ik_max_word',
filter: %w(lowercase asciifolding cjk_width),
},
diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb
--- a/app/chewy/statuses_index.rb
+++ b/app/chewy/statuses_index.rb
@@ -16,9 +16,17 @@ class StatusesIndex < Chewy::Index
language: 'possessive_english',
},
},
+ char_filter: {
+ tsconvert: {
+ type: 'stconvert',
+ keep_both: false,
+ delimiter: '#',
+ convert_type: 't2s',
+ },
+ },
analyzer: {
content: {
- tokenizer: 'uax_url_email',
+ tokenizer: 'ik_max_word',
filter: %w(
english_possessive_stemmer
lowercase
@@ -27,6 +35,7 @@ class StatusesIndex < Chewy::Index
english_stop
english_stemmer
),
+ char_filter: %w(tsconvert),
},
},
}
diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb
--- a/app/chewy/tags_index.rb
+++ b/app/chewy/tags_index.rb
@@ -2,10 +2,19 @@
class TagsIndex < Chewy::Index
settings index: { refresh_interval: '15m' }, analysis: {
+ char_filter: {
+ tsconvert: {
+ type: 'stconvert',
+ keep_both: false,
+ delimiter: '#',
+ convert_type: 't2s',
+ },
+ },
analyzer: {
content: {
- tokenizer: 'keyword',
+ tokenizer: 'ik_max_word',
filter: %w(lowercase asciifolding cjk_width),
+ char_filter: %w(tsconvert),
},
edge_ngram: {
隠されたサービス
TORの隠しサービスでマストドンにサービスを提供。
MastodonはTorを通してonionサービスとして提供することができます。これにより、Torネットワークに接続している間だけ使用できる *.onion
アドレスが与えられます。
Torのインストール
まず、Tor の Debian アーカイブを apt に追加する必要があります。
deb https://deb.torproject.org/torproject.org stretch main
deb-src https://deb.torproject.org/torproject.org stretch main
次にgpgキーを追加します。
curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
最後に必要なパッケージをインストールします。
apt install tor deb.torproject.org-keyring
Torの設定
etc/tor/torrc` にあるファイルを編集し、以下の設定を追加します。
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:80
torを再起動します。
sudo service tor restart
tor のホスト名は /var/lib/tor/hidden_service/hostname
にあることが確認できました。
Mastodonの設定を移動する
NginxにMastodonのコンフィギュレーションを2回伝える必要があります。DRYな状態を保つために、Mastodonの設定を独自のファイルに移動し、参照できるようにすることが必要です。
新しいファイルを /etc/nginx/snippets/mastodon.conf
に作成します。このファイルには、listen
, server_name
, include
と全ての SSL オプションを除いて、Mastodon の設定パラメータを全て入れてください。新しいファイルは以下のようなものになります。
add_header Referrer-Policy "same-origin";
keepalive_timeout 70;
sendfile on;
client_max_body_size 80m;
root /home/mastodon/live/public;
# …
error_page 500 501 502 503 504 /500.html;
access_log /var/log/nginx/mastodon_access.log;
error_log /var/log/nginx/mastodon_error.log warn;
古い Mastodon の設定の代わりに、この新しい設定ファイルに include ディレクティブを追加してください。
Nginxの設定ファイルは、以下のような形で残ります。
server {
listen 80;
server_name mastodon.myhosting.com;
return 301 https://$server_name$request_uri;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
list [::]:443 ssl http2;
server_name mastodon.myhosting.com;
include /etc/nginx/snippets/mastodon.conf;
ssl_certificate /etc/letsencrypt/live/mastodon.myhosting.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mastodon.myhosting.com/privkey.pem;
}
httpでTorを配信する
Mastodon の Tor 版を https で提供することは魅力的かもしれませんが、ほとんどの人にとって良いアイデアではありません。httpsの証明書がなぜ価値を持たないかについては、Tor Projectのこちらのブログポストを参照してください。オニオンドメインのSSL証明書は取得できないので、Mastodonインスタンスを使おうとすると、証明書エラーに悩まされることになります。Torの開発者は最近、Torサービスをhttpsで提供することがほとんどのユースケースで有益でない理由を明示していますこちら。
解決策は、Mastodonインスタンスをhttpで提供することですが、Torに対してのみです。これは、Nginxのコンフィギュレーションに追加のコンフィギュレーションを前置することで追加することができます。
server {
listen 80;
server_name mastodon.qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7.onion;
include /etc/nginx/snippets/mastodon.conf;
}
server {
listen 80;
server_name mastodon.myhosting.com;
return 301 https://$server_name$request_uri;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
list [::]:443 ssl http2;
server_name mastodon.myhosting.com;
include /etc/nginx/snippets/mastodon.conf;
ssl_certificate /etc/letsencrypt/live/mastodon.myhosting.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mastodon.myhosting.com/privkey.pem;
}
ここで提供される長いハッシュを /var/lib/tor/hidden_service/hostname
にあるファイルにあるあなたのTorドメインで置き換えてください。
onionのホスト名には "mastodon. "というプレフィックスが付いていることに注意してください。あなたのTorアドレスはワイルドカードドメインとして機能します。全てのサブドメインはルーティングされ、Nginxが任意のサブドメインに応答するように設定することができます。もしあなたのTorアドレスで他のサービスをホストしたくないのであれば、サブドメインを省略するか、別のサブドメインを選択することができます。
ここで、マストドンの設定を別のファイルに移動することの効果を確認することができます。このようにしないと、すべての設定を両方の場所にコピーしなければなりません。設定を変更する場合は、両方の場所で行わなければなりません。
Webサーバーを再起動する。
service nginx restart
Gotchas
いくつか注意しなければならないことがあります。ある種のリダイレクトは、ユーザーをhttpsに押しやります。その場合、ユーザーは手動でURLをhttpに置き換えて続行する必要があります。
画像などの各種リソースは、Tor以外の通常のドメインで提供されたままとなります。これがどの程度問題になるかは、ユーザーの警戒心の程度に大きく依存します。