Docker의 Rails를 heroku에 배포
4741 단어 Dockerdocker-composeherokuRails
heroku에 배치된 연습
Dcoker 컨테이너에 Rails 응용 프로그램을 조립하고 Circleci를 사용하여 한 번에 자동 배포하려면
미궁에 빠졌기 때문에 원점으로 돌아가고 싶어요.(2단)
자신의 환경
Ruby : 2.6.6
rails : 6.0.3.2
git : 2.23.0
heroku-cli : 7.42.13 darwin-x64 node-v12.16.2
Docker : 19.03.12
개발 환경은 MySQL
나는 PostgreSQL 모델로 생산 환경을 조립해 보고 싶다.
Docker에서 Rails 어플리케이션 준비
우선 프로그램을 만드는 디렉터리를 만들고 터치 명령으로 필요한 여러 가지를 준비한다.
terminal
$ touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh}
DockerfileFROM ruby:2.6
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update -qq \
&& apt-get install -y nodejs yarn \
&& mkdir /heroku_app
WORKDIR /heroku_app
COPY Gemfile //Gemfile
COPY Gemfile.lock /heroku_app/Gemfile.lock
RUN bundle install
COPY . /heroku_app
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3006
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.ymlversion: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql:cached
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3006 -b '0.0.0.0'"
volumes:
- .:/heroku_app
ports:
- "3006:3000"
depends_on:
- db
stdin_open: true
tty: true
command: bundle exec rails server -b 0.0.0.0
volumes:
mysql-data:
driver: local
Gemfilesource 'https://rubygems.org'
rails ‘6.0.3’
entrypoint.sh#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /heroku_app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
위의 다섯 가지를 준비할 수 있다면 다음 명령을 실행하여 Rails 응용 프로그램을 만듭니다.terminal
$docker-compose run web rails new . --force --no-deps --database=mysql
동시에 용설란주 내용을 잘 만들어라.$ docker-compose run web rails g scaffold blog title:string body:text
$ docker-compose run web rails db:migrate
$ docker-compose up -d
heroku에 배치 준비
다음은 Heroku에 Rails 응용 프로그램을 배치하기 전에 생산 환경을 위한 PostgreSQL을 준비합니다.
- config/database.yml 설정
- Gemfile에 pg 추가
- config/enviroments/deviropment.rb 설정
config/database.yml 설정
config/database.yml
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
Gemfile 설정
생산 환경을 위한gem 파일을 준비하다.
제품 그룹에 pg를 추가합니다.
또한 MySQL을 개발 환경으로 사용하기 위해
group :development, :test do
로 이동합니다.Gemfile
group :production do
gem 'pg', '~> 0.19.0'
end
config/enviroments/deviropment.rb 설정
Rails6 특유의 것이지만 DNS의 바인딩 공격 이탈을 방지하는 보호 기능이 있는 것 같습니다.
나는 너에게 호스트를 하나 추가해야 한다.
config/enviroments/deviropment.rb
config.hosts << "radiant-springs-45017.herokuapp.com"
아래의 보도를 참고하도록 허락해 주십시오.https://qiita.com/kodai_0122/items/67c6d390f18698950440
편집이 완료되면 구축됩니다.
terminal
docker-compose build
$docker-compose run web rails db:create
$docker-compose up -d
그리고 론과 헤로쿠에 배치하라는 명령을 내린다.$ docker-compose down #一度落としておかないとエラーになる可能性があるとのこと
$ heroku login
$ heroku create アプリ名もしくは空欄
$ heroku container:login
$ heroku container:push web
$ heroku adding:create heroku-postgresql:hobby-dev
$ heroku container:release web
$ heroku open
끝났어!
사랑을 끊었지만 heroku에 배치하는 중 오류가 발생했습니다.
그때 종착역에서
$ heroku logs --tail
등을 쳐서 조사 착오가 해결되었다.성공한 기사를 참고해도 환경에 따라 오류가 발생하기 때문에 매번 조사하는 습관을 기르는 것이 중요하다.
Reference
이 문제에 관하여(Docker의 Rails를 heroku에 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nicoryo/items/c9d12e047e6f1d08c111텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)