Mastodon

2017/05/07更新

対応バージョン: #2842

Mastodonを実運用するのではなく、各種設定やトゥート時などの挙動を試すためにローカルホスト上にインスタンスを立てる手順を示す。

あくまで試験用なのでHTTPSを使わず、ユーザ登録時のメール認証も行わず、構築もMastodonが用意したDocker環境を用いるものとする。

尚、環境構築はUbuntu 16.04上で行う。

パッケージ最新化

まずはパッケージを最新化する。

% sudo apt update
% sudo apt upgrade

Docker、Docker Composeインストール

次にDocker及びDocker Composeをインストールする。Dockerデーモンはサービスとして常駐させる。

Docker
% sudo apt install docker.io
% docker -v
Docker version 1.12.6, build 78d1802

上記パッケージをインストールするとdockerdが常駐する設定になる。

Docker Compose
% sudo apt install docker-compose
% docker-compose -v
docker-compose version 1.8.0, build unknown

dockerユーザ作成

必要なパッケージがインストールできたらインスタンスを管理する専用のユーザdockerを作成する。Dockerインストール時に作成されたdockerグループに所属させるのがポイントである。

% sudo adduser --ingroup docker docker

以降の作業はdockerユーザで行う。

% su - docker
% docker version
Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64

Mastodonインストール

ここまでで準備が整ったのでMastodonをインストールする。

まずはGitHubよりモジュール一式を入手する。

% git clone https://github.com/tootsuite/mastodon.git
% cd mastodon

次にDocker Compose用の設定ファイルdocker-compose.ymlを編集する。

% vi docker-compose.yml
バージョンを3 -> 2に変更
    1 version: '3'
以下のコメントを4箇所外す(コンテナを終了させてもデータが永続化されるように)
    8 #    volumes:
    9 #      - ./postgres:/var/lib/postgresql/data

   15 #    volumes:
   16 #      - ./redis:/data

続いて環境設定ファイル.env.productionをサンプルからコピーして用意し、必要なモジュールを入手してビルドする。

% cp .env.production.sample .env.production
% docker-compose pull
% docker-compose build

3種類のシークレットキーを生成して環境設定ファイルに転記する。また同ファイルのLOCAL_DOMAINとLOCAL_HTTPSを編集してローカル用かつHTTPSなしに設定する。

% docker-compose run --rm web rake secret
xxxxxxxxxx
% docker-compose run --rm web rake secret
yyyyyyyyyy
% docker-compose run --rm web rake secret
zzzzzzzzzz

% vi .env.production
   15 LOCAL_DOMAIN=example.com <- localhost:3000に変更
   16 LOCAL_HTTPS=true <- falseに変更

   30 PAPERCLIP_SECRET=xxxxxxxxxx <- 1回目のdocker-composeの結果
   31 SECRET_KEY_BASE=yyyyyyyyyy <- 2回目のdocker-composeの結果
   32 OTP_SECRET=zzzzzzzzzz <- 3回目のdocker-composeの結果

   43 # DEFAULT_LOCALE=de <- コメントを外してja(日本語)に変更

最後にDBの初期化とアセットのプリコンパイルを行ってインストールは完了である。

% docker-compose run --rm web rails db:migrate
% docker-compose run --rm web rails assets:precompile

Mastodon起動

docker-composeコマンドでMastodonのサービスを起動する。

% docker-compose up -d
mastodon_redis_1 is up-to-date
mastodon_db_1 is up-to-date
Creating mastodon_web_1
Creating mastodon_sidekiq_1
Creating mastodon_streaming_1

% docker-compose ps
        Name                    Command             State Ports
-------------------------------------------------------------------------------
mastodon_db_1        docker-entrypoint.sh postgres  Up    5432/tcp
mastodon_redis_1     docker-entrypoint.sh redis ... Up    6379/tcp
mastodon_sidekiq_1   bundle exec sidekiq -q def ... Up    3000/tcp, 4000/tcp
mastodon_streaming_1 npm run start                  Up    3000/tcp, 0.0.0.0:4000->4000/tcp
mastodon_web_1       bundle exec rails s -p 300 ... Up    0.0.0.0:3000->3000/tcp, 4000/tcp
http://localhost:3000/にアクセスして以下の画面が出ればOKである。

なお、ログは以下のコマンドで確認できる。

% docker-compose logs -f

アカウント登録

Web画面からユーザ名、メールアドレス、パスワードを入力して「参加する」ボタンを押す。

「メールアドレスの確認用のリンクが入力したメールアドレスに送信されました...」という画面に遷移するが、メールサーバの設定を行っておらず確認メールが送られないのでコマンドで強制的に承認と管理者への昇格を行う。

ここではユーザ名を「kogure」、メールアドレスを「kogure@localhost」とする。

% docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=kogure@localhost
kogure@localhost confirmed

% docker-compose run --rm web rails mastodon:make_admin USERNAME=kogure
Congrats! kogure is now an admin. \o/
Navigate to http://localhost/admin/settings/edit to get started

この状態で再度Web画面から上記ユーザでログインすれば以下のような画面になり、トゥートが可能になる。

その他

Mastodonの停止/再開、環境そのものの削除は以下の手順で行う。

停止
% docker-compose stop
再開
% docker-compose start
環境削除
% docker-compose down
% cd ..
% sudo rm -rf mastodon

参考サイト