SQLでPostgreSQLを利用します。マネージドサーバを利用することとします。ここでは、メール送信にmailgunを利用します。他のメールサービスや自前のサーバでもかまいません。10GBで一ヶ月利用すると$9.37ネットワーク帯域使用料$100/mo弱となる。クラスタのnode数を下げるともう少し料金が下がる。構築の方法mailgunmailgunにアクセスし、アカウントを取得します。画面に従いドメインの登録を行います。指示に従い、お使いのDNSサーバにエントリを追加しておきます。Planに昇格させておかないと、メールが送れず困るので登録を忘れずに。10,000emails/monthまで無料です。Domainsページから、登録したドメインを選択し、設定をメモします。Passwordが後で必要になります。Storageにアクセスし、バケットを作っておきます。ここでは、名前を"mastodon"、Regionalを指定し、ロケーションは後でサーバーを立てるリージョンを指定します。設定の相互運用性に行き、"新しいキーを作成"からアクセスキーと非公開を作成し、メモしておきます。SQLにアクセスし、インスタンスを作成しておきます。インスタンスの作成から、データベースエンジンの選択に進み、PostgreSQLを選択します。次にインスタンスIDを適当に決め、リージョンをサーバーを立てるところに指定しておきます。RAM:0.6GB)で十分です。その他はデフォルトのままでよいです。デフォルトのユーザーpostgresのパスワードを生成して、記録しておきます。Labsからアカウントを作成します。選択します無料版を選択しますリソース名とパスワードを入力しますサーバ名とポート、入力したパスワードは後で必要となるので記録しておきます。有料のサブスクリプションもありますが、無料版で大丈夫です。必要になったときに購入すると良いでしょう。Persistenceを利用することができます。Engine上に構成されたクラスタで実行されます。Shellを立ち上げるコンテナを操作するための、コンソール環境が必要となります。Shellを利用して構築することとします。このシェルは既にSDKがインストールされた状態ですので、立ち上げるとすぐに使用できます。us-central1-c任意のリージョンに作成します。ここではus-central-cとします。クラスタ名はmastodonとしておきます。サービスアカウントキーでアクセスできるようにします。アクセスし、認証情報を作成します。認証情報を作成からサービスアカウントキーを選択します。新しいサービスアカウントを選択し、アカウント名に適当な名前を入れます。クライアントを選択します。作成を押すと、jsonファイルで秘密鍵がダウンロードされます。ダウンロードされたjsonファイルの内容を、シェルの場所にcredentials.jsonとして保存します。credentials.jsonをクラスタに保存します。--from-file=credentials.json=$HOME/credentials.jsonディスクの作成プリコンパイルした内容を保存する永続ディスクを3つ作成します。/mastodon/public/system/mastodon/public/assets/mastodon/public/packs以上の3つのディレクトリにマウントされるディスクを作成します。us-central1-c大きさは1GBも要りませんが、1GBからしか作成できません。名前は適宜決めてください。imageの取得mastodonのimageをローカルに取得します。参照して最新のタグを指定します。masterは時折壊れているようなので、タグを指定した方が無難です。Registryに保存します。gcr.io/project-id/mastodon設定ファイルの作成secretを作成するために、以下のコマンドを2回実行して結果を記録しておきます。secretmastodon/.env.production.sampleを参考に、yamlファイルを作成します。'1'.env.production.sampleを参考に作成したenv.production.yamlを登録します。SQLにアクセスするように設定します。db-host次のコマンドで設定し、起動します。backend.yamlDBの初期化とプリコンパイルmastodonのDBを初期化します。vapid_keyを生成します。Neverassetのプリコンパイルを行います。Neverassetのプリコンパイルは、バージョンアップの際には別のディスクを作成する必要があります。起動中のポッドがロックしているので、書き込み可能で再マウントすることができません。次にコマンドで実行します。web-init2.yaml実行しているpodの名前を確認します。4sweb-init1の方のpodのログを確認し、生成されたvapid_keyを確認します。web-init1-87wgs(中略)VAPID_PRIVATE_KEY=us1Hxx4nXwy4HCXsb50_NJaUKpQqRzFSTS1FgUyG9RI=VAPID_PUBLIC_KEY=BBYlb7l6lKulKPwbkrXK3SdF7LJ94jWKpLqxf2qJjQsSmELeP1791vP41aPiAEjx96bxngMD50SNEgbwWkLMvoY=vapid_keyをenv.production.yamlに追記します。BBYlb7l6lKulKPwbkrXK3SdF7LJ94jWKpLqxf2qJjQsSmELeP1791vP41aPiAEjx96bxngMD50SNEgbwWkLMvoY=この2行を追記env.production.yamlを更新します。env.production.yaml完了したら、消しておきます。web-init2.yamlnginx.confの設定nginx.confを作成します。/500.html;}設定をロードします。frontend次のコマンドで起動します。push次のコマンドで起動します。listDNSにセットしておきます。ingressの設定まずhttpでアクセスできるように設定します。80次のコマンドで適用します。ingress.yamlしばらくすると(数分)ロードバランサにIPアドレスがセットされます。次のコマンドで確認することができます。この状態でhttpでアクセスすると、httpsにリダイレクトされエラーで止まります。次にhttpでアクセスできるように設定します。helmのインストールコンソールにhelmをインストールします。インストールするのに必要です。.クラスタにhelmをインストールします。tillercert-managerのインストールクラスタにcert-managerをインストールします。証明書の更新の連絡を受けるメールアドレスを設定します。manifestsの登録をします。証明書の取得を行います。mastodon.example.com次のコマンドで適用します。certificate.yaml証明書の取得には10−20分程度の時間がかかります。