Docker를 Ruby on Rails의 조합으로 구성합니다!

7415 단어 DockerAWSRubyRails

현재 상태


안녕하세요, Qiita의 첫 투고입니다!
잘못된 점이 있다고 생각해요. 그때 부드럽게 말해주세요(웃음)
이번에는 Aws와 Docker를 사용하여 생성된 Rails 포트폴리오를 배포합니다.
현재 상태는 rails와 Aws로 만든 조합이지만 환경 구축이 힘들다고 생각해서 코드로 환경 주위의 Docker를 관리하기 쉽게 조합을 특별히 배치하고 싶습니다.

구조도


배치할 때의 구조도는 다음과 같다.

아주 간단하게 설명하면 클라이언트에서 통신 요청을 하면 Nginx에 가서 동적 처리를 해야 할 때puma에 대해 통신을 하고 그때puma와 mysql도 통신의 절차가 된다.
이번에는 Docker로 이 구성을 만들고 싶어요.

필요한 물건


이번 배포에서는 Aws의 EC2 및 RDS를 사용합니다.
Docker를 사용하여 환경을 구축하지만 데이터의 영구화 관점에서 볼 때 이번 데이터베이스는 Docker가 아니라 RDS의 Mysql이다.
다음은 숙제에 필요한 준비와 숙제입니다.
· Aws에서 EC2, RDS를 사용하여 배포할 때 필요한 준비(네트워크 구조 등)
・ 로컬 환경 및 Ec2에 Dokcer 설치
・ 로컬 환경 및 Ec2에 Docker-compose 설치

참고 보도


EC2에서 Rails 애플리케이션에 Docker(Rails, Nginx, RDS) 배포
Rails On Docker의 AWS 배포가 완료되었기 때문에 컨텐츠를 정리합니다.

작업


먼저 Docker 파일을 생성합니다.
여기서 Dockerfile을 사용하여 루비 주위의 환경을 구축하는 코드를 작성합니다.
FROM ruby:2.5.7

RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       libpq-dev \
                       nodejs \
                       vim

RUN mkdir /アプリの名前

WORKDIR /アプリの名前

ADD Gemfile /アプリの名前/Gemfile
ADD Gemfile.lock /アプリの名前/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /アプリの名前

RUN mkdir -p tmp/sockets
RUN mkdir -p tmp/pids
다음은 Docker-compose를 만드는 것입니다.
여기서 Docker 컨테이너 관리와 망토를 할 곳을 지정합니다!
Docker-compose.yml
version: '3'
services:
  app:
    build: .
    command: bundle exec puma -C config/puma.rb -e production
    volumes:
      - .:/アプリの名前:cached
      - public-data:/アプリの名前/public
      - tmp-data:/アプリの名前/tmp
      - log-data:/アプリの名前/log

  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/アプリの名前/public
      - tmp-data:/アプリの名前/tmp
    ports:
      - 80:80

volumes:
  public-data:
  tmp-data:
  log-data:
다음 파일을 만듭니다.
여기서 Nginx 컨테이너를 설정합니다.
FROM nginx:1.15.8

RUN rm -f /etc/nginx/conf.d/*

ADD nginx.conf /etc/nginx/conf.d/アプリの名前.conf

CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
containers/nginx/nginx.conf
upstream FashionInformation_app {
  server unix:///アプリの名前/tmp/sockets/puma.sock;
}

server {
  listen 8000;
  server_name ドメイン名;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  root /アプリの名前/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 @アプリの名前;
  keepalive_timeout 5;

  location @アプリの名前 {
    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://アプリの名前;
  }
}

Rails 애플리케이션 배포


여기까지 왔는데 EC2에서 클론git!
ec2-user@ip-xxx-xx-xx-xxx ~]$ git clone GitHubのリポジトリのURL

이미지 구축

ec2-user@ip-xxx-xx-xx-xxx]$ cd myapp
[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose build

서버 시작 전 준비

[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose run app rails assets:precompile RAILS_ENV=production

서버 시작 전 준비

[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose up -d

데이터베이스 만들기, 마이그레이션 파일 가져오기

[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose exec app rails db:create db:migrate RAILS_ENV=production
공공 IP에 접근해서 정확하게 표시하면 성공!

좋은 웹페이지 즐겨찾기