JQ Blog

MastodonをHerokuで動かしてみる

Mastodonとは

(ウィキペディア「マストドン (ミニブログ)」))に詳しく説明されているがMastodonというものはTwitterによく似ている短文投稿型のSNSである。最近流行っているそうだ。Mastodonはオープンソースで公開されているので自由に活用できる。

使い方

使い方としてはいろいろあるけど、今回はgithubに乗せているDeploy to Herokuボタンを利用する方法とgit cloneして自らHerokuにpushする方法、2つを試してみる。

Deploy to Herokuボタンを利用する方法

以外とすごく簡単。https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Heroku-guide.md のHeroku Buttonを押し、

  • App Nameを希望のアプリ名に
  • S3_ENABLEDをtrueに
  • LOCAL_DOMAINを<アプリ名>.herokuapp.comに
  • SMTP_FROM_ADDRESSをnotifications@localhostに

変更して、Deployボタンを押す。Mastodonはデフォルトではdynoのファイルシステムにアイコンやメディアなどのファイルを格納する。これらのファイルは1日に1度のdynoの再起動の際に消えてしまう。なのでS3を使ってファイルを保存する方が良い。S3を使う場合は

  • S3_BUCKET
  • S3_REGION
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

これらを記入する。
メールの機能のためにSMTP設定もしなきゃいけないが今回は一旦gmailで設定しておいた。
Manage appボタンからダッシュボードを開き、Dyno formationからConfigure Dynosをたどり、worker dynoをONにする。
これでセッティングは終わり。
今までの設定をしたApplicationここで確認できる。

git clone

git cloneするのもすぐできる。
適当なDirectoryに

1
$ git clone git@github.com:tootsuite/mastodon.git

を入力する。それから
- Xcode Command Line ツール

1
$ xcode-select --install
  • HomeBrewで下記のものをインストール
1
$ brew install imagemagick ffmpeg yarn postgresql redis rbenv nodejs protobuf
  • rbenv 2.4.1をインストール
1
$ rbenv install 2.4.1
  • bundlerインストール
1
$ gem install bundler

全部インストールできたら、実際のapplicationのためのインストールをする。

1
2
3
4
5
6
$ brew install libidn
$ bundle install --with development
$ yarn install --pure-lockfile
$ gem install foreman --no-ri --no-rdoc
$ bundle exec rails db:setup
$ bin/rails assets:precompile

ここまでしたらセッティングは終わり。こうしたらローカルで動くようになる。
そこで

1
2
$ heroku login
$ heroku create <App名>

を実行してheroku appを作って、

1
2
3
$ git add .
$ git commit -m "first commit"
$ git push heroku master

を実行してpushする。そしたら

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
remote:        To see why this extension failed to compile, please check the mkmf.log which can
remote:        be found here:
remote:        
remote:        /tmp/build_65348a656aac448eb5aea36afa80f6c0/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0/cld3-3.1.3/mkmf.log
remote:        
remote:        extconf failed, exit code 1
remote:        
remote:        Gem files will remain installed in
remote:        /tmp/build_65348a656aac448eb5aea36afa80f6c0/vendor/bundle/ruby/2.4.0/gems/cld3-3.1.3
remote:        for inspection.
remote:        Results logged to
remote:        /tmp/build_65348a656aac448eb5aea36afa80f6c0/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0/cld3-3.1.3/gem_make.out
remote:        
remote:        An error occurred while installing cld3 (3.1.3), and Bundler cannot continue.
remote:        Make sure that `gem install cld3 -v '3.1.3'` succeeds before bundling.
remote:        
remote:        In Gemfile:
remote:        cld3
remote:  !
remote:  !     Failed to install gems via Bundler.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed

と怒られる。調べてみるとbuildpacksを設置しなきゃいけない。それで

1
2
3
4
5
$ heroku buildpacks:add https://github.com/heroku/heroku-buildpack-apt # v1.3.3かそれ以前ではこの行は不要
$ heroku buildpacks:add heroku/nodejs -a <App名>
$ heroku buildpacks:add heroku/ruby -a <App名>
$ heroku addons:create heroku-postgresql -a <App名>
$ heroku addons:create heroku-redis -a <App名>

ちゃんと設置をしてから

1
$ git push heroku master

をしてみたら、無事に通る。次は

  • データベースのマイグレーション
1
2
$ heroku run rails db:migrate -a <App名>
$ heroku run rails db:seed -a <App名>
  • アプリケーションの設定
1
2
3
4
5
$ heroku config:set HEROKU=true -a <App名>
$ heroku config:set LOCAL_DOMAIN=$APP_NAME.herokuapp.com -a <App名>
$ heroku config:set PAPERCLIP_SECRET=`heroku run rails secret -a <App名>` -a <App名>
$ heroku config:set SECRET_KEY_BASE=`heroku run rails secret -a <App名>` -a <App名>
$ heroku config:set OTP_SECRET=`heroku run rails secret -a <App名>` -a <App名>

そしてHerokuのAppのDashboardでworkerをONにする。
ここまでするとセットアップは全て終わり、Heroku上で動かすことができる。その結果はここで確認できる。

参照

tootsuite/documentation(Development guide)
tootsuite/documentation(Heroku guide)
zunda/mastodon(CreateInstanceOnHeroku)