DjangoアプリケーションをHerokuにデプロイする

KJ
7 min readMay 23, 2019

--

Herokuは、開発したアプリケーションを公開するためのクラウドプラットフォームです。サーバやインフラの管理はすべてHerokuが代行してくれるため、開発とデプロイだけに専念することができます。その他GitHubとの連携、豊富なアドオン、無料サービスなど、魅力的な機能がたくさんあります。アプリケーションを運用するなら、まずはHerokuがおすすめです。

Table of Contents

Djangoプロジェクトのセットアップ

パッケージのインストール

Herokuの推奨パッケージ、 Gunicorndj-database-urlPsycopg2WhiteNoise をインストールします。

(envname) > pipenv install gunicorn dj-database-url psycopg2 whitenoise

本番環境用設定ファイルの編集

まずは本番環境用の設定ファイルを作成します。

本番環境用設定ファイルに dj-database-url の設定を追加します。さらに ALLOWED_HOSTS にHerokuドメインを追加して、デプロイ後にアクセスできるようにしておきます。

共通設定ファイル base.pyWhiteNoise の設定を追加します。

INSTALLED_APPS の一番上に whitenoise.runserver_nostatic を追加。(開発環境でもWhiteNoiseを使用するための設定)

MIDDEDWARESecurityMiddleware の下に WhiteNoiseMiddleware を追加。(静的ファイルの提供)

Static files セクションに STATICFILES_STORAGE を追加。(WhiteNoiseに付属するストレージバックエンドを使用して、圧縮とキャッシュを有効にする)

.gitignoreの作成

プロジェクトルートディレクトリに .gitignore という名前のファイルを作成して、Gitの管理に含めないファイルやディレクトリを指定することができます。

gitignore.io という便利なサービスがあるので活用しましょう。プロジェクトの環境に合わせて無視リストを生成してくれます。

「Django」「Python」で検索して生成されたテンプレートをもとに作成した .gitignore ファイルです。開発環境用の設定ファイルは必ず指定しましょう。静的ファイルとメディアファイルが収集されるディレクトリの指定も推奨されています。

その他ファイルの追加

プロジェクトルートに Procfileruntime.txt というファイルをそれぞれ作成し、以下のように記述します。 myproject の部分は自分のプロジェクト名に置き換えましょう。

runtime.txt には使用しているPythonのバージョンを指定します。

Gitのセットアップ

Gitのインストール

Gitのインストールおよび初期設定については、Git-Book(公式ドキュメント)を参考にすると良いです。

Gitリポジトリの作成

プロジェクトルートディレクトリに移動して、次のコマンドを実行します。

(envname) > git init

.git という名前のディレクトリが作成されます。これで初期化は完了です。

myproject/
.git/
myapp/
myproject/
static/
staticfiles/
templates/
.gitignore
db.sqlite3
manage.py
Pipfile
Pipfile.lock
Procfile
runtime.txt

Herokuのセットアップ

Herokuアカウントの作成

まずは、Herokuのウェブサイトでアカウントを作成します。「新規登録」をクリックして、名前やメールアドレス等を入力するだけで簡単に作成できます。その後は指示に従い、メール認証、パスワードの設定をして完了です。

Heroku CLI のインストール

Heroku CLI を使用すると、ターミナルから直接、Herokuアプリケーションを管理できます。The Heroku CLI | Heroku Dev Center(公式サイト)からダウンロードしてインストールします。

アプリケーションの新規作成

まずは次のコマンドを実行して、Herokuにログインします。

(envname) > heroku login

次のコマンドを実行すると、heroku上に空のアプリケーションとGitリポジトリが作成されます。

(envname) > heroku create app-name

app-name の部分がアプリケーション名になります。基本的には、Djangoのプロジェクト名と同じで良いと思います。

環境変数の設定

秘密にしたい値は、環境変数として設定しましょう。

(envname) > heroku config:set SECRET_KEY=your-django-secret-key

os.environ を使用して、プロジェクト内の値を置き換える必要があります。

他にも秘密にしたい値があれば、同じ要領で設定します。

Herokuに設定した環境変数の一覧は、次のコマンドで確認できます。

(envname) > heroku config

Amazon S3 を利用する場合

Herokuでは、 push 時に自動で collectstatic コマンドを実行するように設定されています。静的ファイルの配信に Amazon S3 や CDN を利用する場合、またHerokuの collectstatic を無効にしたい場合は、 DISABLE_COLLECTSTATIC を設定しましょう。

(envname) > heroku config:set DISABLE_COLLECTSTATIC=1

デプロイ

準備は整いました。次のコマンドを順に実行して、Herokuにデプロイしてみましょう。

(envname) > git add .
(envname) > git commit -m "Initial commit"
(envname) > git push heroku master

データベースマイグレーションを実行して、管理ユーザを作成すれば、完了です!

(envname) > heroku run python manage.py migrate(envname) > heroku run python manage.py createsuperuser

その他のコマンド

Gitの管理下にあるファイルの状態を確認する:

(envname) > git status

アクセス

ブラウザでアプリケーションを開いて確認してみましょう。 heroku open コマンドを実行します。

(envname) > heroku open

https://app-name.herokuapp.com/ というURLで正常に表示されていれば成功です。URLの末尾に admin/ をつけて、管理サイトにもアクセスしてみましょう。

--

--