マストドンを「GCP上」で「VM上のDocker」と「CloudSQL」と「Storage」を使って構築してみた。

#マストドンを「GCP上」で「VM上のDocker」と「CloudSQL」と「Storage」を使って構築
###いろんなサイトを参考にしました。感謝！

##１）VM作ります。

Ubuntuで作りました。
静的IPにしておきます。（説明省略）

作業PCはMacです。Macにgcloudを入れてあります。
（参考：MacのターミナルからVMに入る方法）→psqlを使うときはバックスラッシュ利用のため こっちが便利かな
$ gcloud compute ssh [サイト名] --zone [ゾーン名]（例）


##２）以下、VM作業。

###面倒なので、suで作業、
$sudo su

###「必要ライブラリがありません問題」対策といえば、apt-file
\# apt-get update
\# apt-get upgrade
\# apt-get install apt-file

###タイムゾーンをJSTに
\# timedatectl set-timezone Asia/Tokyo

###dockerをapt-getリポジトリに追加
\# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
\# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
\# apt-get update
\# apt-get upgrade

###dockerインストール
\# apt-get install -y docker-ce

###docker-composeインストール　この時点での最新バージョンは、1.15.0だったです。
\# VERSION=1.15.0
\# curl -L https://github.com/docker/compose/releases/download/$VERSION/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
\# chmod +x /usr/local/bin/docker-compose
\# ls -al /usr/local/bin/d*

###ポスグレクライアントインストール
\# apt install postgresql-client-common
\# apt-get install postgresql-client
###pg_configはここにあるらしい
\# apt-get install libpq-dev

そして、mastodonインストール。バージョンはmasterでなく意図的に1.5.1に。
\# git clone https://github.com/tootsuite/mastodon.git
\# cd mastodon/
\# git branch
\# git checkout -b v1.5.1
\# git branch


##３）DNS設定

CloudDNSで、Aレコードを設定（説明省略）


##４）DB作成

###CloudSQLを利用
とりあえず、データベース名はわかりやすく。
user:postgres
pwd:パスワードを設定
外部IPをメモ
autovacuumを設定
承認済みネットワークに[VMのIPアドレス]を設定

（参考：接続方法）
VMから： 
\# psql -h [VMのIPアドレス] -U postgres

Cloud Shell、又は、Macターミナルから：
$ gcloud sql connect データベース名 --user postgres

###ログインしたらタイムゾーン変更
postgres=> alter database postgres set timezone = 'Asia/Tokyo';


##５）Storage作成
###ブラウザ＞バケットの作成
とりあえず、バケット名はわかりやすく。
Multi-Regional
US（→一応同じ国に）
にしました。

###次に、相互運用性のアクセスキーを作成。
アクセスキーと、非公開をメモる。

##６）nginxインストール

（参考：ubuntuバージョン取得方法）
\# VCNAME=\`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2`
\# echo $VCNAME


apt-getに入れるために、キー追加
\# curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
下記２行を「/etc/apt/sources.list」に追加
ーーー
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx
ーーー
\# apt-get update
\# apt-get install nginx


##７）無料証明書
certbot-autoインストール
\# wget https://dl.eff.org/certbot-auto
\# chmod a+x certbot-auto
\# ./certbot-auto
取得
\# ./certbot-auto certonly --standalone -d [サイト名] --rsa-key-size 4096

ついでに、DHparamでサイト評価アップ
\# mkdir /etc/nginx/ssl
\# cd /etc/nginx/ssl
\# openssl dhparam 4096 -out dhparam.pem


##８）nginx設定
nginx.confをメンテ。下記を追加。
ーーー
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_trusted_certificate /etc/letsencrypt/live/[サイト名]/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
ーーー

次に、マストドンのドキュメントから、コピペで、./conf.d/mastodon.confを作成。
サーバ名をメンテ。


##９）.env.production設定
###ストレージ
ーーー
\# S3 (Minio Config (optional) Please check Minio instance for details)
S3_ENABLED=true
S3_BUCKET=バケット名
AWS_ACCESS_KEY_ID=アクセスキー
AWS_SECRET_ACCESS_KEY=非公開キー
S3_REGION=[リージョン名]
S3_PROTOCOL=https
S3_HOSTNAME=storage.googleapis.com
S3_ENDPOINT=https://storage.googleapis.com
\# S3_SIGNATURE_VERSION=
ーーー

###Postgresql
ーーー
\# You may set DATABASE_URL instead for more advanced options
DB_HOST=メモったIPアドレス
DB_USER=postgres
DB_NAME=postgres
DB_PASS=パスワード
DB_PORT=5432
ーーー

###メール
今回は、mailgunに登録して設定（省略）


##１０）まず、ビルド
\# docker-compose build

##１１）キー作成→転記
###キー作成3回（.env.productionに転記）
\# docker-compose run --rm web rake secret
\# docker-compose run --rm web rake secret
\# docker-compose run --rm web rake secret

###WebPush用のキー（.env.productionに転記）
\# docker-compose run --rm web rake mastodon:webpush:generate_vapid_key

##１２）DBとアセット
###DBマイグレーション
\# docker-compose run --rm web rails db:migrate
###Assetsプレコンパイル
\# docker-compose run --rm web rails assets:precompile


##１３）起動してみる
\# docker-compose up -d
\# docker ps


##１４）nginx起動
\# nginx


##１５）ブラウザで開いてみる。
https://サイト名

（参考：エラーになっちゃったときの、個別にメアド確認方法）
\# docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=[メアド名]

##１６）ログインできたら、アドミン付与
\# docker-compose run --rm web rails mastodon:make_admin USERNAME=ユーザ名


（参考：データベースが壊れたとき（壊した!?）のリセット？方法）
\#psql -h メモったIPアドレス -U postgres -d template1
\>drop database postgres;
\>create database postgres;
\>\q


---
おしまい。