GCPにDocker無しでMastodonを立てる

この記事は約14分で読めます。

Mastodonって何?

2016年10月に公開された新しいタイプのSNS.それが,2ヶ月前の4月から爆発的にユーザ数が増え云々等という詳しい情報はWikipediaを見て戴くとして,誰でも自前のインスタンスを立ち上げられるというのが最大の特徴.

いつも通り(直ぐ挫折するくせに・・・)「取りあえずやってみよう」と言う軽い気持ちで,私もこの新SNS,Mastodonのインスタンスを立てて見ました.

SNSのインスタンスを立てるには,最低限「インターネットに繋がるサーバ」を確保する必要があるのですが,これが結構コストが掛かります.まぁ,RaspberryPiでThe Internetに常時接続と言う猛者も居られますが・・・

常時接続を個人のPCで運用するには,かなり敷居が高そう(って,30年以上前には運用してましたが^^;)なので,VPSを借りることに.

VPSの用意

さくらのVPSが最も有名で,始めやすそうですが,可能な限りコストを抑えたい私としては,無料の環境をと言う事で,GCP(Google Cloud Platform)のサービス,GCE(Google Compute Engine)を利用させて戴きました.

制約内で使う分にはAlways Freeとのことで以下の構成になります.非常にチープです.

  • マシンタイプ f1-micro
  • 仮想CPUコア 1
  • メモリー   0.60GB
  • HDD     25GB

リージョンがus限定だという事なので,

  • ゾーン    us-west1-a

OSイメージは,何でも御座れと言わんばかりなリストの中から,最近は使わなくなったモノの少しは理解できるUbuntuを選択(ver 17.04は2018/01でサポート切れ).その他いろいろ設定.

  • OS      Ubuntu 16.04LTS
  • 外部IP    エフェメラルを固定IP予約取得に・・・直ぐに割当完了
  • firewall    HTTP,HTTPSにチェック

ひとまずこれで,最低限のVPS環境は手に入りました.

ここで,今回お世話になった(参考にさせて戴いた)サイトをまとめておきます.有り難うございました.下記以外にも一見させて戴いたサイトは数知れず・・・併せて,有り難うございました.

SSH接続後に最初に行うこと

 1.スワップ確保

メモリーが0.6GBしかないので何はともあれスワップ領域が絶対に必要!

$ sudo fallocate -l 4G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
$ cat /proc/swaps

 2.パッケージの更新

$ sudo apt-get update
$ sudo apt-get upgrade

いよいよMastodon環境造り

1.依存パッケージのインストール

$ sudo apt-get install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev nodejs file git curl
$ curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -
$ sudo apt-get install nodejs
$ sudo npm install -g yarn

 2.Redis のインストール

$ sudo apt-get install redis-server redis-tools

 3.Postgres のインストールとセットアップ

$ sudo apt-get install postgresql postgresql-contrib

postgresユーザとなって,MastodonのユーザとDBのセットアップ.

$ sudo su - postgres
postgres$ psql
psgl (9.5.6)
Type "help" for help.

から,postgres端末に入り,

postgres=# CREATE USER mastodon CREATEDB;
CREATE ROLE
postgres=# \q
postgres$ exit

この部分は,最新のマニュアルではこうなっている.

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

 4.Ubuntu 16.04以前の要求事項

マニュアル内で,以下の指示があるので,
Under Ubuntu 16.04, you will need to explicitly enable ident authentication so that local users can connect to the database without a password:

$ sudo sed -i '/^local.*postgres.*peer$/a host all all 127.0.0.1/32 ident' /etc/postgresql/9.?/main/pg_hba.conf
$ sudo apt-get install pidentd
$ sudo systemctl enable pidentd
$ sudo systemctl start pidentd
$ sudo systemctl restart postgresql

 5.rubyの実行環境セットアップ

ここから先は別サイトの説明文を見ながらになるので,ちょっとスキルが必要.私は何度も転けた.

事前準備として,以下,諸々をインストール.

$ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

次いで,Rbenvのインストール作業に入りますが,ここで始めて【mastodonユーザの追加】を行い,mastodonユーザで作業を行います.パスワード無しがミソ.

$ sudo adduser --disabled-password --disabled-login mastodon ?
$ sudo su - mastodon

いよいよrbenvのインストール.

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

マニュアルでは,高速対応オプションとして,以下の設定を勧めている.失敗しても良いらしいが,私の場合は成功した(様に思う).

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

またまた,Ubuntu Desktop note: Modify your ~/.bashrc instead of ~/.bash_profile.と指示されているので,以下の設定では.bash_profileでは無く,.bashrcを使用.

mastodon/.rbenv$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
mastodon/.rbenv$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

ここで一旦,シェルの再起動をしておく.

mastodon/.rbenv$ source ~/.bashrc

以下のコマンドでrbenvの定義らしきモノが表示されれば,インストールの確認完了.

mastodon/.rbenv$ type rbenv

ここで,念のためにrbenvを最新にしておくと良いとのこと.

mastodon/.rbenv$ git pull

Rubyをインストールするためのプラグイン,ruby-buildのインストール.

mastodon/.rbenv$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

ここでも,念のためにruby-buildを最新にしておく.

mastodon/.rbenv$ cd ~/.rbenv/plugins/ruby-build
mastodon/.rbenv/plugins/ruby-build$ git pull

やっとここで,rubyのインストールとなる.この手順を間違うと,後々厄介.

mastodon/.rbenv/plugins/ruby-build$ cd ~/.rbenv
mastodon/.rbenv$ rbenv install 2.4.1
mastodon/.rbenv$ rbenv rehash
mastodon/.rbenv$ rbenv global 2.4.1

mastodon のインストール

 1.mastodonを取り込む

liveに移動することを忘れずに.

mastodon/.rbenv$ cd ~
mastodon$ git clone https://github.com/tootsuite/mastodon.git live
mastodon$ cd live
mastodon/live$ git checkout $(git tag | tail -n 1)

 2.プロジェクトの依存関係をインストール

yarn installに[--pure-lockfile]が必要になったので,ここも注意.

mastodon/live$ gem install bundler
mastodon/live$ bundle install --deployment --without development test
mastodon/live$ yarn install --pure-lockfile

 3.設定ファイルのコピー

mastodon/live$ cp .env.production.sample .env.production

 4.秘密鍵を生成(要コピー):3回分

mastodon/live$ rake secret
mastodon/live$ rake secret
mastodon/live$ rake secret

 5..env.production の要変更内容

mastodon/live$ vim .env.production

REDIS_HOST=(localhost or 127.0.0.1 )
DB_HOST=localhost or 127.0.0.1
DB_USER=mastodon
DB_NAME=mastodon  ←  マニュアルでは mastodon_production
DB_PATH=(空欄)
DB_PORT=5432

LOCAL_DOMAIN=(取得済のドメイン名)
LOCAL_HTTPS=false ← 後で,true に

PAPERCLIP_SECRET= (rake secret 1個目の結果)
SECRET_KEY_BASE= (rake secret 2個目の結果)
OPT_SECRET= (rake secret 3個目の結果)

SINGLE_USER_MODE=true

DEFAULT_LOCALE=ja

SMTP_SERVER=(実は何でもよい・・・)
SMTP_PORT=587
SMTP_LOGIN=(適当に)
SMTP_PASSWORD=(要注意)
SMTP_FROM_ADDRESS=(まぁ,これもそれなりに)
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_DOMAIN=(これも適当)

※ SMTP関係は適当にしていますが,[SINGLE_USER_MPDE]で運用しますので,ユーザアカウントも手動で登録します.

 6.データベースの初期化

mastodon/live$ RAILS_ENV=production bundle exec rails db:setup

 7.CSS,JavaScript の生成

mastodon/live$ RAILS_ENV=production bundle exec rails assets:precompile

(su 出来るユーザに戻る)

mastodon/live$ exit

 8.systemd 関連の設定

以下のファイルを作成し,マニュアルの内容を貼りつける

$ sudo touch /etc/systemd/system/mastodon-web.service
$ sudo touch /etc/systemd/system/mastodon-sidekiq.service
$ sudo touch /etc/systemd/system/mastodon-streaming.service

【各サービスの起動設定+起動】

$ sudo systemctl enable /etc/systemd/system/mastodon-*.service
$ sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service

http/httpsサーバ環境構築

 1.nginx のインストール

この時点までに GCP 側でファイアウォールルールに tcp:3000 を設定し,インスタンスに設定したネットワークタグを追加しておく

$ sudo apt-get install nginx

※ http://(ドメイン名):3000 → http://(ドメイン名):3000/admin で「Mastodon」画面表示

 2.Nginx設定ファイルの作成

$ sudo touch /etc/nginx/conf.d/mastodon.conf
$ sudo vim /etc/nginx/conf.d/mastodon.conf

設定をまるごとコピーし,ssl証明書部分のドメイン部分を書き換えてコメントアウト

※ http://(ドメイン名)で,Nginx の画面へ

 3.Let's EncryptからSSH/TLS証明書取得

certbotの導入

$ cd /usr/local
$ sudo git clone https://github.com/certbot/certbot
$ cd certbot

正常インストールの確認

$ ./certbot-auto --help

【証明書の取得】

$ ./certbot-auto certonly --standalone -d (ドメイン名) -m (連絡先メールアドレス) --agree-tos -n

 4.Nginx設定ファイル編集

ssl証明書部分をコメントインして加筆

$ cd ~
$ sudo vim /etc/nginx/conf.d/mastodon.conf

※ ssl_dhparam /etc/ssl/certs/dhparam.pem; コメントアウト!

註:2017/06/09時点では,マニュアルから削除されているが,後ほど投稿する記事の通り,この設定を生かすことで,SSL Server Testの評価が上がる.

$ sudo su - mastodon
mastodon$ cd live
mastodon@live$ vim .env.production

LOCAL_HTTPS=true に戻すして,サーバを再起動.

mastodon@live$ exit
$ sudo systemctl reload nginx

※ GCP 側でインスタンスに設定したネットワークタグを削除しておく

管理者権限のユーザ登録

 1.ユーザ登録

ユーザ登録でログイン画面に移るが,メール送信が機能していないと確認メールは届かないので,ユーザーを手動で有効にする

※ メール機能が有効ならこの操作は不要

$ sudo su - mastodon
mastodon$ cd live
mastodon@live$ RAILS_ENV=production bundle exec rails mastodon:confirm_email USER_EMAIL={user e-mail}
mastodon@live$ exit

なお,未確認ユーザを一括消去するなら以下のコマンドを.

RAILS_ENV=production rake mastodon:users:clear

 2.管理者設定・・・未確認ユーザでも登録されていれば昇格可能

$ sudo su - mastodon
mastodon$ cd live
mastodon@live$ RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME={username}

Mastodonの管理画面

https://(
ドメイン名)/admin/settings

で,設定画面に・・・(設定からは[管理]→[サイト設定])

・[新規登録を受け付ける]  有効 → 無効

ぐらいは最低限設定しておこう・・・

※ 次回からは

https://(
ドメイン名)/web/getting-started

でOK?

実は未だ,いろいろ微調整が必要なようですが,それはまた別の記事で・・・

 

コメント