バイセル Tech Blog

バイセル Tech Blogは株式会社BuySellTechnologiesのエンジニア達が知見・発見を共有する技術ブログです。

docker-composeを使用したRuby on Jetsの構築からデプロイまで②

概要

テクノロジー戦略本部の長兵衛です。

以前の記事でRuby on Jetsのローカル環境を作成するところまで書きました。

tech.buysell-technologies.com

今回は実際にデプロイするところまでまとめてみたいと思います。

ユーザを準備

デプロイにはjets deployというコマンドを使います。ちなみに裏ではcloud formationが動いています。

また、デプロイにはaws-cliを使うのでデプロイ用のIAMユーザを用意してください。

以下を参考に~/.aws/credentialsと~/.aws/configを設定できます。

https://rubyonjets.com/docs/deploy/

デプロイ用のIAMポリシー設定

以下のページを参考にデプロイ用IAMユーザにポリシーを設定してください。

https://rubyonjets.com/docs/extras/minimal-deploy-iam/

公式ドキュメントには現時点では載っていなかったのですがVPCを設定するためには以下のような記述を追加する必要があると思います(というより記述しないとapplication.rbに書いたVPCの設定でデプロイが落ちました。。)

# デプロイ用IAMポリシー
{
  "Version": "2012-10-17",
  "Statement": [ {
中略 }, { "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs" ], "Resource": [ "*" ]
}   ] }

ここでは説明を省きますが、注意点としてはこのIAMポリシーは関数ロールに設定するIAMポリシーとは異なるという点です。config/application.rbの方で関数ロールへIAMポリシーをアタッチできます。気が向いたらそちらも書く予定です。

デプロイ実行

今回はdockerコンテナからそのままデプロイします。

ちなみに①で記述したDockerfileでaws-cliがコンテナに入っている状態になっています。

(①の方でDockerfileやdocker-compose.ymlの設定を載せています)

.env.containerでコンテナの環境変数を管理しているのでここにENVを記述します。

# .env.container
JETS_ENV = production

次に.env.production.remoteにDB情報などの、関数で使うための環境変数を記述します

(.env.developmentはローカル用、.env.development.remoteはリモート用でstagingとprodも同様)

# .env.production.remote
# DB情報などを記述

後はdeployするだけです!

$ docker-compose run --rm app bundle exec jets deploy

staging環境を作成する

jetsでは先ほど記述したJETS_ENVという環境変数によって別の環境を簡単に作れます

以下のように.env.containerに設定してみます

# .env.container
JETS_ENV=staging

先程と同様にdeployします

この時関数の環境変数は.env.staging.remoteに記述しましょう

$ docker-compose run --rm app bundle exec jets deploy

環境を入れ替えたいときはJETS_ENVの値を変えるだけでいいのでCI/CDの構築も

環境変数を切り替えてあげるだけで良さそうです!

アプリケーションの削除

以下のコマンドでアプリケーションに依存しているリソース全てを消すことができます

扱いには注意が必要です

$ docker-compose run --rm app bundle exec jets delete

https://rubyonjets.com/reference/jets-delete/

まとめ

まだまだ書きたいことがたくさんあるのですが、とりあえずデプロイするところまで

行けました!!

実際にAPIを叩いてみて返ってくるかはご自分で確認してみてください笑

引き続き気づいたことや詰まったことは発信していきたいと思います。

そして、こんな感じで新たな挑戦に一緒にチャレンジできるようなエンジニアを募集しています!