Docker ComposeでRuby on Jetsの開発環境を構築する
2020/03/29
Docker Composeを利用して、Ruby on Jetsの開発環境を構築してみる。
細かい設定はいろいろあるけど、とりあえず最低限のJetsの画面が表示される状態をゴールとする。
そもそもRuby on Jetsとは?
サーバーレスアプリケーションをRailsライクに作成できるRuby製のサーバーレスフレームワークのこと。
AWSへのデプロイも簡単らしい。
https://rubyonjets.com/
バージョン
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G11023
$ docker --version
Docker version 19.03.5, build 633a0ea
$ docker-compose --version
docker-compose version 1.25.4, build 8d51620a
手順
プロジェクトのディレクトリを作って移動
mkdir sample_jets_app
cd sample_jets_app
Dockerfileを作成
$ vim Dockerfile
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs yarnpkg mariadb-client
RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn
RUN mkdir /sample_jets_app
WORKDIR /sample_jets_app
COPY Gemfile /sample_jets_app/Gemfile
COPY Gemfile.lock /sample_jets_app/Gemfile.lock
RUN bundle install
COPY . /sample_jets_app
CMD ["jets", "server", "--port", "3000", "--host", "0.0.0.0"]
Gemfileを作成
$ vim Gemfile
source 'https://rubygems.org'
gem 'jets'
空のGemfile.lockを作成
$ touch Gemfile.lock
docker-compose.ymlを作成
$ vim docker-compose.yml
version: '3'
services:
web:
build: .
command: bash -c "bundle exec jets server --port 3000 --host 0.0.0.0"
volumes:
- .:/sample_jets_app
- bundle_vol:/usr/local/bundle
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:5.7
volumes:
- mysql_vol:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=1
volumes:
bundle_vol:
driver: local
mysql_vol:
driver: local
Jetsアプリケーションを作成
$ docker-compose run web jets new . --force --no-deps --database=mysql
$ docker-compose run web jets new . --force --no-deps --database=mysql
Creating network "sample_jets_app_default" with the default driver
Creating volume "sample_jets_app_bundle_vol" with local driver
Creating volume "sample_jets_app_mysql_vol" with local driver
Creating sample_jets_app_db_1 ... done
Building web
Step 1/10 : FROM ruby:2.5
---> 5a76bd71024b
省略...
Done in 138.88s.
================================================================
Congrats 🎉 You have successfully created a Jets project.
Cd into the project directory:
cd .
To start a server and test locally:
jets server # localhost:8888 should have the Jets welcome page
Scaffold example:
jets generate scaffold post title:string body:text published:boolean
jets db:create db:migrate
To deploy to AWS Lambda, edit your .env.development.remote and add a DATABASE_URL endpoint.
Then run:
jets deploy
Jetsアプリケーションに必要なファイルが生成されている
$ ls
Dockerfile README.md bin docker-compose.yml public
Gemfile Rakefile config node_modules spec
Gemfile.lock app config.ru package.json yarn.lock
Procfile babel.config.js db postcss.config.js
このままだとDBに接続できないので、config/database.yml
を編集
$ vim config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV["DB_POOL"] || 5 %>
database: <%= ENV['DB_NAME'] || 'sample_jets_app_development' %>
username: <%= ENV['DB_USER'] || 'root' %>
password: <%= ENV['DB_PASS'] %>
- host: <%= ENV["DB_HOST"] %>
+ host: <%= ENV["DB_HOST"] || 'db' %>
url: <%= ENV['DATABASE_URL'] %> # takes higher precedence than other settings
reconnect: true
development:
<<: *default
database: <%= ENV['DB_NAME'] || 'sample_jets_app_development' %>
test:
<<: *default
database: sample_jets_app_test
production:
<<: *default
database: sample_jets_app_production
url: <%= ENV['DATABASE_URL'] %>
Gemfileに変更があったので、buildする
$ docker-compose build
アプリケーションを起動
$ docker-compose up
http://localhost:3000
にアクセスして、JetsのWelcome画面が表示されたらOK
よく使うコマンド例
$ docker-compose run web bundle exec jets console
$ docker-compose run web bundle exec jets db:create
$ docker-compose run web bundle exec jets db:migrate
$ docker-compose run web bundle exec jets db
$ docker-compose run web bundle exec jets generate controller home index
参考
https://docs.docker.com/compose/rails/
次回
簡単なページを作って、AWSにデプロイできたらいいな