寄稿しました。
マンモスかわいいどん!
みんな大好き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にアクセスします。
ユーザ登録を行いましょう。
登録したメールアドレスに認証用メールが届くので、リンクをクリックして認証を行ってください。
管理者設定を行いましょう。
# su - mastodon
# cd live
$ RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=hoge
hogeユーザを管理者にします。
https://mstdn.example.com/admin/settings/edit
hogeユーザは下記のアドレスで管理者としての設定が行えます。
これで長いインストール作業はおしまい。
お疲れ様です。