Rails(Docker)에서 Nginx 가져오기(CI/CD까지의 경로 ④)
개시하다
저번에 이어 이번에는 EC2에 도전해 deplial에 도전하고 싶어요. 여러 군데
nginx
를 조사한 다음에 deplial에 대한 보도가 많아서 이번에는 Dockernginx
로 환경을 만들고 싶어요.창설에 필요한 창고는 여기.입니다.
CI/CD 로드 시리즈
컨디션
Nginx의 Docker 환경 구축
Docker + Rails + Puma + Nginx + MySQL
여기 기사를 참고하세요.
우선, 디렉터리 만들기
/containers/nginx
, 만들기 Dockerfile
./containers/nginx/Dockerfile
containers/nginx/DockerfileFROM nginx:alpine
# インクルード用のディレクトリ内を削除
RUN rm -f /etc/nginx/conf.d/*
# Nginxの設定ファイルをコンテナにコピー
ADD nginx.conf /etc/nginx/conf.d/myapp.conf
# ビルド完了後にNginxを起動
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
다음에 containers/nginx
에서 nginx.conf
를 만듭니다./containers/nginx/nginx.conf
containers/nginx/nginx.conf# プロキシ先の指定
# Nginxが受け取ったリクエストをバックエンドのpumaに送信
upstream myapp {
# ソケット通信したいのでpuma.sockを指定
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
# ドメインもしくはIPを指定
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;
}
}
다음에 생성/docker-compose.production.yml
합니다.docker-compose.production.yml
version: "3.9"
services:
rails:
build: .
container_name: rails
command: bundle exec puma -C config/puma.rb
volumes:
- .:/myapp
- public-data:/myapp/public
- tmp-data:/myapp/tmp
- log-data:/myapp/log
- /myapp/node_modules
env_file:
- .env
depends_on:
- db
environment:
WEBPACKER_DEV_SERVER_HOST: webpacker
webpacker:
build: .
volumes:
- .:/myapp
- /myapp/node_modules
- public-data:/myapp/public
command: ./bin/webpack-dev-server
environment:
WEBPACKER_DEV_SERVER_HOST: 0.0.0.0
ports:
- "3035:3035"
user: root
db:
image: mysql:8.0.27
container_name: db
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- "3306:3306"
volumes:
- db:/var/lib/mysql
web:
build:
context: containers/nginx
volumes:
- public-data:/myapp/public
- tmp-data:/myapp/tmp
ports:
- 80:80
depends_on:
- rails
volumes:
db:
driver: local
bundle:
driver: local
public-data:
tmp-data:
log-data:
여기docker-compose up
에서 시작(개발용)docker-compose.yml
,docker-compose -f docker-compose.production.yml up
에서 시작(정식 사용).Nginx를 사용할지 여부를 선택해 보십시오.(진짜 쓸 건지 몰라서 나눠 썼어요)
docker-compose.production.yml
가 추가되었고 rails의 마운트나 명령이 변경되었습니다.다음
web
을 다음과 같이 변경합니다./config/puma.rb
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count
port ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
plugin :tmp_restart
app_root = File.expand_path("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
다음 명령은 컨테이너를 가동시킨다.(참고로 실패할 것이다)$ docker-compose -f docker-compose.production.yml build
$ docker-compose -f docker-compose.production.yml up
가 시작되면 /config/puma.rb
가 성공합니다.또한 Nginx가 없어도 부팅이 가능한지 확인합니다.
방문
$ docker-compose build
$ docker-compose up
localhost/test
할 수 있다면 성공할 것이다.끝말
제작물여기 창고에 준비되어 있습니다.
Nginx 가져오기는 권한 문제로 인해 곤란합니다.
이후 레디스가 추가되면 필요한 컨테이너 준비는 마무리된다.
다음에는 EC2 디자인에 꼭 도전하겠습니다.
참고 자료
Reference
이 문제에 관하여(Rails(Docker)에서 Nginx 가져오기(CI/CD까지의 경로 ④)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/jinwatanabe/articles/02a24e62e8924950ff97텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)