GCPで動かしている自社社員用インスタンス(
https://mstdn.bizocean.co.jp
)のバージョンアップ時にはまった
nginx等を使わずrailsのサーバーで画像も返すときは、下記の環境変数を追加する必要があった。
RAILS_SERVE_STATIC_FILES "true"
いろいろ作ってると、GCPのプロジェクトが増えてきて、切り替えとかが面倒になる。
gcloud init
を打つと、設定ファイル(configuration)が出てきて、切り替えと再認証(Switch to and re-initialize existing configuration)は出来るけど、切り替えだけの方法がわからなくて嵌ったのでメモ。
すでに使っている環境でgcloudを打つと下記のように出てくる。
% gcloud init Welcome! This command will take you through the configuration of gcloud. Settings from your current configuration [gae] are: [compute] region = asia-northeast1 zone = asia-northeast1-a [core] account = yu_yamazaki@example.com disable_usage_reporting = False project = oceanus-example Your active configuration is: [gae] Pick configuration to use: [1] Re-initialize this configuration [gae] with new settings [2] Create a new configuration [3] Switch to and re-initialize existing configuration: [default] [4] Switch to and re-initialize existing configuration: [sample]
新しく設定ファイルを作りたいときは[2] Create a new configurationを選択して、言われたとおりにいろいろやる。
今回はすでにある設定sampleに切り替えたいので、下記を打つと既存のものにできる。
% gcloud config configurations activate sample
コマンドが長過ぎる。
google compute engine - How to change the active configuration profile in gcloud? - Stack Overflow
面倒なのでシェルのエイリアスに追加する。私の場合はzshなので
% vim ~/.zshrc #追加 alias gchange='gcloud config configurations activate' #読み込み % source ~/.zshrc
で、
gchange 設定名
で切り替えできるようになった。
最初gswitchにしたけど、長いしつづりが直感的じゃないので、gchangeにした。
現在どんな設定があるかとか、削除の方法とかは下記で出てくる
% gcloud config configurations
ERROR: (gcloud.config.configurations) too few arguments
Usage: gcloud config configurations [optional flags]
command may be activate | create | delete | describe | listFor detailed information on this command and its flags, run:
gcloud config configurations --help
いろいろと勉強になりそうなので勢いで立てた。詳細は今度記事にする。
Mastodonを構築、運用できてるってだけである程度の技術アピールになる気もするので、エンジニアがいる会社のブランディングなんかにも使えるのではないかと思った。
最初ローカルのDocker環境で動かすのはdocker-composeを使って半日もかからなかったけど、公開ドメインがないとリモートフォローができないので必要になった。
いろいろとクラウド化周りで1日半ぐらいかかってしまった。
アカウントはこれ
uyamazak - Mastodon@bizocean.co.jp
ざっくり構成としては
最初マシンタイプをケチったらPODが立ち上がらなくなったので、スタンダード2台も使ってしまっている。
Cloud SQLも最低が4GBのマシンだったからオーバースペック気味。
月5000円くらいか。
いくつかトピックを。
違法画像がとか、いろいろと不安もあるので、自社社員専用に会社のメールアドレスがないと登録できないようにする。
EMAIL_DOMAIN_WHITELIST
で指定できる。"bizocean.co.jp"を指定した。
EMAIL_DOMAIN_BLACKLIST
もある。
ソースコード上はここ
https://github.com/tootsuite/mastodon/blob/master/config/initializers/blacklists.rb
ストリーミング用サーバーを別ドメインにしているところが多いけど、ドメインが別だと証明書が面倒なので、ロードバランサーでパス指定でバックエンドサービスの切り替えをして、同じドメインで動くようにしてある。
ただバックエンドごとにポートを変えるにはノードプールも分ける必要があったので、ノードプールを2つ使っている。
うまく説明できないので、ロードバランサー設定をキャプチャ↓
これでしばらくハマった。
上記の設定で画像はクラウドストレージにできたと思ってたら、サイトのシステムで使う画像は別だった。
2つを永続ディスクでマウントして、bundle exec rails assets:precompileを実行、さらにコンテナ再起動が必須なもよう。
認証の更新なんかで1日1回必要なコマンドがある。
現在、KubernetesのCronJobで出来ないか調べてる。
主にkubectlとか。
なんとかなる。
社内サーバーは他プロジェクトで使ってるので、いろいろと切り替えが面倒だった。
ただ、Cloud Shellを実行しているコンテナが裏で変更されているのか、頻繁にgcloud周りの認証が切れてしまうので下記のようなshスクリプトを置いて、すぐ実行できるようにした。
gcloud config set compute/zone asia-northeast1-b gcloud config set container/cluster bizocean-mstdn gcloud container clusters get-credentials bizocean-mstdn
Google Container Engine から接続する | Cloud SQL ドキュメント | Google Cloud Platform
ちょっと面倒だけど、セキュリティ上IPで接続せずにこうした方がいいらしい。
一つのDeployment上に複数コンテナを動かしたり、KubernetesのSecurityを使うのが始めてだったので勉強になった。
上の説明だと設定ファイルの全体が出てこないけど、下記レポジトリに入ってた。
container-engine-samples/cloudsql at master · GoogleCloudPlatform/container-engine-samples · GitHub