0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerで作ったDjangoアプリケーションをHerokuにデプロイする

Last updated at Posted at 2020-06-30

#はじめに
Container Registryを使ってHerokuにデプロイする記事が、Railsが多い一方でDjangoではそんなにヒットしなかったので、アウトプットがてら書いていきます。まだ勉強中の身なので、もし間違えていたら指摘お願いします。

#Heroku CLIをダウンロード
始めにこのリンクからHeroku CLIをダウンロードします。僕はwindows 10を使っているので、64ビットインストーラを使ってダウンロードしました。
他のOSを使っている人でも、やり方は詳しく(英語で)書かれているので、その通りにダウンロードしてください。

#Heroku上でアプリを作成、アドオン等設定
Herokuにログインしてアプリを作成し、OverviewのところからHeroku PostgresをAdd-onsとして設定します。このとき、Hobby Devを選択することで無料で使えるっぽい。(ただし遅いとかなんとか…)
Herokuではvolumeが使えないため、データの永続化をするためにこのようにDBを利用しています。

#requirement.txtに追記

requirement.txt
gunicorn
dj-database-url
whitenoise
django_heroku

#setting.pyに追記
以下のようにsetting.pyの下の方にstatic_rootとデータベースの設定を書いていきます。
STATIC_ROOTを設定することで本番環境でも静的ファイルを扱えるようになります。

setting.py
import django_heroku

DEBUG = False
ALLOWED_HOSTS = ['自分のドメイン']

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware', #これの後ろにwhitenoiseを追記
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ()
]

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

import dj_database_url
DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True)

if not DEBUG:
    django_heroku.settings(locals())

公式参考

#Procfileを用意
Dockerfileと同じディレクトリにProcfileという名前のファイルを準備し、以下のように記述します。

Procfile
web: gunicorn [プロジェクト名].wsgi

プロジェクト名はご自身のプロジェクト名に置き換えてください。

#Dockerfileに追記
以下のようにDockerfileの一番下に追記します。参考

Dockerfile
RUN python manage.py collectstatic --noinput
CMD gunicorn --bind 0.0.0.0:$PORT [プロジェクト名].wsgi

こちらも同様にプロジェクト名を置き換えてください。

#コマンドを実行
プロジェクトがあるディレクトリ上でコマンドを実行していきます。

$ heroku login
$ heroku container:login
$ heroku container:push web -a [アプリ名]
$ heroku container:release web -a [アプリ名]
$ heroku open -a [アプリ名]

No webprocess runningエラーが出たら以下のコマンドを実行しましょう。

$ heroku ps:scale web=1 -a [アプリ名]

公式参考

#コンテナとHeroku Postgresを結び付ける

$ heroku addons:attach [postgresコンテナ名] -a [アプリ名]

postgresコンテナ名はHerokuのアプリ管理サイトのOverviewのInstalled add-onsから確認することができます。また、最初以外にもマイグレーションが失敗するときなどにこのコマンドを再度実行し、再び結び付け直すことで上手くいくようになることがあります。

マイグレーションの実行

以下のコマンドでマイグレーションを実行します。

$ heroku run python manage.py migrate -a [アプリ名]

#メモ
以下のコマンドでどういう状況かチェックできる。

$ heroku run bash -a [アプリ名]

以下のコマンドでプロセスを確認したり、停止したりできる。

$ heroku ps -a [アプリ名] #プロセス確認
$ heroku ps:stop [プロセス名] -a [アプリ名] #プロセス停止

#おわりに
静的ファイルもなんとか扱えるようになりました!

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?