LoginSignup
1
2

More than 1 year has passed since last update.

【半日でできる】AWS EC2からHerokuにサーバー移行する方法

Last updated at Posted at 2021-08-01

はじめに

ポートフォリオでAWSでデプロイしたが、Herokuに移行したいという人も多いかと思います。

こちらの記事で紹介したwebアプリをaws ec2にdockerを使って、デプロイをしていたのですが、

  • 無料期間にもかかわらず、200円くらい料金がかかる
  • ちょこちょこオチていた

Herokuに移行することにしました。

かかった時間は以外にも1日くらいと、結構スムーズにできました。
ざっくりとですが、備忘録がてら自分が移行作業でやったことを載せます。

herokuにアプリをデプロイ

まず、AWSにデプロイしていたアプリをherokuにデプロイします。
Dockerfileやdocker-compose.ymlを変える必要があると思いますので、適宜変えてください。

ちなみに私はこんな感じでHerokuにデプロイしたと思います。

docker-compose.yml
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

docker-compose.yml
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化することができます。

下記を読めば簡単にできると思います。

詰まったところ

image.png

上記で、SSLをフルにしないと、ページが開けません。
フレキシブルにしていたので、開けませんでした。

それでは、お気をつけていってらっしゃい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2