163
129

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerで雑にMastodonを起動する方法

Last updated at Posted at 2017-04-14

概要

Mastodon (https://github.com/tootsuite/mastodon) を、ローカル環境などの Docker で雑に動かす方法のまとめです。具体的には Linux サーバ上に Docker と Docker Compose で環境を構築し、http://<ip>:3000/ に表示します。細かい設定は抜きにして、とにかく動かして挙動を見たいかた向けの手順です。公式READMEでは、Docker関連の説明で一部足りない箇所があると思い、再整理しました。

なお、実際のサーバで動かす場合には、管理ユーザの設定や、メールサーバの設定がユーザ確認のために必要ですが、ここでは。省略しています。以下の管理ガイドやプロダクションガイドをご覧ください。

Docker 関連セットアップ

まず、Docker Engine(Dockerコンテナを実行するためのプラットフォーム)と Docker Compose(複数のコンテナをサービスとして一括管理するプログラム)をセットアップします。以降の手順は Linux の場合です。

Docker Engine は次のコマンドを実行してセットアップすると、Docker プロジェクトの最新安定版をダウンロードします。

# curl -sSL https://get.docker.com/ | sh

それから Docker Engine の起動と、ブート後のサービス自動起動設定をします。次のコマンドは CentOS 7 の場合です。

# systemctl enable docker
# systemctl start docker

次は、Docker Compose のバイナリをセットアップします。

curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

作業用 docker アカウントを作成します(root権限で全ての Docker 操作が可能なため、事実上の root ユーザとなりますので取り扱いにはご注意ください。あるいは、この手順を省略し、一般ユーザから sudo docker のように実行しても構いません)。

# /usr/sbin/adduser -g docker docker

ユーザを切り替えます。

# su - docker

最後にバージョン確認です。Server: のバージョンが表示されていれば正常です。表示されない場合は Docker Engine(dockerdデーモン)が起動しているかどうか、root 権限(正確には /var/run/docker.sock のアクセス権限があるかどうか)をご確認ください。

$ docker version
Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.05.0-ce
 API version:  1.29 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64
 Experimental: false

Mastodon のセットアップ

GitHub のリポジトリから、ソースコードをダウンロードします。ここでは /home/docker/ ディレクトリ以下での作業を想定していますが、任意の場所で実行できます。

$ git clone  https://github.com/tootsuite/mastodon.git live

ディレクトリを移動します。

$ cd live

Docker Compose は、現在の(カレント)ディレクトリ上のプロジェクト・ファイル(デフォルトは docker-compose.yml)を読み込み、一括してイメージの構築・ダウンロード・実行など操作を行えます。

mastodon ディレクトリ内には docker-compose.yml があります。これを使って、複数の Mastodon 関連コンテナを実行しますが、その前にイメージの取得と構築(ビルド)が必要です。

docker-compose.yml には複数のサービス(複数のコンテナ単位)や関連ファイルの記述があります。関係性は下図の通りです。

mastodon compose.png

サービスを実行する前に、docker-compose.yml ファイルを開き、サービス dbredis のボリューム行のコメント2箇所・4行を削除します(ボリューム機能を使い、コンテナ終了後もデータをホスト側に保存できるようにします)。具体的には、次のように、各 volumes: の前にある # を削除します。

version: '2'
services:

  db:
    restart: always
    image: postgres:alpine
### Uncomment to enable DB persistance
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:alpine
### Uncomment to enable REDIS persistance
    volumes:
      - ./redis:/data

それから、設定ファイル .env.production を作成します(これは Docker Compose 実行時、コンテナ内で有効になる環境変数を書き込むファイルです)。

$ cp .env.production.sample .env.production

詳細は後ほど編集します。

次は、Docker Compose 実行に必要なイメージのダウンロードとビルドを行います(Dockerfile をもとに、イメージを作成します。)。

$ docker-compose build

設定ファイル向けの準備と編集

シークレット(APIトークンに相当)を3つ作成します。次のコマンドを3回実行します(PAPERCLIP_SECRET SECRET_KEY_BASE OTP_SECRET で使います。)。

$ docker-compose run --rm web rake secret
<文字列>

実行すると <文字列> が出ますので、控えておきます。

それから、 .env.productionファイルを編集します。

10行目以降を編集します。対象は以下の行です。

# Federation
LOCAL_DOMAIN=<ホスト名 mastodon.example.jp など>
LOCAL_HTTPS=false

# Application secrets
# Generate each with the `rake secret` task (`docker-compose run --rm web rake secret` if you use docker compose)
PAPERCLIP_SECRET=8979dee487... ←先ほどのシークレット
SECRET_KEY_BASE=74a137afd0b0... ←先ほどのシークレット
OTP_SECRET=aae3d46591fb057... ←先ほどのシークレット
(省略)
# Optionally change default language
DEFAULT_LOCALE=ja

なお、本稿では省略していますが、実際にユーザを登録するには、認証のためにメールサーバ用のセットアップも必要です。

データベースの初期化とアセットのプリコンパイル

もう少し準備をします。

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

特にエラーがでなければ準備完了です。

Mastodon の起動

デタッチド・モード(バックグラウンドで)を起動します。

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

docker-compose ps で動作状態を確認します。各サービス(コンテナ)の状態(State)が起動中(Up)なのを確認します。

$ docker-compose ps
        Name                   Command                  State                   Ports
---------------------------------------------------------------------------------------------
mastodon_db_1           docker-entrypoint.sh    Up                      5432/tcp
                        postgres
mastodon_redis_1        docker-entrypoint.sh    Up                      6379/tcp
                        redis ...
mastodon_sidekiq_1      bundle exec sidekiq     Up                      3000/tcp, 4000/tcp
                        -q def ...
mastodon_streaming_1    npm run start           Up                      3000/tcp, 0.0.0.0:400
                                                                        0->4000/tcp
mastodon_web_1          bundle exec rails s     Up                      0.0.0.0:3000->3000/tc
                        -p 300 ...                                      p, 4000/tcp

起動まで時間がかかりますので、ログを参照します。画面のスクロールが止まるまで待ちます。

$ docker-compose logs -f

止まったら ctrl-fで中断できます。

あとは、ブラウザから動作確認です。 http://<ホスト名>:3000/ にアクセスし、画面が表示されるかを確認します。

mastodon1.png

あとは、ご自由にお使いください。

停止・再開

起動中のコンテナを停止するには

$ docker-compose stop

再開

$ docker-compose start

環境の削除

最後に docker-compose.yml によって作成したコンテナ、ボリューム、ネットワークなど削除するコマンド docker-compose down を実行します。

$ docker-compose down

ただし、PostgreSQL 用の ./postgres/ と Redis 用の ./redis/ の各ディレクトリは残り続けますので、必要なければ、このまま削除します(※root権限でないと削除できません)。

# rm -rf ./postgres
# rm -rf ./redis

おまけ

管理ユーザ作成用コマンド

$ RAILS_ENV=production && \
    docker exec -it $(docker ps -q -f name=mastodon_web_1) bundle exec rails mastodon:make_admin USERNAME=<ユーザ名>

参考

163
129
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
163
129

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?