Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2017-05-16

マストドン引っ越し記 07:29

 mstdn.onosendai.jpを適当なところに置いていたらディスクフルで動かなくなったので慌てて移動することにしたが、これがなかなかうまくいかない。

 そもそもdockerで隠蔽されているのでデータの実態がどこにあるのかよくわからん。

 どうも public/system あたりにはアップロードされた画像とかのデータが格納されているらしいがユーザー情報というかデータベース情報はどこにあるのだ


 と思ったらdockerコンテナの中にだけあってハードディスクにはバックアップされてないらしい。あぶねー!


 それやるには最初からdocker-compose.yamlで指定しておかないとなんないのね。

 ・・・といいつつそれを指定してもなんかファイルできないし不安・・・


 も、もしかしてデータ飛んじゃったの!?とヒヤリとしたが、dbのdockerインスタンスにアクセスすればまだデータは死んでなかった。よかった。うっかりdocker-compose downしてなくて。

docker exec mastodon_db_1 pg_dumpall -U postgres > ./mastodon_backup.sql

 というわけで良い子のみんなはこれをcronで毎日呼び出そう

 テキストファイルでバックアップとるというのが若干気になる人はpg_dumpと--format=cで


 とりあえず引っ越しできてよかった。


 と思ったら500エラー吐きまくり。

 なにごとかと思ったらスワップしまくってた。最低でも6GBくらいのメモリないときつそう。300人しかいないのに・・・まあ連合とかリモートフォローとかいれると数千人規模ではあるけれども。


 これまでめちゃくちゃ富豪的環境(メモリ128GB)でついでに動かしていたインスタンスだったので泣く泣くこれからアップグレードする。


 ほんとこれ、90年代の草の根BBS並の出費を覚悟しないと維持できないな




 さて、これだけだとあまりにアレなので引っ越しの手順をまとめた(ちゃんと引っ越せるまですげー時間かかった)


 まず、データベースのバックアップ

$ docker exec mastodon_db_1 pg_dumpall -U postgres > ./mastodon_backup.sql
$ tar zcf mastodon_backup.tar.gz mastodon_backup.sql

 次にpublic/systemのバックアップ

$ cd public
$ tar zcf system.tar.gz system

 mastodon_backup.tar.gzとsystem.tar.gzと、.env.productionを引越し先にコピー

 面倒なら/etc/nginx/nginx.confもコピー

 引越し先で


$ git clone https://github.com/tootsuite/mastodon.git
$ cd mastodon
$ docker-compose build

 ここからが違う。

 このあと先にmigrateしてしまうとpostgresqlの復元でエラーが出るので先にprecompileする


$ docker-compose run --rm web rake assets:precompile

 ここでdocker psしてdbがどのコンテナIDなのか確認


$ docker ps
cc59623821c6        postgres:alpine     "docker-entrypoint..."   12 minutes ago      Up 12 minutes       5432/tcp                           mastodon_db_1
445ba815ef52        redis:alpine        "docker-entrypoint..."   12 minutes ago      Up 12 minutes       6379/tcp                           mastodon_redis_1

 プリコンパイル直後はこの2つだけが立ち上がっているので今がチャンス!

 まず、データベースを復元する


$ tar zxvf mastodon_backup.tar.gz
$ docker cp mastodon_backup.sql cc59623821c6:/
$ docker exec mastodon_db_1 psql -f ./mastodon_backup.sql -U postgres

 これで復元できる。

 次にマイグレーション


$ docker-compose run --rm web rake db:migrate

 最後にシステムフォルダを復元する


$ cd public
$ tar zxvf ../system.tar.gz

 これで引っ越しできるはず!

 あ、nginxの設定ファイルも引っ越してね


$ sudo nginx -s stop
$ docker-compose up -d
$ sudo nginx

 できた。良かった