Linux

Mastodon CentOS7にインストール

Mastodon CentOS7にインストール

寄稿しました。

マンモスかわいいどん!

みんな大好きMastodonを社内SNSに活用してみたいというお客様に向けて手順のTipsです。

Mastodonは企業に縛られない分散型がモットー、お一人様用Mastodonなどで自由自適に使うのも乙ってもの。

 

また、Dockerは入れないバージョンの手順です。さまざまなミドルウェアやライブラリをかけあわせて、Mastondを構築しましょう。あれもこれもと忙しい!

 

環境

  • Gmailアカウント
    GmailのSMTPサーバをメールの踏み台にします。
  • CentOS7.3
  • ConoHa VPS 2CPU 2GB
  • ドメイン取得済み
    例としてmstdn.example.comで設定を行います。

 

 

WEB用とMastodonポートをあけよう

# firewall-cmd --add-port=80/tcp --zone=public --permanent
# firewall-cmd --add-port=443/tcp --zone=public --permanent
# firewall-cmd --add-port=3000/tcp --zone=public --permanent
# firewall-cmd --reload

 

必要なライブラリのインストール

# yum -y install gcc libxml2-devel ImageMagick libxslt-devel git curl file g++ protobuf-compiler protobuf-devel readline-devel libicu-devel libidn-devel

# yum install -y gcc-c++ make

# yum install openssl-devel readline-devel zlib-devel


# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# yum -y install ffmpeg ffmpeg-devel

 

Node.jsリポジトリインストール

# curl -sL https://rpm.nodesource.com/setup_6.x | bash -

 

# yum -y install nodejs

 

# npm install -g yarn

 

Mastodonインストール用ユーザの作成

# useradd mastodon
# usermod -G wheel mastodon

 

# visudo

## Allows people in group wheel to run all commands
#%wheel ALL=(ALL)       ALL

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

 

 

Redisのインストール

# yum -y install redis rubygem-redis

 

Redisの起動・起動設定

# systemctl start redis
# systemctl enable redis

 

 

 

 

Postgresをインストールしよう。

# yum -y install postgresql-server postgresql postgresql-contrib postgresql-devel

 

初期設定

# postgresql-setup initdb

Initializing database ... OK

 

PostgreSQLの起動・起動設定

# systemctl start postgresql
# systemctl enable postgresql

 

DBの作成

# sudo -u postgres psql
postgres=# CREATE USER mastodon CREATEDB;
postgres=# \q

 

 

 

 

rdenvのインストール

Rubyのバージョン管理ツールです。rdenvを利用してRubyを入れます。

 

まずはRubyのバージョン確認

# ruby -v

ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

ruby2.0が最初からインストールされています。しかし、今回のMastodonはRubyのバージョンが2.3.0以上が必要です。

 

Rubyをインストールしましょう。

# su - mastodon

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv


$ cd ~/.rbenv && src/configure && make -C src && cd ~


make: Entering directory `/home/mastodon/.rbenv/src'
gcc -fPIC     -c -o realpath.o realpath.c
gcc -shared -Wl,-soname,../libexec/rbenv-realpath.dylib  -o ../libexec/rbenv-realpath.dylib realpath.o
make: Leaving directory `/home/mastodon/.rbenv/src'

 

 

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build
$ sudo ./install.sh

 

インストールできるRubyのリストを確認します。

$ rbenv install -list
Available versions:


  2.4.0-rc1
  2.4.0
  2.4.1 ←!!!!!
  2.5.0-dev

2.4.1をインストールすることに決めました。

 

Ruby2.4.1のインストール

$ rbenv install 2.4.1

Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...
Installed ruby-2.4.1 to /home/mastodon/.rbenv/versions/2.4.1

 

$ rbenv global 2.4.1 && rbenv rehash

 

バージョンの確認を行います。

$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

2.4.1になっています。

 

 

Mastodonをインストールしよう

 

 

$ git clone https://github.com/tootsuite/mastodon.git live
$ cd live
live]$ git checkout $(git tag | grep -v rc | tail -n 1)
$ gem install bundler
$ bundle install --deployment --without development test
$ yarn install --pure-lockfile

 

設定ファイルのバックアップ

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

 

 

キーの発行を行います。

秘密鍵作成 1回目

$ RAILS_ENV=production bundle exec rake secret
111xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

2回目

$ RAILS_ENV=production bundle exec rake secret
222xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5

 

3回目

$ RAILS_ENV=production bundle exec rake secret
333xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx91

 

WEBプッシュ用通知鍵

$ RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key

rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:

config.secret_key = 'df8b75762bxxxxxxxxxxxxxxxxxxxxxxxxxxxcef'

エラーが出ています。

 

 

config.secret_keyを設定します。

$ vi ./config/initializers/devise.rb

# The secret key used by Devise. Devise uses this key to generate
# random tokens. Changing this key will render invalid all existing
# confirmation, reset password and unlock tokens in the database.
# Devise will use the `secret_key_base` on Rails 4+ applications as its `secret_key`
# by default. You can change it below and use your own secret key.
# config.secret_key = '2f86974c4dd7735170fd70fbf399f7a477ffd635ef240d07a22cf4bd7cd13dbae17c4383a2996d0c1e79a991ec18a91a17424c53e4771adb75a8b21904bd1403'
config.secret_key = 'df8b75762bxxxxxxxxxxxxxxxxxxxxxxxxxxxcef' ←追加

 

改めてWEBプッシュ用通知鍵

$ RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key

VAPID_PRIVATE_KEY=MLJHniyXxxxxxxxxxxxxxxxxxxxxxxxxx
VAPID_PUBLIC_KEY=BAxxxxxxxxxxxxxxxxxxxxxxxxxx4XTXU=

発行されました。

 

設定ファイルを編集しよう。

live]$ vi .env.production

REDIS_HOST=redis
REDIS_PORT=6379
# You may set DATABASE_URL instead for more advanced options
DB_HOST=db
DB_USER=postgres
DB_NAME=postgres
DB_PASS=
DB_PORT=5432

↓変更

#REDIS_HOST=redis
REDIS_HOST=localhost
REDIS_PORT=6379
# You may set DATABASE_URL instead for more advanced options
#DB_HOST=db
DB_HOST=
#DB_USER=postgres
#DB_NAME=postgres
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=
DB_PORT=5432

LOCAL_DOMAIN=example.com
LOCAL_HTTPS=true

↓変更

LOCAL_DOMAIN=mstdn.example.com
LOCAL_HTTPS=true

PAPERCLIP_SECRET=
SECRET_KEY_BASE=
OTP_SECRET=

↓変更

PAPERCLIP_SECRET=111xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SECRET_KEY_BASE=222xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5
OTP_SECRET=333xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx91

VAPID_PRIVATE_KEY=
VAPID_PUBLIC_KEY=

↓変更

VAPID_PRIVATE_KEY=MLJHniyXxxxxxxxxxxxxxxxxxxxxxxxxx
VAPID_PUBLIC_KEY=BAxxxxxxxxxxxxxxxxxxxxxxxxxx4XTXU=

SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com

↓変更

#SMTP_SERVER=smtp.mailgun.org
#SMTP_PORT=587
#SMTP_LOGIN=
#SMTP_PASSWORD=
#SMTP_FROM_ADDRESS=notifications@example.com
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_LOGIN=hoge@gmail.com
SMTP_PASSWORD=hogepassword
SMTP_FROM_ADDRESS=hoge@gmail.com
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_DOMAIN=gmail.com

 

 

$ RAILS_ENV=production bundle exec rails db:setup


-- add_foreign_key("users", "accounts", {:on_delete=>:cascade})
   -> 0.0031s
-- add_foreign_key("web_settings", "users", {:on_delete=>:cascade})
   -> 0.0028s

 

コンパイル

$ RAILS_ENV=production bundle exec rails assets:precompile
live]$ exit
logout

 

systemctl サービスの設定

# vi /etc/systemd/system/mastodon-web.service


[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

 

# vi /etc/systemd/system/mastodon-sidekiq.service


[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

 

# vi /etc/systemd/system/mastodon-streaming.service


[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

 

Mastodonを起動させます。

# systemctl start mastodon-{web,sidekiq,streaming}
# systemctl enable mastodon-{web,sidekiq,streaming}

 

 

Let’s Encryptで無料でSSL証明書をゲットしよう!

# cd /usr/local/src
# git clone https://github.com/certbot/certbot

# cd certbot/
# ./certbot-auto -n

 

Let’s Encryptで認証させましょう。

# ./certbot-auto certonly --standalone -d mstdn.example.com -m postmaseter@example.com --agree-tos -n
  • -d ドメイン
  • -m 連絡先メールアドレス

 

Nginxをインストールしよう

リポジトリを設定します。

# vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

 

ライブラリとNginxを入れるのだ。

# yum install mod_ssl httpd-devel
# yum -y --enablerepo=nginx install nginx

 

Nginxバーチャルホスト設定を行います。

# vi /etc/nginx/conf.d/mstdn.example.com.conf


map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name mstdn.example.com;
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name mstdn.example.com;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/mstdn.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mstdn.example.com/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 0;

  root /var/www/vhosts/mstdn.example.com/httpdocs/mastodon;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

 

 

起動と反映を行いましょう。

# systemctl enable nginx
# systemctl restart nginx

 

URLにアクセスします。

https://mstdn.example.com/

 

ユーザ登録を行いましょう。

 

登録したメールアドレスに認証用メールが届くので、リンクをクリックして認証を行ってください。

 

 

 

 

管理者設定を行いましょう。

# su - mastodon
# cd live
$ RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=hoge

hogeユーザを管理者にします。

 

 

https://mstdn.example.com/admin/settings/edit

hogeユーザは下記のアドレスで管理者としての設定が行えます。

 

これで長いインストール作業はおしまい。

お疲れ様です。

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)