mastodon

マストドン運営Tips

More than 1 year has passed since last update.

自分が体験した不具合やアイデアなどについて箇条書きしていきます。

  • PostgreSQLでは同時接続数に限界があるのでpgpool2やpgbouncerを使おう。
  • DockerではCPU速度ではあまり差は出ないがネットワーク速度では差が大きく出る。
  • マストドンの接続に掛かる時間はNode.jsが50%、PostgreSQLが20%、SSLが20%ぐらいの割合で遅延を起こしている。
  • クエリーキャッシュは非常に有効。
  • 画像などは通常public/system以下にインストールされているが、設定で変更できる。
  • Node.jsは時々再起動させると速くなる。大体1日毎ぐらい。
  • Cloudflareならば10年使える証明書が無料で手に入る。
  • zopfliを用いた事前圧縮はgzip_staticをalwaysにする必要があるが、既に圧縮されている形式以外に対しては非常に有効。
  • フォントなどは301で飛ばせばcdnjs.comなどのものを使える。新規ユーザーからのアクセスが速くなる。
  • エラーはjournalctl -xe|grep bundleでWebのエラーを、journalctl -xe|grep npmでストリーミングのエラーを見られる。
  • 不正アクセス試行があるかどうかは/var/log/nginx/error.logを見れば分かる。
  • 不正アクセスをしようとしているユーザーに対してはNginxで502を返すようにするとよい。
  • sshは自分のIPアドレスからしか接続できないようにすることで、無駄なブルートフォース攻撃の類を認証前に弾くことができる。
  • JavaScriptやHTMLを追加したければ、app/view以下のファイルをいじること。HamlでUIが記述されている。
  • common.cssを変更しても元のファイルは存在しているのでAjaxでより下に追加すれば元の色合いにできる。
  • 管理者メニューにはNginxからBASIC認証辺りを追加でかけておけば、怪しいアプリとかに変なことをされることはない。
  • Nginxのhttp_sub_moduleを使えば動的にファイルを書き換えられる。
  • SMTPによるメール送信は多くのレンタルサーバなどで禁止されている。いくつかの認められているサービス以外使えないものも多い。
  • PNG画像はzopfliで再圧縮すれば最小化できる。
  • 快適なインスタンスはトップページの応答速度が0.2秒以下である必要がある。
  • 443番ポート以外は外部に対して開ける必要はない。ssh用のポートは別として。
  • .tkドメインは無料で使用できるので試用する際に便利。
  • Rubyバージョンは2.4.1以上でないと正常に動かない。
  • IEは11でも多分動いてくれない。
  • ホーム画面に追加する方がどんなアプリより快適に使える。
  • マストドン用のコマンドは実行エラーが出ても戻らず破壊的変更をするので再起動すると起動しなくなるのでいきなり本番環境でやるのはおすすめしない。
  • journalctlは再起動すると前のログが消えるのできちんと設定を変更すること。
  • node_modulesは一々ファイル読み込みをするようなので/dev/shmなどに移しておくと高速化する。
  • Nginxは設定を変更してもreloadだけで反映できる。restartで再起動させると時間がかかる。
  • /etc/postgresql/version/main/postgresql.confでsynchronous_commit=offを設定すると高速になる。
  • Rubyは後に書いたクラスなどの定義が優先されるので、出来る限り独自機能は別のファイルに書いて分けることでアップデートが簡単になる。
  • JavaScriptファイルを追加する時は、?v=0.1.0のようにバージョンを指定するとキャッシュを無効化して上書きできる。
  • 500文字以上でも問題ないが、おそらく1GiB以上あると無理だと思われる。
  • 画像などの一時的アップロードはアップロード側での制限はないので、Nginxでclient_max_body_size 100M;ぐらいにしておく。ちなみにマストドンのデフォルトは無制限。
  • DDoS攻撃対策はきっちりしておくこと。1秒間のアクセス回数制限が有効。
  • sudo sysctl -w vm.drop_caches=3でメモリを解放しよう。
  • 面倒でもDockerはsudoなしでできるようにしてはいけない。
  • Cookieにデータを保存するとログアウトしても見えるので拡張するときはログアウト時に消すこと。
  • ufwなどのファイアウォールは立ち上げておくこと。
  • /user/name.atomからRSS/Atomで購読できる。RSS用のプラグインなどを用いれば簡単にブログなどにTootを掲載できる。
  • var info=JSON.parse($("#initial-state").innerText);でaccess_tokenを取得できる。
  • div.column,div.drawer { resize: horizontal; } でカラムの幅を調整できるようにできる。
  • letなどES6の構文はSafariは対応してないので使えない。for...in構文もダメだが、babelは変換してくれなかったりする。
  • インスタンスの内容に関する破壊的変更はできるだけ独断で決めない方が良い。民主的に運営をできるよう、事前にルール等を定めて議会を用意することが重要。
  • マストドンが利用しているソフトウェアはRedis,PostgreSQL,Nginx,Postfix,Node.js,Ruby on Rails,certbot,imagemagick,ffmpegなど。ライブラリに至っては400以上ある。はっきり言って更新しなくなったパッケージが出たらそれだけで大幅なコードの改変が必要になるだろう。5年後に同じ手順で構築できる可能性は0%と言っていい。