Mastodon(マストドン)のインスタンスをCentOS7で立ててみる

シェアする

ヨメレバCSS

 大人気のMastodon。この流れにのって自分でもインスタンスを立ち上げてみました。

 ただ力不足で、確認メールを送信するところがまだ出来ていない。本当にすまない。

 そのあたりも後述しますが、まだ理解できてないところも多いです。しかし、ここまででも他の人の参考になればと思い公開します。

スポンサーリンク
GoogleAdSence レクタングル(大)

Mastodonとは

 この一週間くらいで一気に流行始めたSNSサービスです。Mastodon自体はサービスを提供するプログラムであり、それを使って個人や企業がインスタンス(Mastodonのサービスを提供しているサーバのこと)を立てていっているのが現状。個人だとmstdn.jp、企業はpawoo.netfriends.nicoが有名かしら。

 インスタンスに登録するところは別サイトになりますが、以前記事に書きました。よろしければこちらもどうぞ。

Mastdonインスタンスを作るには

 インスタンスを作る方法として、現在大きく二種類あります。

 ・Mastodonのプログラムをインストールして作る

 ・Dockerコンテナを利用する

 Dockerはいわば動作環境ごとセットになっているパッケージのようなものですね。ただ、そのDockerを動かすための環境構築が必要でもあります。

 ここでは、環境を整えてMastodonプログラムをインストールするところからやってみます。

なぜインスタンスを自分で立てるのか

 私個人としては、ただの技術的興味が一番の理由になります。

 でもMastodonを使っていく場合に、お一人様インスタンスを立てて自分のメインアカウントを管理することになっていくかもしれないと思うところもあり、立て方くらいは調べておこうかなと思ったところもあります。

 それぞれのインスタンスにアカウントを取るのが良いのか、リモートフォローを活用していくのが良いのか、まだちょっと分からないですが。

 そもそも仮想サーバーの維持費が安いプランでも月500円かかるので、続けていくかもわからない。mstdn.jpとかに大人しく定住するのがいいのかもしれない。

インスタンスを立てるための環境

 環境として用意したのは次の通り。

グローバルIPアドレスのあるCentOS7サーバー

 外部からアクセスのできるサーバー環境が必要です。

 こちらもとりあえず、IDCFクラウドにアカウントを持っていたので、そちらに仮想環境を作りました。

 サーバーはlight.S1で月500円。試すには十分ですが、途中で少しメモリが足りなくなってしまいましたので、スワップを追加する設定を行いました。

 外部からアクセスできるように、ssh、http, https、3000をポートフォワードしておきます。

 sshは作業用に、ポート3000はMastodonのテスト用に使います。

 httpは、httpでアクセスが来たときにそれを受けて、httpsにリダイレクトするために開けておきます。

Mastodon用ドメイン

 Mastodonを動かすためのドメインです。 

 私はお名前.com に自前ドメイン(scriptlife.jp)を持っていたので、そこにmastodon.scriplife.jpを追加しました。

 試すだけならグローバルIPアドレスだけでも動かせそうでしたので、必須ではないです。

スポンサーリンク

MastodonをCentOS7にインストールする

 CentOSに環境を作り、動作させていきます。

 ここから先の作業については次のURLを参考にしました。参考にしましたというか先に白状しておきますと手順とか設定とか正直なところQiita記事の受け売りみたいなものになっているかもしれないところがあり本当にすまない。Rubyとかrailsとか、その他にも触ったことないサービスが多くて結局言われるままなんよ…

## Mastodon **( はイエナ大学出身の24歳のドイツ人 (
Full documentation repository for Mastodon

 Qiitaの記事では最新版をいろいろなところから集めてきますが、私は標準に入っているものはそのまま使うスタンスでやってみています。

OSのインストールとアップデート

 まずOSのインストール。仮想サーバーであれば、インストール済みの状態で用意されます。OSはCentOS7を選択します。

 そして、入っているパッケージをひとまずアップデートします。

必要なパッケージのインストール

 必要なパッケージをがしがしインストールしていきますよ。

ImageMagick

FFMpeg

 FFMpegはrpmfusionからインストールします。こいつをソースコードからインストールしようとしたらめっさ苦労するから大人しくrpmを使うがよい…

Redis

 こちらもepelを追加してインストール。

 インストール後に、サービスとして起動するようにします。

 参考にした記事では「systemctl start redis && systemctl enable $_」となっていたところを分かりやすいようにバラしてみました。「$_」は「前のコマンドの最後の引数」となります。

PostgreSQL

 デフォルトのバージョン (9.2)でインストール。

 Mastodon用ユーザーを作成します、

 ここでsudoをいれてやらないと、

PostgreSQLを”root”で実行することはできません。
システムセキュリティの危険防止のため非特権ユーザIDでサーバを起動しな
ければなりません。適切なサーバの起動方法に関する詳細はドキュメントを
参照してください

と警告されますからpostgresになって実行します。

 次に統計情報を有効にします。始めは要らないかなと思ったのですが、管理画面のPgHeroで「Query stats must be enabled for slow queries」と警告されたので有効にしました。

/var/lib/pgsql/data/postgres.confを修正します。

となっているところを、

とします。

 変更したらリロードします。

Nginx

 epelにあるようなのでそれを使います。

 Ngnxは、MastodonをSSL化するためのプロキシ的な使い方をするみたい。

 ※ここではインストールするだけで、起動はさせません。後述するLet’s Encryptの設定で独自にHTTPSを使用するので、起動しているとむしろ邪魔になるかもしれません。

Node.js

 標準バージョンは6.10.1のようで、それを使います。

 setup_6.xを実行するのはお約束? Node.jsがまだよく分かっていないところある。

Yam

 Yarnは専用リポジトリから。

Ruby

 標準では2.0ですが、2.4.1が必要みたいなので、そちらを入れます。

 ここではrvenvを使用して、mastodonユーザーに2.4.1環境を作ります。

 Mastodonインスタンスはこのmastodonユーザーで動作させることになります。

 (以降、rootユーザーとmastodonユーザーで操作する場面が混在していきます。コンソールが#の場合はroot、mastodon$ となっていたらmastodonユーザーと考えて下さい)

 これで、mastodonユーザーであれば2.4.1が使えるようになりました。

Bundler

 そのままmastodonユーザーで実行します。

スポンサーリンク

Mastodonのインストール

 いよいよインストール。

パッケージのダウンロード

 パッケージをgithubから取得してきます。

 /home/mastodon/liveにインストールされました。

設定の変更

 liveの下に設定ファイルを作ります。.env.production.sampleを.evn.productionにコピーして、.env.productionの項目を修正します。

となっているところを、

とします。

 DB_HOSTを空にすると、ローカルのpostgresを参照しにいきます。

 LOCAL_DOMAINはmastodonを動かしているサーバーを指定します。まずテスト用に、ポート3000で起動させるので「mastodon.scriptlife.jp:3000」としています。LOCAL_HTTPSはテスト用にfalseにしておきます。

 その下にある、

については、

を実行して、生成された文字列を指定します。ひとつの項目につき1回、都合3回生成します。

セットアップ

 railsでデータベースの設定と、アセットのプリコンパイルを行います。

サービス化

 3つのサービスを実行するようにします。これはrootで行います。

 それぞれサービス用の設定を作成し、systemctlで管理できるようにします。

mastodon-web (Puma)

 Webサービスを作成、実行します。

/etc/systemd/system/mastodon-web.serviceに次のファイルを作成します。

mastodon-sidekiq (Sidekiq)

/etc/systemd/system/mastodon-sidekiq.serviceに次のファイルを作成します。

mastodon-streaming

/etc/systemd/system/mastodon-streaming.serviceに次のファイルを作成します。

サービスの自動起動

 各サービス用の設定を作成したら、サービスの起動と自動起動の設定をします。

 まとめてやるとなぜか上手くいかなかったので、ひとつずつコマンドを実行しました。

Query Statusの有効化

 統計情報を有効化します。


SELinuxの無効化

 厄介の種なので基本オフにするバッドノウハウ。

とします。

 IDCFのテンプレートではデフォルトでDisableだったので、特にすることはありませんでした。

 kagucho.netで使用されているSELinuxのポリシーが公開されているようなので、有効にする場合はこちらを参考にするとよいかもしれません。

firewalled

 IDCFの仮想マシンは、そもそもFWの内側にいて接続を制限されていますが、流れに沿って一応設定をしておきます。

 firewalledはCentOS7より、iptablesに変わって標準になったFirewallサービスのよう。

 こちらもデフォルトではオフになっていたようで、「FirewallD is not running」と言われてしまったのでサービスを起動するところから。

で、httpとhttpsを開けます。SSHはデフォルトで開いていたので、そちらはそのままで。

※MastodonはHTTPSで通信を行いますが、ファイアウォールの設定ではHTTPも開けておきます。http://mastodon.scriptlife.jpでアクセスがきたときに、httpsにリダイレクトさせるためです。

リダイレクト設定は、後述するNginxで行います。

Mastodonの動作確認をする

 ここまで来たら、仮ではありますが動作しているはず。

 ポート3000を一時的に開けて、

http://mastodon.scriptlife.jp:3000 にアクセスしてみます。

やったぜ。

スポンサーリンク

管理者の設定をする

 管理者アカウントの設定をします。

 管理者アカウントを作成するとき、Mastodonでは一般アカウントから昇格させることになるので、まずは一般アカウントを登録する必要があります。

 つまり、まずは一般アカウントが存在する必要がありますが、この時点では登録確認メールが送信できていないので、普通に登録ができません。ですから「ユーザー名などを入力して登録 → そのメールアドレスをコマンドから承認 → そのユーザーを管理者に昇格」という手順を踏むことになります。

 まずはMastodonのサイト画面から普通に登録を行います。登録するユーザー名は「admin」、メールアドレスは「admin@gmail.com」と仮にします。

 で、次にmastodonアカウントのliveディレクトリ以下で、

として、そのアカウントを管理者に昇格させ、メールの確認も行ったことにします。

 これでadmin@gmail.comでログインできるようになっているはず。

 またログインしてみると、「設定」のところに「管理」項目が増えており、そこから管理用の設定ができるようになっています。

 ひとまずは「サイト設定」にある、「新規登録を受け付ける」をオフにしておくとよいかもしれません。「有効」をクリックしたら「無効」に変わります。

確認用の設定をオフにする

 Mastodon自体はそのままポート3000で動いていますが、外部から接続できないようにします。

 とすると、ポート3000が閉じられます。(元に戻る)

.evn.productionの設定も修正する

 .env.productionにしていた、テスト用の設定も戻しておきます。

 LOCAL_DOMAINとLOCAL_HTTPSを、それぞれ次のようにします。

 変更をしたらサービスを再起動します。

 どうやらmastodonは、コードや設定を変更したら、サービスを再起動しないと反映されないようです。

 rubyのwebサービスだからブラウザをリロードすればよいかと思っていたけど、サービスとして動作しているから、再起動してやらないといけないみたい。

 関連している機能によって再起動するサービスが変わってくるので注意が必要です。

 よくわからなかったら、

と全部のサービスを再起動してしまうのもアリ。

HTTPS化の設定

 実際に動かす際にはHTTPSで通信させるようにします。

 SSLの証明書についてはLet’s Encryptを使用します。

 作業自体は簡単なのですが、これを行うには独自のホスト名が必要になります。

「mastodon.scriptlife.jp」のところに、Mastodonサーバーのホスト名を指定します。

するとこのホスト名向けのSSL証明書を自動的に作ってくれます。

 「webmaster@scriptlife.jp」のところには管理者のアドレスを入れます。(私はプライベートなgmailアドレスを入れておきましたが、それで通りました)

 最後の「Would you be willing to ~」ではYにするとEFFのメーリングリストに登録してくれるようです。

 作業中にcertbotがHTTPS通信を行うので、ApacheやNginxなどが起動してHTTPS(443)を使用していないか、ポート443がFWなどで接続できなくなっていないかは注意して下さい。

443で接続できないと、以下のようになります。

成功するとこう。

 失敗した場合は、もう一度「 certbot certonly –standalone -d mastodon.scriptlife.jp」を実行しなおせば良いです。

Nginxの設定と起動

 仕組みとしてはどうも、ローカルのポート3000で動作しているMastodonサーバーのプロキシとしてNginxが動作して、HTTPS化をしているようです。

 /etc/nginx/conf.d/mastodon.conf を以下のように作成します。

 mastodon.scriptlife.jpを、それぞれ読み替えてもらえれば良いです。

 ssl_certificate、 ssl_certificate_key 、 ssl_trusted_certificate でLet’s Encryptのファイルを参照するようになっています。「/etc/letsencrypt/live/(ホスト名)」に作られているので、そちらを参照するようにして下さい。

 できたら起動。

 これで、https://mastodon.scriptlife.jpで接続できるようになりました!

定時処理の登録

 mastodonユーザーのcrontabに、定時処理を書きます。

として開いたところに、

を追記。

@dailyで日次処理してくれるのか…(今頃知るおっさん

確認メールの送信

 で、ここが今詰まっているところです。

 Mastodonは標準では、mailgunを利用してメールを送ることができるようになっているみたい。このサービスは1万通までは無料みたいなので、登録してみてもよかったのですが、そもそもCentOS7だとローカルにpostfixがあるのでそっちで送れないかなあと試しているところ。ですがまだ上手くいっていない。

 Gmailが使えるらしいとの情報もあるので、そちらも試してみたい。

(2017/04/26追記 ひとまず出来たので記事にしました)

Mastodon(マストドン)の確認メールを自前メールサーバー(postfix)で送信する

 railsやサービスとしての動作への理解も足りていないので、そのあたりを勉強しつつ、また追記していければと思っています。

 でもとりあえずここまででも、何かの参考になれば。

コメント

  1. rinmon より:

    2個目のインスタンスを導入中です。
    参考にさせていただきました。
    メールは同サーバー内にPostfixを立ち上げて使っています。
    キモは、Mastodon側の「.env.production」ファイルの
    SMTP_SERVER=
    の部分でここのIPはlocalhostではなく、ifconfigで使っている内部IPを確認して設定することでMastodonから接続できるようになりました。
    以上、今後ともよろしくお願いいたします。
    @rinmon@mstdn.top

    • かげろ かげろ より:

      なるほど、情報ありがとうございます!
      試してみます!

    • かげろ かげろ より:

      どうやらウチの引っかかりポイントはこことは違ったみたいでしたが、
      いろいろと見直してみて解決することができました。
      ありがとうございました!

  2. […] Mastodon(マストドン)のインスタンスをCentOS7で立ててみる 同じくさくらのスタートアップスクリプトを利用せずにインスタンスを立てる方法が書かれています。 […]

  3. jupiter より:

    こちらの手順に従って構築しました。
    特に悩むこともなく立ち上がりました。
    大変感謝しております、ありがとうございます。

  4. […] Mastodon(マストドン)のインスタンスをCentOS7で立ててみる […]