かなり前になるが、新しいソーシャルネットワーキングサービス「Mastodon」を紹介したのを、覚えておられるだろうか。
当初は「大阪丼」(https://mstdn.osaka)に参加していたが、思うところあり、独立して箕面市(非公認)の地域インスタンス「箕面どん」を立ち上げた。
箕面どん
さくらのクラウドでサーバーをレンタルし、CentOS 7.4上で構築している(非Docker)。導入自体は「スタートアップスクリプト」があるので、比較的簡単にできた。
当時のMastodonのバージョンが2.3.3であったが、最近2.4.0がリリースされたので、アップデートに取り組んだ記録である。
鯖缶の方々の様子を見ると、データベースを飛ばして全て消えてしまうなど、いろいろなアクシデントが起こるアップデート作業。僕自身も1度目は失敗し、2度目の挑戦でやっと上手くいった。
初心者の方々にも参考になるように、ここに過程を書きとどめておきたい。
なお、全体の流れは下記サイトを参考にした。
「さくらのクラウド」スタートアップスクリプトによるMastodonを、v2.3.3からv2.4.0rc3にバージョンアップした時につまずいた話。
1.サーバーのバックアップ
万が一に備えて、必ずやっておきたい作業である。僕も1回目失敗したとき、バックアップのおかげで、復旧することができた。
pg_dump/pg_dumpallなどのコマンドを使って、データベースだけバックアップする方法もあるが、僕はさくらのクラウドのアーカイブ機能を使って、ハードディスクを丸ごとバックアップした。復元も簡単なので、お勧めである.
2.PostgreSQLを9.6にアップデート
v.2.4.0からPostgreSQL 9.4以上が必須となる。さくらのクラウドでは9.2なので、アップデートが必要である。10を試してみたが、さくらのクラウドのCentOS 7.4上ではエラーで動かなかったので、9.6.9を下記のようにインストール、データベースを初期化した。
# yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
# yum list | grep postgresql96
# yum install postgresql96-server
# alternatives --display pgsql-psql
# alternatives --display pgsql-pg_dump
# PGSETUP_INITDB_OPTIONS="--encoding=UTF8 --no-locale" /usr/pgsql-9.6/bin/postgresql96-setup initdb
コマンドの意味は下記サイトに詳しい。
CentOS 7.3にインストールしたPostgreSQL 9.4から9.6へアップデートする
3.pg_upgradeというコマンドをインストール
【註】
この過程は必ずしも必須ではない。ソースを入れ替えるので、危険性を内在している可能性がある。PostgreSQLの新バージョンが出る度にインストールする方針の方は、する必要なないと思われる。
この作業をする前に、今動いているPostgreSQLサーバーを停止しておく必要がある(←これ、重要)。
停止しておかないとインストールに失敗する。
# systemctl stop postgresql
停止しているかどうか確認。
# systemctl status postgresql
そして、postgresユーザーに切り替えて、下記のようにコマンドを打つ。
# su - postgres
-bash-4.2$ /usr/pgsql-9.6/bin/pg_upgrade -d /var/lib/pgsql/data -D /var/lib/pgsql/9.6/data -b /usr/bin/ -B /usr/pgsql-9.6/bin/
このコマンドはエラーになるので、下記サイトを参考に、pg_upgradeを入れ替える。
pg_upgradeでつまずいた
なお、さくらのクラウドのCentOSにはwgetが入っていないのでインストール。vimも好みで入れる。
# yum install wget
# yum install vim
(1)ソースをダウンロードして展開
# cd /usr/local/src
# wget https://ftp.postgresql.org/pub/source/v9.6.9/postgresql-9.6.9.tar.gz
# tar zxf postgresql-9.6.9.tar.gz
# cd postgresql-9.6.9
(2)src/bin/pg_upgrade/server.cを修正
# vim src/bin/pg_upgrade/server.c
(GET_MAJOR_VERSION(cluster->major_version) < 903) ?
となっているところを
(GET_MAJOR_VERSION(cluster->major_version) < 900) ?
と変更する。
(3)ビルドする(インストールはしない)
# ./configure && make
(4)yumバージョンとmakeバージョンを置き換え
# cd /usr/pgsql-9.6/bin/
# mv pg_upgrade pg_upgrade.rpm
# cp /usr/local/src/postgresql-9.6.9/src/bin/pg_upgrade/pg_upgrade .
ここまでして再度postgresユーザーに切り替え、下記のコマンドを打つと、ズラズラとOKが表示されて、インストールに成功する。
$ /usr/pgsql-9.6/bin/pg_upgrade -d /var/lib/pgsql/data -D /var/lib/pgsql/9.6/data -b /usr/bin/ -B /usr/pgsql-9.6/bin/
なお、最初に紹介したサイトでは、pg_upgradeをインストールした後で「後処理」をしているが、僕の環境では上手くいかなかった。それでも問題なくサーバーは動いているので、無視しても大丈夫である。
他に、以下の設定ファイルを書き換えた。
# vim /var/lib/pgsql/9.6/data/pg_hba.conf
METHOD欄を全て、trustに書き換え。
【2018年6月3日追記】
この設定は、あくまでさくらのクラウドでスタートアップスクリプトを使って、インスタンスを立ち上げた場合に有効である。
その他の環境の場合、データベースへのアクセスを無制限に許してしまい、大変危険である。
その場合は、設定をmd5などにして、暗号パスワードを設定することをお勧めする。
以下のサイトを参考にされたし。
pg_hba.confの設定
# vim /var/lib/pgsql/9.6/data/postgresql.conf
127行目の
dynamic_shared_memory_type = posix
という行の先頭に#を付けて、コメントアウト。
紹介したサイトではその後、コマンドを9.6用に差し替えているが、それをするにはPostgreSQLの古いバージョンを削除しなくてはならない。
僕の環境ではそれをすると、bundle installでpgがインストールできないという現象にぶつかった。
コマンドを総入れ替えしなくても特に問題はないだろうと考え、見送った。
4.PostgreSQL 9.6に切り替える。
以下のコマンドを打って、旧バージョンの自動起動を無効にし、9.6を有効化、自動起動させて、CentOSを再起動する。
# systemctl disable postgresql
# systemctl start postgresql-9.6
# systemctl enable postgresql-9.6
# reboot
自分のインスタンスにアクセスし、正常に動いているかどうか確認する。
5.ruby 2.5.1のインストール
Mastodon v.2.4.0ではruby 2.5.1が必須である。
インストール作業はmastodonユーザーに切り替えて行う必要がある(重要!)。これをしておかないと2.4.0のインストールに失敗する。
# su - mastodon
ruby 2.5.1のインストールには、下記サイトを参考にした。
rbenv を使って ruby をインストールする(CentOS編)
(1)rbenvをインストール(clone)する
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
(2)環境設定
# PATH に追加
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# .bash_profile に追加
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# 上記設定の再読み込み
$ exec $SHELL -l
(3)ruby-build を インストール(clone)する
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
(4)ruby 2.5.1をインストール
$ rbenv install -v 2.5.1
(5)環境確認
再読み込み。
$ rbenv rehash
先ほどインストールした最新版に設定
$ rbenv global 2.5.1
確認
$ ruby -v
ruby 2.5.1p57 (2018-3-29 revision 63029) [x86_64-linux]
6.Mastodon v.2.4.0をインストール
ここまで下準備をして、ようやく2.4.0をインストールできる。
インストールには下記サイトを参考にした。
Mastodonのアップデート
Mastodonのバージョンアップの時に入力するコマンド(non-Docker)
# su - mastodon
$ cd live
$ git fetch
$ git checkout $(git tag | sed -e "/rc/d" | tail -n 1)
$ gem install bundler
$ bundle install
$ yarn install
$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bundle exec rails assets:precompile
$ sudo systemctl restart mastodon-*.service
僕の環境では、RAILS_ENV=production bundle exec rails assets:precompileでエラーが出たが、mastodon serviceを再起動したら、問題なくアップデートされていた。
自分のインスタンスのアバウト画面で、2.4.0と表示されていたら成功である。
では、素晴らしきMastodon Lifeを!
2 個のコメント
貴重な情報を共有いただきありがとうございます。
Author
参考になり、幸いです。
Mastodonでこの記事を公開したところ、特にデータベースの設定にいくつか指摘をいただきました。
それを反映して記事を書き直しています。
おかげさまで、信頼性の高い記事が書けたと思います。