マンモスかわいいどん!
みんな大好きMastodonを社内SNSに活用してみたいというお客様に向けて手順のTipsです。
Mastodonは企業に縛られない分散型がモットー、お一人様用Mastodonなどで自由自適に使うのも乙ってもの。
また、Dockerは入れないバージョンの手順です。さまざまなミドルウェアやライブラリをかけあわせて、Mastondを構築しましょう。あれもこれもと忙しい!
環境
- Gmailアカウント
GmailのSMTPサーバをメールの踏み台にします。 - CentOS7.3
- ConoHa VPS 2CPU 2GB
- ドメイン取得済み
例としてmstdn.example.comで設定を行います。
WEB用とMastodonポートをあけよう
1 2 3 4 |
# 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 |
必要なライブラリのインストール
1 |
# yum -y install gcc libxml2-devel ImageMagick libxslt-devel git curl file g++ protobuf-compiler protobuf-devel readline-devel libicu-devel libidn-devel |
1 |
# yum install -y gcc-c++ make |
1 |
# yum install openssl-devel readline-devel zlib-devel |
1 |
# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm |
1 |
# yum -y install ffmpeg ffmpeg-devel |
Node.jsリポジトリインストール
1 |
# curl -sL https://rpm.nodesource.com/setup_6.x | bash - |
1 |
# yum -y install nodejs |
1 |
# npm install -g yarn |
Mastodonインストール用ユーザの作成
1 |
# useradd mastodon |
1 |
# usermod -G wheel mastodon |
1 2 3 4 5 6 7 |
# 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のインストール
1 |
# yum -y install redis rubygem-redis |
Redisの起動・起動設定
1 |
# systemctl start redis |
1 |
# systemctl enable redis |
Postgresをインストールしよう。
1 |
# yum -y install postgresql-server postgresql postgresql-contrib postgresql-devel |
初期設定
1 2 3 |
# postgresql-setup initdb Initializing database ... OK |
PostgreSQLの起動・起動設定
1 2 |
# systemctl start postgresql # systemctl enable postgresql |
DBの作成
1 |
# sudo -u postgres psql |
1 |
postgres=# CREATE USER mastodon CREATEDB; |
1 |
postgres=# \q |
rdenvのインストール
Rubyのバージョン管理ツールです。rdenvを利用してRubyを入れます。
まずはRubyのバージョン確認
1 2 3 |
# ruby -v ruby 2.0.0p648 (2015-12-16) [x86_64-linux] |
ruby2.0が最初からインストールされています。しかし、今回のMastodonはRubyのバージョンが2.3.0以上が必要です。
Rubyをインストールしましょう。
1 |
# su - mastodon |
1 |
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv |
1 2 3 4 5 6 7 |
$ 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' |
1 |
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile |
1 |
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile |
1 |
$ source ~/.bash_profile |
1 |
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build |
1 |
$ cd ~/.rbenv/plugins/ruby-build |
1 |
$ sudo ./install.sh |
インストールできるRubyのリストを確認します。
1 2 3 4 5 6 7 8 |
$ 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のインストール
1 2 3 4 5 6 |
$ 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 |
1 |
$ rbenv global 2.4.1 && rbenv rehash |
バージョンの確認を行います。
1 2 |
$ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] |
2.4.1になっています。
Mastodonをインストールしよう
1 |
$ git clone https://github.com/tootsuite/mastodon.git live |
1 |
$ cd live |
1 |
live]$ git checkout $(git tag | grep -v rc | tail -n 1) |
1 |
$ gem install bundler |
1 |
$ bundle install --deployment --without development test |
1 |
$ yarn install --pure-lockfile |
設定ファイルのバックアップ
1 |
$ cp .env.production.sample .env.production |
キーの発行を行います。
秘密鍵作成 1回目
1 2 |
$ RAILS_ENV=production bundle exec rake secret 111xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
2回目
1 2 |
$ RAILS_ENV=production bundle exec rake secret 222xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5 |
3回目
1 2 |
$ RAILS_ENV=production bundle exec rake secret 333xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx91 |
WEBプッシュ用通知鍵
1 2 3 4 5 6 |
$ 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を設定します。
1 2 3 4 5 6 7 8 9 |
$ 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プッシュ用通知鍵
1 2 3 4 |
$ RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key VAPID_PRIVATE_KEY=MLJHniyXxxxxxxxxxxxxxxxxxxxxxxxxx VAPID_PUBLIC_KEY=BAxxxxxxxxxxxxxxxxxxxxxxxxxx4XTXU= |
発行されました。
設定ファイルを編集しよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
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 |
1 2 3 4 5 6 7 |
$ 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 |
コンパイル
1 |
$ RAILS_ENV=production bundle exec rails assets:precompile |
1 2 |
live]$ exit logout |
systemctl サービスの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 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を起動させます。
1 2 |
# systemctl start mastodon-{web,sidekiq,streaming} # systemctl enable mastodon-{web,sidekiq,streaming} |
Let’s Encryptで無料でSSL証明書をゲットしよう!
1 |
# cd /usr/local/src |
1 |
# git clone https://github.com/certbot/certbot |
1 |
# cd certbot/ |
1 |
# ./certbot-auto -n |
Let’s Encryptで認証させましょう。
1 |
# ./certbot-auto certonly --standalone -d mstdn.example.com -m postmaseter@example.com --agree-tos -n |
- -d ドメイン
- -m 連絡先メールアドレス
Nginxをインストールしよう
リポジトリを設定します。
1 2 3 4 5 6 7 |
# vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 |
ライブラリとNginxを入れるのだ。
1 |
# yum install mod_ssl httpd-devel |
1 |
# yum -y --enablerepo=nginx install nginx |
Nginxバーチャルホスト設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# 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; } |
起動と反映を行いましょう。
1 2 |
# systemctl enable nginx # systemctl restart nginx |
URLにアクセスします。
ユーザ登録を行いましょう。
登録したメールアドレスに認証用メールが届くので、リンクをクリックして認証を行ってください。
ログインを行いましょう。
ログイン成功です。
Tweetも投稿できてよさそうですね~!
管理者設定を行いましょう。
1 |
# su - mastodon |
1 |
# cd live |
1 |
$ RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=hoge |
https://mstdn.example.com/admin/settings/edit
hogeユーザは下記のアドレスで管理者としての設定が行えます。
これで長いインストール作業はおしまい。
お疲れ様です。