秘密の文字列の保存には1Passwordを利用している前提です。1Passwordの中に入っている各種値を使ってデプロイするだけなら.kamal/secretsに次のような形で書くと良いです。
SECRETS=$(kamal secrets fetch --adapter 1password --account my-account --from MyVault/MyItem KAMAL_REGISTRY_PASSWORD RAILS_MASTER_KEY) KAMAL_REGISTRY_PASSWORD=$(kamal secrets extract KAMAL_REGISTRY_PASSWORD $SECRETS) RAILS_MASTER_KEY=$(kamal secrets extract RAILS_MASTER_KEY $SECRETS)
ローカルからデプロイするにはこれでいいんだけどGitHub Actionsから1passwordを使えるようにするのは大変。fnox みたいなツールを使うといい感じに統一できそうだけどちょっと敷居が高い。
kamal deployコマンドにsecretsファイルの場所を指定するオプションがあれば、ローカルとGitHub Actionsで切り替えられて便利なんだけど現状ない。
というのを考えると今のところは環境変数に寄せておくのがいいのかな、となっています。まず./kamal/secretsは次のようにします。
KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD RAILS_MASTER_KEY=$RAILS_MASTER_KEY
GitHub上でSecrets keyにこれらの値を入れておけばGitHub ActionsからのデプロイはOK。
ローカルは次のように.envなどに書いておく
KAMAL_REGISTRY_PASSWORD="op://MyVault/MyItem/KAMAL_REGISTRY_PASSWORD" RAILS_MASTER_KEY="op://MyVault/MyItem/RAILS_MASTER_KEY"
そして op run --env-file=.env -- bundle exec kamal deploy とすると、1Password中の値を環境変数として注入してコマンド実行できます。やったね。
考えたけど試していない方法
.kamal/secretsは$()の中に書かれたものはシェルスクリプトとして動くはずなので、次のように1行で環境変数と1passwordとを切り替えるスクリプトを書くという案もあります。.envをつくらないで済むのはメリット。多分動くけど何やってるのかパッとわからないので保留にしています。
RAILS_MASTER_KEY=$(if [ -n "$RAILS_MASTER_KEY" ]; then echo "$RAILS_MASTER_KEY"; else SECRETS=$(kamal secrets fetch --adapter 1password --from MyVault/MyItem RAILS_MASTER_KEY) && kamal secrets extract RAILS_MASTER_KEY $SECRETS; fi)


