はじめに
ポートフォリオでAWSでデプロイしたが、Herokuに移行したいという人も多いかと思います。
こちらの記事で紹介したwebアプリをaws ec2にdockerを使って、デプロイをしていたのですが、
- 無料期間にもかかわらず、200円くらい料金がかかる
- ちょこちょこオチていた
Herokuに移行することにしました。
かかった時間は以外にも1日くらいと、結構スムーズにできました。
ざっくりとですが、備忘録がてら自分が移行作業でやったことを載せます。
herokuにアプリをデプロイ
まず、AWSにデプロイしていたアプリをherokuにデプロイします。
Dockerfileやdocker-compose.ymlを変える必要があると思いますので、適宜変えてください。
ちなみに私はこんな感じでHerokuにデプロイしたと思います。
version: "3"
services:
db:
image: postgres
ports:
- '5432:5432'
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: password
web:
build:
context: .
dockerfile: Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
tty: true
stdin_open: true
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/my_app
FROM ruby:2.7
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
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn vim
RUN mkdir /my_app
WORKDIR /my_app
COPY Gemfile /my_app/Gemfile
COPY Gemfile.lock /my_app/Gemfile.lock
RUN bundle install
COPY . /my_app
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
ローカルでdocker compose up -dしたら、
Herokuにデプロイしていきます。
## コンテナにログイン
heroku container:login
## tsumiki-appというアプリを作成
heroku create tsumiki-app
## tsumiki-appというアプリにコンテナをpush
heroku container:push web --app tsumiki-app
## postgresを追加
heroku addons:create heroku-postgresql:hobby-dev --app tsumiki-app
## tsumiki-appをrelease
heroku container:release web --app tsumiki-app
heroku>アプリ>settingで環境変数を定義
RAILS_ENV: production
RAILS_SERVE_STATIC_FILES: true
SECRET_KEY_BASE: [value]
# S3を使っている人はS3のいろいろも追加
$heroku config:get ---
みたいにしても設定できますが、疲れてたのでheroku上でやりました(実はコマンド苦手意識)
参考
つづいて、migrateとprecompileをします。
heroku run rails db:migrate --app tsumiki-app
heroku run rails assets:precompile --app tsumiki-app
アプリをオープン
heroku open --app tsumiki-app
無事デプロイできたかと思いましたら、
blocked hostとでたので、それを解消します。
config/application.rbに下記を追加。
config.hosts << "tsumiki-app.herokuapp.com"
dbをdumpし、dumpファイルを作る
続いて、dumpファイルを作ります。
AWSで動かしていたpostgresのdb情報をdumpして、先程作ったherokuアプリに流し込みます。
ec2上にいって、下記を実行します。
/usr/local/src/postgresql-12.5/src/bin/pg_dump/pg_dump -U postgres -h `host` -p 5432 `database` -f aws0801.dump
ローカルに持ってきます。
scp -i (.pem) myuser@ip-address:(ec2上の持ってきたいdumpがある場所) (dumpを持ってきたいローカルのパス)
dumpとかscpとかよくわからない方は調べたら後々幸せになれます。笑
dumpファイルをherokuアプリに流す
流し方は、Heroku推奨のやり方でやってみました↓
s3からHerokuにアップロードする
S3にダンプをアップロードして、Herokuにアップロードするやり方が推奨されてました。
すみません。これは頑張ってもできなかったのと、海外のサイトでも、できた人いないっぽかったので、おすすめしません。
直接流す。
heroku pg:psql --app tsumiki-app DATABASE_URL < aws0801.dump
まさかのこれでできました。笑
cloudflareでssl化する
最後に、お名前ドットコムでとった、ドメインに、Herokuの方のドメインを紐付けます。
これで無料でssl化することができます。
下記を読めば簡単にできると思います。
詰まったところ
上記で、SSLをフルにしないと、ページが開けません。
フレキシブルにしていたので、開けませんでした。
それでは、お気をつけていってらっしゃい。