備忘録です。
とても古いバージョンなので今更な話です。
2021/11/1時点でmastodon v2.0.0からアップデートを行いました。
いくつか問題が出たので対応策を記録します。
まとまりが無いので後日問題ごとの個別ページに分けるかもしれません。
#環境
- EC2 ubuntu
- RDS PostgreSQL(9.6 -> 12.6)
- S3
- Mastodon(v2.0.0 -> v2.7.0)
- Docker環境
#アップデート経由バージョン
- v2.0.0
- v2.1.0
- v2.2.0
- v2.4.0
- v2.4.1
- v2.5.0
- (Postgres9.6 -> 12.6)
- v2.7.0
#対応した問題
- mimemagic 0.3.6以前の公開停止
- let's encrypt ルート証明書期限切れ
- RDS PostgreSQLのメジャーバージョンアップデート
mimemagic 0.3.6以前の公開停止
MITライセンス・GPLライセンスの問題で2021/11/1現在はmimemagic 0.3.6以前は公開されていません。
mastodonはmimemagic 0.3.2~0.3.5あたりに依存しているため、その公開停止以降はdocker-compose buildを実行しても失敗します。
対応として公開されている0.3.10を使用するよう設定を書き換え、このバージョンに必要なshared-mime-infoをインストールしてやることで解決します。
- Gemfile.lockの書き換え(必須)
gemでmimemagicを参照している部分を0.3.10に書き換えます。
-- mimemagic (0.3.2)
++ mimemagic (0.3.10)
++ nokogiri (~> 1)
++ rake
- Dockerfileの書き換え(バージョンによって適宜)
Dockerコンテナにshared-mime-infoをインストールするための記述を追加します。
また依存に必要なのでdockerイメージのバージョンを書き換えます。
-- FROM ruby:2.4.2-alpine3.6
++ FROM ruby:2.5.0-alpine3.7
++ RUN apk update
++ RUN apk add shared-mime-info
#let's encrypt ルート証明書期限切れ
「let's encryptのルート証明書DST Root X3が期限切れ」と「Openssl 1.0.2の仕様」が合わさったことで、Dockerコンテナからlet's encrypt証明書を持つサイトにアクセスできなくなりました。
そのためdocker-compose build時に必要なファイルを取得できずにエラーを出していました。
2021/10/1をもってlet's encryptのルート証明書「DST Root X3」が期限切れとなっています。
それ以降はISRGという別のルート証明書が使われるようになっています。
Openssl 1.0.2では「信頼できないルート証明書」を一つでも持っている証明書は信頼しないという仕様があります。
「信頼できるルート証明書」を持っていても、「信頼できないルート証明書」の方が優先されるのです。
この2つが合わさることでDockerコンテナからはlet's encrypt証明書を使用したサイトへアクセスできなくなっていました。
コンテナ内の証明書チェーンファイルを新しいもので上書きし、期限切れルート証明書チェーンのファイルを削除し、必要なISRGのルート証明書をコピーすることで対応します。
- Dockerfile追記
Dockerfileに下記の内容を追加します。
COPY処理が書かれている部分の前後に書いてました。
なんか一部不要な記述がありそうですが、とりあえずこれで動きました。
RUN apk -U upgrade
RUN rm -f /etc/ssl/certs/2e5ac55d.0
RUN rm -f /etc/ssl/certs/790a7190.0
RUN rm -f /etc/ssl/certs/ca-cert-DST_ACES_CA_X6.pem
RUN rm -f /etc/ssl/certs/ca-cert-DST_Root_CA_X3.pem
RUN rm -f /usr/share/ca-certificates/mozilla/DST_ACES_CA_X6.crt
RUN rm -f /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
COPY isrgrootx1.pem /usr/local/share/ca-certificates/isrgrootx1.pem
COPY cacert-2021-09-30.pem /etc/ssl/cert.pem
RUN update-ca-certificates
- 証明書・証明書チェーンファイルのコピー
mastodonのフォルダ(Dockerfileなどと同じフォルダ)に「isrgrootx1.pem」「cacert-2021-09-30.pem」を用意します。 - isrgrootx1.pem : このファイルを保存して名前と拡張子を書き換えてください
- cacert-2021-09-30.pem : ここから適宜最新のものを選んでください。
#RDS PostgreSQLメジャーバージョンアップデート
RDSでPostgreSQLのメジャーバージョンを上げたときにCPU使用率が高いままになってしまう問題がありました。
これはデータベースの統計データを保存するpg_statisticテーブルが更新されていないためおこる症状です。
RDSコンソールでアップデートするだけでは自動で行われないため、手動で最適化処理ANALYZEを実行する必要があります。
- ANALYZE実行
今回はmastodonを動かしているEC2にPostgresをインストールし、RDSに接続することでANALYZEを実行しました。
psql -h [RDSのエンドポイント] -U [ユーザ名] -d [DB名]
password:
ユーザ名、DB名、パスワードはmastodonの.env.productionファイルに記載しているものでOKです。
> ANALYZE VERBOSE;
DB内に入ったらANALYZEコマンドを実行します。
VERBOSEオプションは無くても良いですが、途中経過が表示されるので確認のために付けました。
最終的には
一番新しいstableのmastodon v3.2.2まで上げる予定です。
そこで問題などがまた出たら追記予定です。