ITmedia NEWS >
ニュース
2017年06月24日 09時00分 UPDATE

アップデートしてみたんす:素人がMastodonインスタンスをアップデートできた話とお世話になったコマンドたち (1/2)

エラーなくコマンドを実行できれば人は苦労をしないのである。

[井上輝一,ITmedia]

 Mastodon(マストドン)が日本で急激に広まった4月、筆者は「素人でもMastodonのインスタンスは立てられるかやってみた」と題し、インフラエンジニアでもない自分でもインスタンスを立てることはできるのか体当たりチャレンジをした。

 記事ではhttps化でつまづいていたが、その後DNSの設定が反映できたことを確認してからLet's Encryptによる証明書取得に再チャレンジしたところ、正常に取得できて無事にhttps化することができた。

 また、上記で立ち上げた一人用インスタンスとは別に、ポータブルオーディオ趣味の人で集まるインスタンスの立ち上げから運営の技術面を担うことになり、学校1クラスくらいの人数でのんびりトゥートしている。

 このような流れで2つのインスタンスを運営することになった筆者だが、1つ忘れているというか、目をそらしていることがあった。

 インスタンスのアップデートだ。

 一人用インスタンスはともかく、趣味のインスタンスに果たして人が居着いてくれるだろうか、人がまるで来なかったら時期を見て閉じようか、などと心配しながら立ち上げたものだった。しかし、ゆっくりとしたペースでユーザーが増えてくれて、今ではローカルタイムラインを見れば毎日誰かがイヤフォンやポータブル音楽プレーヤーの写真を上げているくらいの活気を見せるようになった。

 ここまで来たら継続的にアップデートやメンテナンスをしなければならないが、いかんせん立ち上げにも苦労した素人である。下手にアップデートをかけて失敗すると、データベースごと飛ばしてしまい、インスタンスがさら地になるのではあるまいか。mstdn.jpのぬるかるさんも最初期にそんな失敗をしていたし、自分にうまくできるのか。

 そんな不安が筆者の腰を重くしていたが、時間がたてば本家Mastodonもどんどんバージョンが上がり、どんどんコードも改善されていく。いつまでも尻込みしていては、他のインスタンスに置いて行かれるのも時間の問題だ。

 そこで筆者は一念発起し、次のような戦略を立てた。一人用インスタンスだったら吹っ飛ばしても大して困らないし、こちらでうまくできたら趣味インスタンスもアップデートしよう、と。

 前置きが長くなったが、2つのインスタンスのバージョンを上げるに当たり、行った手順やつまづいた部分、トラブルシューティングを紹介しよう。前提として、環境は「さくらのVPS」にUbuntu 16.04をインストールし、Dockerで構築したものだ。インスタンスのバージョンは2つとも1.2.2だった。

これまでやったことを整理する

 まずは自分自身がインスタンスの立ち上げ時に行った手順を思い出すため、「Xmind」というマインドマップソフトでコマンドを整理した。

立ち上げ時に行った手順を整理した

 そうそう、git cloneして設定ファイルいじってdocker-composeで立ち上げたんだったな……ということを思い出し、次にインスタンスのアップデート方法を調べた。

 主に参考にさせていただいたのは、「さくらの VPS + CentOS7 で 俺専用 Mastodon インスタンスを立ててみた話 - WWW WATCH」のアップデートに関する項と、公式のProduction guideだ。

 上記2つの情報のほか、ネット上から得られた知見を合わせると、筆者が行ったDocker環境でのアップデートは次のようになる。

git stash
git fetch
git status
git checkout $(git tag -l | sort -V | tail -n 1)
git stash pop
Mastodonの最新バージョンの取得
sudo docker-compose build
sudo docker-compose stop
sudo docker-compose run --rm web rake mastodon:maintenance:prepare_for_foreign_keys
sudo docker-compose run --rm web rails db:migrate
sudo docker-compose run --rm web rails assets:precompile
sudo docker-compose up -d
sudo systemctl restart nginx
取得した最新バージョンのビルドから起動まで

 Gitによる操作に難しいところはないが、git cloneでプロジェクトをローカルに移した後に自分で編集しているファイルがあるので、git stashにより一時的に編集ファイルを待避させる必要がある。git fetch、git checkoutでローカルのMastodonファイルを目的のバージョンにしてから、git stash popで待避させていた編集ファイルを元の位置に戻す、という流れだ。

 git checkout $(git tag -l | sort -V | tail -n 1) は公式ガイドに書いてある最新バージョンに上げる方法だが、git checkout v1.4.3などバージョンを指定することもできる。

 筆者の場合、ハマったのはやはりDocker周りだった。ビルドしてからすぐに4行目のsudo docker-compose run --rm web rails db:migrateをしようとしたところ、

"PG::ForeignKeyViolation: ERROR: insert or update on table "statuses" violates foreign key constraint "fk_rails_94a6f70399""

 というエラーが出て失敗し、その先のコマンドもうまくいかない。エラーメッセージで検索したところ、公式のGitHubに該当するissueがあった。

 そこに書いてあるアドバイスに従い、2、3行目を追加したところ正常にmigrateできた。公式のリリースノートによると、これはv1.4.2以上に上げる際に必要な処理のようだ。

 趣味インスタンスの作業ではそこから先は滞りなく進み、1時間ほどで無事にバージョン1.4.4に上げることができた。

無事にバージョン1.4.4にアップデートできた

 しかし、先に実験で試した一人用インスタンスでは当然スムーズにいかず、最終的には正常にアップデートできたものの、数多くの失敗をした。その全ては書かないが、遭遇した主なエラーとそれを解決できる(かもしれない)コマンドを最後に紹介する。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.