備忘録として残しておきます

Mastodon専用ユーザにて、Mastodonのインストールディレクトリにて操作することを前提にしています。
(非Dockerならliveディレクトリ)

参考資料

Rakeタスクの一覧

https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/List-of-Rake-tasks.md

あるいは

# すべてのRakeタスクを表示
$ RAILS_ENV=production bundle exec rails -T

# Namespace "mastodon" のタスクのみ表示
$ RAILS_ENV=production bundle exec rails -T mastodon

で、定義されているタスクが一覧(+簡単な説明文)表示される。

タスク一覧の出力例
rails mastodon:add_user                                     # Add a user by providing their email, username...
rails mastodon:confirm_email                                # Manually confirms a user with associated user...
rails mastodon:daily                                        # Execute daily tasks (deprecated)

Rakeタスクの実体

https://github.com/tootsuite/mastodon/tree/master/lib/tasks

Rails Consoleへの入り方

非Docker

$ pwd
/home/mastodon/live
$ RAILS_ENV=production bundle exec rails console
irb(main):001:0>

Docker

$ docker-compose run --rm web rails console
irb(main):001:0>

※ Docker環境がないので、動作確認はしていません

メディアファイル系

外部インスタンスの古いメディアファイルを消す

デフォルトでは7日以前のメディアファイルを消す
空き容量に困ったらとりあえず流す感じになっている

$ RAILS_ENV=production bundle exec rails mastodon:media:remove_remote

外部インスタンスユーザのアバターとヘッダ画像を更新する

全インスタンスに対して行う場合は、Rakeタスクが用意されている。
時間がかかる上、エラー落ちすることがあるので注意。

$ RAILS_ENV=production bundle exec rails mastodon:media:redownload_avatars

特定のインスタンスのみ、ということであれば、下記Rails Consoleコードを実行する。
where部分を書き換えたり追加したりすれば、様々な条件で引っ掛けることが可能

Account.where(domain: "nagoyadon.jp").find_each do |account|
    printf("%s@%s\n", account.username, account.domain)
    account.reset_avatar!
    account.reset_header!
    account.save
end; 0

引っ掛けられるカラムは、モデルを見ればだいたい分かるかも
https://github.com/tootsuite/mastodon/blob/master/app/models/account.rb

たまに効かないユーザが居るのが謎。

アカウント系

アカウントを追加する

インタラクティブに作成できる、Rakeタスクが用意されている。

$ RAILS_ENV=production bundle exec rails mastodon:add_user
  • ユーザ名とメールアドレスが必要
  • 確認メールを送信するかしないか選べる
  • パスワードはランダムに生成される(作成後に表示される)

メールアドレスを確認する

確認メールが届かねえ! そもそもメールサーバの設定してねえ! って時に

$ RAILS_ENV=production bundle exec rails mastodon:confirm_email USER_EMAIL=hoge@example.tld

特定のユーザを管理者あるいはモデレータにする、権限を剥奪する

管理者

$ RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=hogehoge

モデレータ

$ RAILS_ENV=production bundle exec rails mastodon:make_mod USERNAME=hogehoge

権限を剥奪(一般ユーザ化)

$ RAILS_ENV=production bundle exec rails mastodon:revoke_staff USERNAME=hogehoge

管理者とモデレータの権限比較

操作 備考 管理者 モデレータ 一般
サイト設定 インスタンスの基本設定 × ×
カスタム絵文字 カスタム絵文字の登録、輸入 ×(できそうで出来ない) ×
バックエンド情報表示 Sidekiq, WebSub, PgHeroへのアクセス × ×
レポート処理 通報の確認、コメント、対応 ×
アカウント情報表示 一覧、確認、編集等 ×
招待 招待URLの生成 △(サイト設定による) △(サイト設定による) △(サイト設定による)
既知のインスタンス 一覧、再講読 × ×
ドメインブロック 一覧、ブロック、サイレンス × ×
メールブラックリスト 一覧、追加、削除 × ×

モデレータ権限でも、ローカルユーザのメールアドレスとか見えちゃうので
信頼のおける人にだけ権限を付与しよう!

存在しないリモートユーザをパージする

リモートユーザが本当に存在するか実際に問い合わせを行い、存在しなければパージする。

$ RAILS_ENV=production bundle exec rails mastodon:maintenance:purge_removed_accounts

オプションとして -f あるいは --force を与えると、確認メッセージ無しでパージを実行する。

リモートに存在せず(HTTP 404ないし410が返された場合)、
かつパージを明示的に指示した場合、そのアカウントをパージ、つまり 抹消する

証明書切れ、DNS名前解決に失敗、HTTP 404/410以外のエラーコードが返されたとき、などはスルーされる。
(メンテナンス作業中であった場合等を考慮した措置だと思われる)

https://github.com/tootsuite/mastodon/blob/master/lib/tasks/mastodon.rake#L717

その他のタスク

誰もフォローしていないユーザの購読をパージ

連合タイムラインを整理したい時に。

$ RAILS_ENV=production bundle exec rails mastodon:push:clear

アクティブユーザのホームタイムラインを再構築

ホームタイムラインが表示されない(Redisのデータが壊れた)時に。

$ RAILS_ENV=production bundle exec rails mastodon:feeds:build

システム系

Mastodonサービスのログを見たいとき

$ sudo journalctl -r -u mastodon-web
$ sudo journalctl -r -u mastodon-sidekiq
$ sudo journalctl -r -u mastodon-streaming

Nginxのログを見たいとき

$ sudo cat /var/log/nginx/access_log
$ sudo cat /var/log/nginx/error_log

継続して監視したい時は、 tail -f が便利

データベースなどのバックアップを取得したいとき

アップデート手順内にメモってあるので、それを参考に実施
( pg_dump でデータベースダンプファイル取得、tarでPublicディレクトリのアーカイブ化)

https://qiita.com/kumasun/items/f17754e57120f7b13a06

Ruby Gem を再インストールしたい時

稀に壊れたりすることがあるようです。。。

$ bundle exec gem uninstall -aIx
$ bundle install

引数 -aIx で、「全てを確認無しでアンインストール」
その後、通常通りインストールする

bundler 経由で操作しないと、グローバル環境のGemに作用する?らしいので注意。

アセットをゼロから作り直したい時

$ RAILS_ENV=production bundle exec rails assets:clobber
$ RAILS_ENV=production bundle exec rails assets:precomplie

clobber で webpackの出力を全消しできる

その他、非技術的な部分

  • 独自にオープンインスタンスを立てた場合、各地域の総合通信局に「電気通信事業届出」をしておいた方が無難。
  • 「サイト設定」内に連絡先を記載。メールアドレス、管理者欄を埋める。他のインスタンスのアカウントなどがあれば併記しておく。インスタンスに何かあったときに、誰かが知らせてくれるかも。

あとがき

  • 自分用にメモした内容です。必要に応じて読み替えてください。
  • こうしたほうがいいよ的なアドバイスを頂けると大変助かります
  • こんなのないの? 的なご質問には分かる範囲でお答えいたします(あまり期待しないでください)

以上

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.