Mastodonインスタンス構築(Mastodon)

最終更新日: 2017.08.02

<<トップページ <<新着情報 <<逆引き集 <<リンク集 <<サイト内検索 <<メルマガ <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

MastodonTwitterのようなSNSサービスを自宅サーバーで行えるようにする。
なお、Mastodonでは、サービスを提供するサーバーを「インスタンス」と呼ぶ。

Apache暗号化通信が導入済であること
必要ハードスペック



■Mastodonホスト名設定

バーチャルホスト設定を参照して、Mastodonインスタンスへホスト名mstdn.centossrv.comでアクセスできるように設定する。

(バーチャルホスト設定条件)
ホスト名 mstdn.centossrv.com
ドキュメントルート /var/www/html/mstdn.centossrv.com

■SparkPost登録メールサーバー構築済の場合は不要

SparkPostサービスを利用して、ユーザー登録時のメールアドレス確認メールを送信できるようにする。
※SparkPostでは5000通/日、100000通/月のメールを送信元=自ドメイン名のメールアドレスとして送信することができる

なお、ドメイン認証するため、あらかじめpostmaster@centossrv.comまたはabuse@centossrv.com宛メールを受信できるようにしておくこと。※デフォルトでpostmaster@centossrv.comまたはabuse@centossrv.com宛メールはrootユーザーに転送されるようになっているので、rootユーザー宛メールを受信できるようにしておく⇒CentOS初期設定の「root宛メールを転送する」を参照
  • SparkPostSIGN UP(ユーザー登録)および送信元メールのドメインを設定する。
  • ドメイン設定後、「SMTP Setup」で表示されたPasswordを控える。※一度しか表示されないので注意⇒紛失した場合は、SparkPostにログイン後、ACCOUNT⇒API KEYS⇒NEW API KEYでAPI KEYを新たに生成し直す
  • ユーザー登録したメールアドレス宛に送られてきたメール内のリンクをクリックしてメールアドレス確認を行う。
  • postmaster@centossrv.comまたはabuse@centossrv.com宛に送られてきたメール内のリンクをクリックしてドメイン確認を行う。

■Mastodonインストール

(1)Mastodonインストール準備
[root@centos ~]# yum -y install libxml2-devel ImageMagick libxslt-devel git curl file g++ protobuf-compiler protobuf-devel readline-devel libicu-devel libidn-devel ← Mastodonインストールに必要なパッケージをインストール

EPELリポジトリ導入(EPEL)を参照してEPELリポジトリを導入する

[root@centos ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm ← nux-dextopリポジトリインストール

[root@centos ~]# yum -y install ffmpeg ffmpeg-devel ← ffmpegインストール

[root@centos ~]# curl -sL https://rpm.nodesource.com/setup_6.x | bash - ← Node.jsリポジトリインストール

[root@centos ~]# yum -y install nodejs ← nodejsインストール

[root@centos ~]# npm install -g yarn ← yarnインストール

[root@centos ~]# useradd mastodon ← mastodonユーザー作成

(2)Redis導入
[root@centos ~]# yum -y install redis rubygem-redis ← Redisインストール

[root@centos ~]# systemctl start redis ← Redis起動

[root@centos ~]# systemctl enable redis ← Redis自動起動設定

[root@centos ~]# mv /opt/nessus/lib/nessus/plugins/redis_password_protection_disabled.nasl /opt/nessus/lib/nessus/plugins/redis_password_protection_disabled.nasl.org ← Nessusによる「Redis Server Unprotected by Password Authentication」検知対応Nessus導入時のみ

(3)Postgres導入
[root@centos ~]# yum -y install postgresql-server postgresql postgresql-contrib postgresql-devel ← Postgresインストール

[root@centos ~]# postgresql-setup initdb ← データベース初期設定
Initializing database ... OK

[root@centos ~]# systemctl start postgresql ← Postgres起動

[root@centos ~]# systemctl enable postgresql ← Postgres自動起動設定

[root@centos ~]# sudo -u postgres psql ← Postgres管理者ユーザーでpsql実行
could not change directory to "/root"
psql (9.2.18)
Type "help" for help.

postgres=# CREATE USER mastodon CREATEDB; ← Postgresにmastodonユーザー作成
CREATE ROLE
postgres-# \q ← psql終了

(4)Rbenv導入
[root@centos ~]# su - mastodon ← mastodonユーザーへ切替

[mastodon@centos ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv ← Rbenvダウンロード

[mastodon@centos ~]$ cd ~/.rbenv && src/configure && make -C src && cd ~ ← Rbenvインストール

[mastodon@centos ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile ← Rbenv環境設定

[mastodon@centos ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile ← Rbenv環境設定

[mastodon@centos ~]$ source ~/.bash_profile ← Rbenv環境設定反映

(5)Ruby導入
[mastodon@centos ~]$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build ← Rubyダウンロード

[mastodon@centos ~]$ rbenv install 2.4.1 && rbenv global $_ && rbenv rehash ← Rubyインストール
※時間がかかる

(6)Mastodonインストール
[mastodon@centos ~]$ git clone https://github.com/tootsuite/mastodon.git live ← Mastodonダウンロード

[mastodon@centos ~]$ cd live ← Mastodonダウンロード先ディレクトリへ移動

[mastodon@centos live]$ git checkout $(git tag | grep -v rc | tail -n 1) ← Mastodon最新安定板(RC版を除く)ダウンロード

[mastodon@centos live]$ gem install bundler ← bundlerインストール

[mastodon@centos live]$ bundle install --deployment --without development test
※時間がかかる

[mastodon@centos live]$ yarn install --pure-lockfile
※時間がかかる

[mastodon@centos live]$ cp .env.production.sample .env.production ← サンプルをコピーして.env.productionを作成

[mastodon@centos live]$ RAILS_ENV=production bundle exec rake secret ← 秘密鍵生成(1個目)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
※後で使用するため出力結果を控えておく

[mastodon@centos live]$ RAILS_ENV=production bundle exec rake secret ← 秘密鍵生成(2個目)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
※後で使用するため出力結果を控えておく

[mastodon@centos live]$ RAILS_ENV=production bundle exec rake secret ← 秘密鍵生成(3個目)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
※後で使用するため出力結果を控えておく

[mastodon@centos live]$ RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key ← Webプッシュ通知用鍵生成
VAPID_PRIVATE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
VAPID_PUBLIC_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
※後で使用するため出力結果を控えておく

[root@centos mastodon]# vi .env.production ← .env.productionファイル編集
# Service dependencies
# You may set REDIS_URL instead for more advanced options
REDIS_HOST=localhost ← Redisホスト名に自ホストを指定
REDIS_PORT=6379
# You may set DATABASE_URL instead for more advanced options
DB_HOST= ← Potgressホスト名削除
DB_USER=mastodon ← データベースユーザー名指定
DB_NAME=mastodon ← データベース名指定
DB_PASS=
DB_PORT=5432

# Federation
LOCAL_DOMAIN=mstdn.centossrv.com ← ホスト名を指定
LOCAL_HTTPS=true ← 暗号化通信有効化

# Application secrets
# Generate each with the `rake secret` task (`docker-compose run --rm web rake secret` if you use docker compose)
PAPERCLIP_SECRET=xxxx・・・xxxx ← 生成した秘密鍵(1個目)を指定
SECRET_KEY_BASE=xxxx・・・xxxx ← 生成した秘密鍵(2個目)を指定
OTP_SECRET=xxxx・・・xxxx ← 生成した秘密鍵(3個目)を指定

# VAPID keys (used for push notifications
# You can generate the keys using the following command (first is the private key, second is the public one)
# You should only generate this once per instance. If you later decide to change it, all push subscription will
# be invalidated, requiring the users to access the website again to resubscribe.
#
# Generate with `rake mastodon:webpush:generate_vapid_key` task (`docker-compose run --rm web rake mastodon:webpush:generate_vapid_key` if you use docker compose)
#
# For more information visit https://rossta.net/blog/using-the-web-push-api-with-vapid.html
VAPID_PRIVATE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← 生成したWebプッシュ通知用鍵を指定
VAPID_PUBLIC_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← 生成したWebプッシュ通知用鍵を指定

メール設定(SparkPostからメール送信する場合)
# E-mail configuration
# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers
# If you want to use an SMTP server without authentication (e.g local Postfix relay)
# then set SMTP_AUTH_METHOD to 'none' and *comment* SMTP_LOGIN and SMTP_PASSWORD.
# Leaving them blank is not enough for authentication method 'none'.
SMTP_SERVER=smtp.sparkpostmail.com ← SparkPostのSMTPサーバー名を指定
SMTP_PORT=587
SMTP_LOGIN=SMTP_Injection ← SMTP_Injectionを指定
SMTP_PASSWORD=xxxxxxxx ← SparkPost登録時に取得したAPI KEYを指定
SMTP_FROM_ADDRESS=notifications@centossrv.com ← Mastodonインスタンスからのメール送信元アドレスを指定
#SMTP_DOMAIN= # defaults to LOCAL_DOMAIN
#SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail
#SMTP_AUTH_METHOD=plain
#SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt
#SMTP_OPENSSL_VERIFY_MODE=peer
#SMTP_ENABLE_STARTTLS_AUTO=true

メール設定(自メールサーバーからメール送信する場合)
# E-mail configuration
# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers
# If you want to use an SMTP server without authentication (e.g local Postfix relay)
# then set SMTP_AUTH_METHOD to 'none' and *comment* SMTP_LOGIN and SMTP_PASSWORD.
# Leaving them blank is not enough for authentication method 'none'.
SMTP_SERVER=127.0.0.1 ← メールサーバーのIPアドレスを指定
SMTP_PORT=25 ← ポート番号25を指定
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@centossrv.com ← Mastodonインスタンスからのメール送信元アドレスを指定
#SMTP_DOMAIN= # defaults to LOCAL_DOMAIN
#SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail
SMTP_AUTH_METHOD=none ← SMTP認証無効化
#SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt
SMTP_OPENSSL_VERIFY_MODE=none ← 暗号化通信無効化
#SMTP_ENABLE_STARTTLS_AUTO=true

[mastodon@centos live]$ RAILS_ENV=production bundle exec rails db:setup ← DB構築

[mastodon@centos live]$ RAILS_ENV=production bundle exec rails assets:precompile ← プリコンパイル
※時間がかかる

[mastodon@centos live]$ exit ← mastodonユーザーから抜ける

■Mastodon起動

[root@centos ~]# vi /etc/systemd/system/mastodon-web.service ← mastodon-web起動スクリプト作成
[Unit]
Description=mastodon-web
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="RAILS_SERVE_STATIC_FILES=true"
Environment="PORT=3000"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

[root@centos ~]# vi /etc/systemd/system/mastodon-sidekiq.service ← mastodon-sidekiq起動スクリプト作成
[Unit]
Description=mastodon-sidekiq
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

[root@centos ~]# vi /etc/systemd/system/mastodon-streaming.service ← mastodon-streaming起動スクリプト作成
[Unit]
Description=mastodon-streaming
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/usr/bin/npm run start
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

[root@centos ~]# systemctl start mastodon-{web,sidekiq,streaming} ← mastodon起動

[root@centos ~]# systemctl enable mastodon-{web,sidekiq,streaming} ← mastodon自動起動設定

■Apache連携設定

MastodonインスタンスへApache経由でアクセスできるようにする。

[root@centos ~]# vi /etc/httpd/conf.d/virtualhost-mstdn.centossrv.com.conf ← mstdn.centossrv.com用バーチャルホスト設定ファイル編集
<VirtualHost *:80>
    ServerName mstdn.centossrv.com
    DocumentRoot /var/www/html/mstdn.centossrv.com
    ErrorLog logs/mstdn.centossrv.com-error_log
    CustomLog logs/mstdn.centossrv.com-access_log combined env=!no_log
    −−追加(ここから)−−
    # http->httpsへリダイレクト設定
    RewriteEngine on
    RewriteRule "^/.well-known/acme-challenge" "-" [END]
    RewriteRule "^/(.*)" "https://%{HTTP_HOST}/$1"
    −−追加(ここまで)−−
</VirtualHost>
<VirtualHost *:443>

DocumentRoot "/var/www/html/mstdn.centossrv.com"
ServerName mstdn.centossrv.com

−−追加(ここから)−−
# Mastodon連携設定
RequestHeader set X-Forwarded-Proto "https"
ProxyPass /api/v1/streaming ws://localhost:4000
ProxyPass / http://localhost:3000/
ProxyPassReverse /api/v1/streaming ws://localhost:4000
ProxyPassReverse / http://localhost:3000/
−−追加(ここまで)−−

[root@centos ~]# systemctl reload httpd ← Apache設定反映

■Mastodon確認

(1)Mastodon確認
http://mstdn.centossrv.comにアクセスしてhttps://mstdn.centossrv.com/aboutに転送され、Mastodonページが表示されることを確認する。
  • https://mstdn.centossrv.com/auth/sign_upにアクセスして管理者ユーザーを登録する。
  • 登録メールアドレス宛に送られてきたメールのリンクをクリックしてメールアドレス確認を行う。※メール送信にSparkPostを利用している場合はメールが送信されてくるまで時間がかかる場合がある
  • 登録した管理者ユーザーに管理者権限を付与する。
    [root@centos ~]# su - mastodon ← mastodonユーザーへ切替
    
    [mastodon@centos ~]$ cd live/ ← Mastodonインストールディレクトリへ移動
    
    [mastodon@centos live]$ RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=管理者ユーザー名 ← 登録した管理者ユーザーに管理者権限を付与
    Congrats! xxxxxxxx is now an admin. \o/
    Navigate to https://mstdn.centossrv.com/admin/settings/edit to get started
    
    [mastodon@centos live]$ exit ← mastodonユーザーから抜ける
    
  • https://mstdn.centossrv.comにアクセスして管理者ユーザーでログインする。※IEだとログイン後なにも表示されない不具合(?)があるので、ChromeやFirefox等他のブラウザを使用する
  • 「*」⇒「ユーザー設定」⇒「管理」⇒「サイト設定」で各項目を設定する。

(2)iPhone確認
マストドンアプリ「Pawoo」 - pixiv Inc.をインストールして起動する。



「他のインスタンスに参加」


インスタンス名にmstdn.centossrv.comと入力して「次へ」


メールアドレスとパスワードを入力して「ログイン」


「承認」


■Mastodon運用

(1)バックアップ処理設定
[root@centos ~]# vi mastodon_backup.sh ← Mastodonデータベースバックアップスクリプト作成
#!/bin/sh
sudo -u postgres pg_dumpall > /backup/pg_dumpall.sql 2>&1 | logger -t $(basename ${0})

[root@centos ~]# chmod +x mastodon_backup.sh ← Mastodonデータベースバックアップスクリプトに実行権限付加

[root@centos ~]# ./mastodon_backup.sh ← Mastodonデータベースバックアップスクリプト実行

[root@centos ~]# ll /backup/pg_dumpall.sql ← Mastodonデータベースバックアップ結果確認
-rw-r--r-- 1 root root 80539  6月 13 10:58 /backup/pg_dumpall.sql

[root@centos ~]# echo /backup/pg_dumpall.sql >> backuplist ← 自動バックアップ運用との連携

[root@centos ~]# sed -i 's/\/root\/backup.sh/\/root\/mastodon_backup.sh ; \/root\/backup.sh/g' /etc/cron.d/backup ← 自動バックアップ運用との連携

■Mastodonアップデート

(1)Mastodonアップデート自動チェック設定
[root@centos ~]# vi /etc/cron.daily/mastodon-updatechk ← Mastodonアップデート自動チェックスクリプト作成
#!/bin/sh

cd /home/mastodon/live/ ; git fetch 2>&1 | logger -t $(basename ${0})

# 現在バージョン番号取得
CURRENT_VERSION=$(git branch|head -n 1|awk '{print $4}'|tr -d ")")

# 最新バージョン番号取得(ただしRCは除く)
NEW_VERSION=$(git tag | grep -v rc | tail -n 1)

# 現在バージョンより最新のバージョンの場合root宛にメール通知
if [ ${CURRENT_VERSION} != ${NEW_VERSION} ]; then
    echo "${CURRENT_VERSION} => ${NEW_VERSION}" | \
    mail -s "Mastodon Update!(${CURRENT_VERSION} => ${NEW_VERSION})" root
fi

[root@centos ~]# chmod +x /etc/cron.daily/mastodon-updatechk ← Mastodonアップデート自動チェックスクリプトへ実行権限付加
上記で日々Mastodonアップデート有無が自動でチェックされ、アップデート検知時はrootユーザー宛にメールで通知される。⇒Mastodonアップデート内容

(2)Mastodonアップデート
[root@centos ~]# su - mastodon ← mastodonユーザーへ切替

[mastodon@centos ~]$ cd live/ ← Mastodonインストールディレクトリへ移動

[mastodon@centos live]# git checkout $(git tag | grep -v rc | tail -n 1) ← 最新バージョンダウンロード

[mastodon@centos live]$ bundle install
※時間がかかる

[mastodon@centos live]$ yarn install --pure-lockfile
※時間がかかる

[mastodon@centos live]$ RAILS_ENV=production bundle exec rails db:migrate ← DB移行

[mastodon@centos live]$ RAILS_ENV=production bundle exec rails assets:precompile ← プリコンパイル
※時間がかかる

[mastodon@centos live]$ exit ← mastodonユーザーから抜ける

[root@centos ~]# systemctl restart mastodon-{web,sidekiq,streaming} ← Mastodon再起動
https://mstdn.centossrv.com/about/moreにアクセスして最新バージョンになっていることを確認する。

■Mastodonリンク集







▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします