⚡
Docker +Railsにnginxを追加する
前回、DockerにRailsを追加したので、次はnginxを追加してみました。
前回↓
###コマンドで一度コンテナを終了しておく。
docker compose down
##compose.yml(または docker-compose.yml)に Nginxを追加
今の compose.yml(または docker-compose.yml)に Nginx サービスを追加
version: "3.8"
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: myapp_development
MYSQL_USER: myapp
MYSQL_PASSWORD: password
volumes:
- db-data:/var/lib/mysql
ports:
- "3306:3306"
web:
build: .
command: bundle exec rails s -b 0.0.0.0
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
volumes:
db-data:
ポイント:
-nginx/default.conf はホスト側で作成しておきます。
-web サービスの 3000 ポートにリバースプロキシします。
##nginx の設定
nginx/default.conf:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web:3000; # webサービスを指定
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ポイント:
-proxy_pass http://web:3000; の web は Compose 内のサービス名と一致させる必要があります。
-Rails サーバーは 0.0.0.0:3000 で起動していること。
##Docker Compose 再構築
docker compose build で再度イメージをビルド
docker compose up でコンテナ起動
docker compose run web rails db:createで、データベースを再度作成
http://localhost にアクセス
Rails アプリが Nginx 経由で見られるようになります。
Discussion