Rails(Docker)에서 Nginx 가져오기(CI/CD까지의 경로 ④)

13398 단어 DockerRailsnginxtech

개시하다


저번에 이어 이번에는 EC2에 도전해 deplial에 도전하고 싶어요. 여러 군데nginx를 조사한 다음에 deplial에 대한 보도가 많아서 이번에는 Dockernginx로 환경을 만들고 싶어요.
창설에 필요한 창고는 여기.입니다.

CI/CD 로드 시리즈

  • ① Rails6+MySQL의 Docker 환경 구축
  • ② Docker에 Webpacker 환경 구축(jquery, Bootstrap5, Vue)(CI/CD까지 가는 길 ②)
  • ③ Rails(Docker)에 필요한 Gem(CI/CD까지 가는 길 ③) 추가
  • ④ Rails(Docker)에서 Nginx 가져오기(CI/CD까지의 도로 ④)
  • 컨디션

  • WSL2 (Ubuntu20.04)
  • Docker 20.10.9
  • docker-compose 1.29.1
  • Git 2.25.1
  • VSCode
  • Nginx의 Docker 환경 구축


    Docker + Rails + Puma + Nginx + MySQL
    여기 기사를 참고하세요.
    우선, 디렉터리 만들기 /containers/nginx, 만들기 Dockerfile./containers/nginx/Dockerfilecontainers/nginx/Dockerfile
    FROM 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.confcontainers/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 디자인에 꼭 도전하겠습니다.

    참고 자료

  • Docker + Rails + Puma + Nginx + MySQL
  • 좋은 웹페이지 즐겨찾기