【Docker】RailsにNginxを導入する方法
はじめに
本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
Nginx + Puma + Rails + MySQL
Dokerfileで親ディレクトリを参照するにはDocker-composeのbuildの箇所でcontextとdockerfileを指定します。
docker-compose.yml
version: '${COMPOSE_VER}'
services:
db:
platform: linux/x86_64
build: ./docker/db
command: --default-authentication-plugin=mysql_native_password && bash -c "chmod +x /docker-entrypoint-initdb.d/00_grant.sh"
healthcheck:
test: mysqladmin ping -h db -u$${MYSQL_USER} -p$${MYSQL_PASSWORD}
interval: 1s
restart: on-failure
volumes:
- mysql_data:/var/lib/mysql
- type: bind
source: ${MY_CNF_PATH}
target: /etc/mysql/conf.d/my.cnf
- type: bind
source: ${INITDB_PATH}
target: /docker-entrypoint-initdb.d
env_file:
- ${DB_ENV_FILE_PATH}
ports:
- "${DB_PORT}:3306"
api:
build:
context: .
dockerfile: ./docker/api/Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
restart: on-failure
volumes:
- .:/myapp
- public-data:/myapp/public
- tmp-data:/myapp/tmp
environment:
RAILS_ENV: ${APP_ENV}
ports:
- "${API_PORT}:3000"
depends_on:
db:
condition: service_healthy
web:
build: ./docker/web
volumes:
- public-data:/myapp/public
- tmp-data:/myapp/tmp
ports:
- 80:80
depends_on:
- api
volumes:
mysql_data:
public-data:
tmp-data:
Dockerfile(Nginx)
FROM nginx:alpine
RUN rm -f /etc/nginx/conf.d/*
ADD nginx.conf /etc/nginx/conf.d/myapp.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
nginx.conf
upstream myapp {
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /myapp/public;
client_max_body_size 100m;
error_page 404 /404.html;
error_page 505 502 503 504 /500.html;
try_files $uri/index.html $uri @myapp;
keepalive_timeout 5;
location @myapp {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://myapp;
}
}
Dockerfile(Rails)
FROM ruby:3.1.1
ENV APP_NAME=myapp
ENV USER_NAME=myuser
ENV TZ=Asia/Tokyo
WORKDIR /${APP_NAME}
COPY Gemfile /${APP_NAME}/Gemfile
COPY Gemfile.lock /${APP_NAME}/Gemfile.lock
RUN bundle install
COPY /docker/api/entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
RUN adduser ${USER_NAME} && \
chown -R ${USER_NAME} /${APP_NAME} && \
chown -R ${USER_NAME} ${GEM_HOME}
USER ${USER_NAME}
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
Gemfile
source "https://rubygems.org"
gem "rails", "~> 7.0.2", ">= 7.0.2.3"
puma.rb
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
threads threads_count, threads_count
port ENV.fetch("API_PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
plugin :tmp_restart
app_root = File.expand_path("../..", __FILE__)
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
Author And Source
この問題について(【Docker】RailsにNginxを導入する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/P-man_Brown/items/e60c4b6635cf196bcc30著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .