インフラの勉強をしている中で、ちょくちょく実際のアプリを動かしてDBの状態などを見たくなりました。なんかいいのないかなーと思っていたら、ありました。
Railsチュートリアル
そこそこの機能をもっていて、RDBも使う。なんといってもソース公開もされていて、無料。理想的すぎる。
ということで、今回はこの「Railsチュートリアル」をDocker化するところまでの手順をまとめていきます。
対象
以下は、「Rails チュートリアル sample_app コード集」。
https://github.com/yasslab/sample_apps
この中から「sample_apps/6_0_0/ch14/」を使います。
手順
Dockerfile・docker-compose.yml を作成する。
docker-compose.yml
version: '3'
services:
app:
build: .
environment:
RAILS_ENV: production
SECRET_KEY_BASE: "c2af0ed27a75382e02bce409ee8fce20a73e20348d32e288a86d20e77f7ce745eef5b93ac2b184a6fd6bd89f85082f4fe58870548664c2ede2d36f3754a54797"
DATABASE_URL: postgresql://postgres:postgres@db:5432/sample_app
ports:
- '18080:8080'
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:12
environment:
POSTGRES_USER: 'postgres'
POSTGRES_PASSWORD: 'postgres'
POSTGRES_DB : 'sample_app'
ports:
- '15432:5432'
volumes:
- data:/var/lib/postgresql/data
volumes:
data:
driver: local
・「RAILS_ENV=production」本番モードで起動。
・「SECRET_BASE_KEY」は、$ bundle exec rake secret
で取得した秘密鍵を記載しています。
Dockerfile
FROM ruby:2.7.1
ENV APP_ROOT /app
WORKDIR ${APP_ROOT}
RUN echo "deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
apt-get update && \
apt-get install -y postgresql-12 \ ←postgresqlをインストールしてクライアントを使用する。
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* && \
wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz && \
mkdir -p /usr/local/lib/nodejs && \
tar -xJvf node-v14.16.0-linux-x64.tar.xz -C /usr/local/lib/nodejs ←NodeJSをインストール。
ENV PATH $PATH:/usr/local/lib/nodejs/node-v14.16.0-linux-x64/bin
RUN npm install -g yarn ←yarnをインストール。
COPY ./Gemfile ${APP_ROOT}
COPY ./Gemfile.lock ${APP_ROOT}
# gemインストールの高速化
# gem: --nodocument, --global jobs 4
RUN echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
bundle config --global jobs 4 && \
bundle install --without test development
COPY . ${APP_ROOT}/
EXPOSE 8080
CMD ["/bin/sh", "-c", "while :; do sleep 10; done"]
・PostgreSQLをインストールする。クライアントが必要なため。
・NodeJSとyarnをインストールする。rake assets:precompileするときに必要なため。
config/database.ymlを修正する。
productionの箇所をURLで接続できるように変更する。
production:
url: <%= ENV['DATABASE_URL'] %> ←追加
# ここから下は全てコメントアウトする。
# adapter: postgresql
# encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://railsguides.jp/configuring.html#データベース接続をプールする
# pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# database: sample_app_production
# username: postgres
# password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>
config/environments/production.rbを修正する。
ローカルで実行する場合、SSLを無効にしないとエラーになるのでその対応。
config.force_ssl = false ←falseにする。
docker-compose up -dを実行する。
コンテナを起動する。
$ docker-compose up -d
Railsコンテナに接続する。
$ docker ps
→コンテナIDを確認する。
$ docker exec -it [コンテナID] bash
Railsの各種セットアップを行う。
DBのセットアップを行う。
$ bundle exec rails db:migrate
テスト用のデータを投入する。(これは必要に応じてで大丈夫。)
$ bundle exec rails db:seed
アセットのコンパイルを行う。
$ bundle exec assets:precompile
Webサーバを起動する。
Pumaを起動する。
$ puma -p 8080 -e production -C config/puma.rb
ブラウザから「http://localhost:18080」にアクセスすると以下のようにSAMPLE APPが表示されるはず!
コメント