【Heroku+Django】DjangoプロジェクトをHerokuにデプロイしてWebサービス化する方法
今回は以前作成した、Djangoチュートリアルの投票アプリをWebアプリケーションとして公開する方法を記載していきます。Herokuが無料でPaasを提供しているとのことで、そこに作ったプログラムをデプロイして動かしてみます。
作ったアプリをウェブに公開したい
前回作ったアプリの実行は自分のPCの中だけでした。せっかく作ったアプリなので、スマホや他の場所からでも使いたい。公開したい。と思うかもしれません。そんな時はどうしましょうか。自分のPCを常に立ち上げておいて、外部から接続できるようにする?うーん。。。本腰入れて勉強しなきゃならない上に、独学だと学習コストが高そう。誰かに環境の構築をお願いする?そんな知り合いいないので、今から誰かにお願いするとお金も時間もかかりそう。何かいい方法がないものか、と調べてみたところ、Herokuという作ったアプリを乗っけてWebサービスにできるサービスが無料であるようです。今回はそのHerokuに、前回作った投票アプリケーションをデプロイして、スマホのブラウザでアプリを動かすというところをゴールにします。
今回のゴール
スマホからアプリを表示させます。Herokuとは?
Heroku は、アプリケーションの開発から実行、運用までのすべてをクラウドで完結できる PaaS( サービスとしてのプラットフォーム)です。サーバやOS、データベースなどの「プラットフォーム」と呼ばれる部分を、インターネット越しに使えるようにできます。Herokuの特徴は対応しているプログラム言語が豊富、拡張機能が豊富、スケールアウトが簡単などです。無料プランもある上にちょっとした設定とコマンドを打つだけでアプリを公開できるので、時間もお金もない筆者にはちょうどいいサービスです。Herokuとは
Heroku はアプリの構築、提供、監視、スケールに役立つクラウドプラットフォームで、アイデアを出してから運用を開始するまでのプロセスを迅速に進めることが可能です。また、インフラストラクチャの管理の問題からも解放されます。
https://jp.heroku.com/what
⚠️無料で使えるとはいえ、やはり制限があるようです。例えば、30分以上起動していないとスリープモードになって、次回立ち上がるのに時間がかかるなど。大規模サービスを利用したい場合は、有料プランを使うといいでしょう。
jp.heroku.com
どのように使うのか
それでは早速Herokuにアプリケーションを登録(デプロイ)してみましょう。流れは次の通りです。デプロイ用にアプリを修正
流石に丸っとそのままソースをあげて動かすことはできません。Herokuで動かすためのライブラリをインストールしたり、プロジェクトに設定ファイルを追加したり、それ用にソースを修正したりする必要があります。とはいえ、そんなに難しくはないので、1つずつ見ていきましょう。
①ライブラリのインストール
まず、実行する仮想環境に必要なPythonライブラリをインストールする必要があります。必要なライブラリは次のようなものが必要です。
- dj-database-url
- gunicorn
- whitenoise
- psycopg2
- pytz
⚠️仮想環境のアクティベーションは、PyCharmのインタープリターに仮想環境を指定して、エディター内のターミナルを開くか、AnacondaNavigatorからターミナルを開く、コマンドラインからターミナルを起動するなど、方法がたくさんあるので、やりやすい方法で実施してください。まず、下記のコマンドでインストールされているライブラリの中に上記があるか確認します。
Terminal
(django) $ pip freeze
Terminal
(django) $ pip install gunicorn django-heroku
②設定ファイルの追加
続いて、プロジェクトに設定ファイルを追加していきましょう。
追加するのは次のファイルです。
ファイル名 | 役割 |
---|---|
runtime.txt | Pythonのバージョン指定 |
Procfile | Herokuプロセスの起動コマンド |
requirements.txt | 依存パッケージのリスト |
Tree
mysite │ db.sqlite3 │ manage.py │ Procfile👈 │ requirements.txt👈 │ runtime.txt👈 │ __init__.py │ ├─mysite │ settings.py │ urls.py │ wsgi.py │ __init__.py │ └─polls │ admin.py │ apps.py │ models.py │ tests.py │ urls.py │ views.py │ __init__.py │ ├─migrations │ ├─static │ └─polls │ style.css │ └─templates └─polls detail.html index.html results.html
requirements.txtは次のコマンドで作ることができます。
Terminal
(django) $ pip freeze > requirements.txt
requirements.txt
: : dj-database-url==0.5.0 Django==1.11.3 django-heroku==0.3.1 gunicorn==19.9.0 psycopg2==2.7.6.1 pytz==2017.2 whitenoise==4.1.2 : :
Procfile
web: gunicorn mysite.wsgi --log-file -👈※mysiteのところはプロジェクト名に合わせて変更します。
runtime.txt
python-3.6.0👈※Pythonのバージョンはお使いのPythonのバージョンに変更してください。
③開発環境独自の設定を定義
続いて、下記のファイルを追加・編集していきます。ここでは開発と本番で異なる環境について明記します。例えば使うDBやパスなんかは環境に合わせて設定する必要があります。毎回開発時と本番にデプロイするたびにそれぞれソースやファイルを編集してもいいですが、面倒ですよね。あらかじめこっちは開発用、こっちは本番用定義という風にどちらの設定で実行をさせるか書いておきます。追加するファイルは次のようなファイルです。
ファイル名 | 役割 |
---|---|
mysite/local_settings.py | 【新規作成】開発環境用設定ファイル |
mysite/settings.py | 本番環境用設定ファイル |
.gitignore | 【新規作成】 Git管理除外リスト |
Tree
mysite │ .gitignore👈 │ db.sqlite3 │ manage.py │ Procfile │ requirements.txt │ runtime.txt │ __init__.py │ ├─mysite │ local_settings.py👈 │ settings.py👈 │ urls.py │ wsgi.py │ __init__.py │ └─polls │ admin.py │ apps.py │ models.py │ tests.py │ urls.py │ views.py │ __init__.py │ ├─migrations │ ├─static │ └─polls │ style.css │ └─templates └─polls detail.html index.html results.html
local_settings.py
import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } DEBUG = True
settings.py
DEBUG = False try: from .local_settings import * except ImportError: pass if not DEBUG: import django_heroku django_heroku.settings(locals())
.gitignore
django👈<your_env> __pycache__ staticfiles local_settings.py db.sqlite3 *.py[co]
Herokuのアカウント作成
こちらからHerokuを使うためのユーザー登録をします。
jp.heroku.com
Heroku CLI(Heroku toolbelt (Git SSH含む) )をインストール
下記サイトから自分の端末でHerokuを使うためのツールをインストールします。
The Heroku CLI | Heroku Dev Center
お使いの環境に合わせてインストールをしてください。
インストール時には以下で使うGitやSSHのツールもインストールされます。(デフォルトの設定で大丈夫です。)
Gitでリモートリポジトリにプッシュ
Gitのリモートリポジトリ経由でHerokuにソースをデプロイします。Gitにソースを挙げます。
仮想環境用をアクティベートしているTerminalを開いておいて下記の手順でプッシュします。
Terminal
(django) $ cd mysite👈作ったプロジェクトの直下に移動します。(manag.pyと並列の階層) (django) $ git init (django) $ git config user.name "Your Name" 👈ご自身の名前で登録します。 (django) $ git config user.email xxxxx@mail.com 👈メールアドレスを入力します。 (django) $ git add -A . (django) $ git commit -m "first commit" 👈コミット用のコメントを入力します。
Herokuへデプロイ
Heroku CLIのコマンドでHerokuにデプロイします。
Terminalで下記を順番に打ち込んでいき、流れに沿って処理を実行していきます。
Terminal
(django) $ heroku login (django) $ heroku create <your-app-name> 👈 任意・かぶらないもの (django) $ git push heroku master (django) $ heroku ps:scale web=1 (django) $ heroku run python manage.py migrate (django) $ heroku run python manage.py createsuperuser
Terminal
(django) $ heroku open
まとめ
いかがでしたでしょうか。以上が自分で作ったDjangoアプリをHeroku(Web上)で動かす方法になります。少しコマンドでの作業が多いですが、慣れてしまえばそんなに難しい作業でもないと思います。あとはいろいろソースをいじってあげてみて練習して、有料版に切り替えるなり別サービスにするなり、選択肢の幅を広げていければと思います。
- 【Anaconda+Django】 PythonでWebアプリを開発してみる。【環境構築が実は一番ハードル高い?】 - だって楽したいじゃんか!
- 【Python】Pycharmを日本語化する【ぼくは英語ができましぇん】 - だって楽したいじゃんか!
- 【Python】辞書型dictを使う【文法】 - だって楽したいじゃんか!
- 【Anaconda+Django】 PythonでWebアプリを開発してみる【Djangoの設計思想MTVモデル?なにそれおいしいの?編】 - だって楽したいじゃんか!
- 【Anaconda+Django】Django(Python)でWebアプリを開発してみる【チュートリアルも一苦労編】 - だって楽したいじゃんか!
- 【Heroku+Django】DjangoプロジェクトをHerokuにデプロイしてWebサービス化する方法 - だって楽したいじゃんか!