DjangoアプリをHerokuにデプロイする(その1)
この記事は、DjangoアプリをHerokuにデプロイする[その1] - Qiitaのアーカイブです。
DjangoアプリをHeroku上で動かすときの備忘録として記録する。 その1ではDjangoアプリのスタートページ(It Workのページ)をHerokuで表示するところまでやる。
目次
はじめに
DjangoアプリをHeroku上で動かすときの備忘録として記録する。 その1ではDjangoアプリのスタートページ(It Workのページ)をHerokuで表示するところまでやる。
次回
筆者の環境
必要なもの
Herokuアカウント 参考:Heroku初心者がHello, Herokuをしてみる
virtualenvのインストール(python3環境にインストールされていること) 参考:virtualenvでpython環境を管理する
今回作るアプリの構成
今回作るアプリは以下の構成とする。
myProject ├── venv ├── Procfile ├── db.sqlite3 ├── manage.py ├── myDjango │ ├──__pycache__ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── requirements.txt └── runtime.txt
ルートディレクトリ名:myProject
Djangoプロジェクト名:myDjango
手順
Djangoアプリを作成する
プロジェクトディレクトリの生成・移動
$ mkdir myProject $ cd myProject
仮想環境の構築・起動
$ virtualenv venv $ source venv/bin/activate
virtualenv venv
でvenvという名前の仮想環境を構築する。
source venv/bin/activate
で仮想環境venvを実行する。ターミナルのユーザ名の前に(venv)
が表示されるようになる。
(補足)
仮想環境の実行を終了したいときはターミナルでdeactivate
を実行する。
django-toolbeltのインストール
$ pip install django-toolbelt
django-toolbeltをインストールすることで、以下のパッケージがインストールされる。
- django (Django本体)
- psycopg2 (PythonでpostgreSQLを扱いやすくする)
- gunicorn (Pythonで動くWSGIサーバ)
- dj-database-url (DjangoでpostgreSQLを扱えるようにする)
- dj-static (静的リソースを扱えるようにする)
Djangoプロジェクトの作成
$ django-admin.py startproject myDjango ./
現在のディレクトリにmyDjango
というDjangoプロジェクトを作成する。
言語・タイムゾーンを変更
myDjangoディレクトリ内にあるsettings.py
の下記の部分を書き換える。
LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo'
マイグレーションする
$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying sessions.0001_initial... OK
こんな風になったらOK マイグレーションは簡単に言うと、SQLを書くことなくPythonでデータベース内にテーブルを作成することができる機能である。
参考: Rails初心者がつまずきやすい「マイグレーション」
サーバの起動
$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). July 16, 2017 - 02:53:26 Django version 1.11.3, using settings 'myDjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
python manage.py runserver
を実行して、上のような表示になったらOK
このコマンドを実行することで、http://127.0.0.1:8000/
でアプリを見ることができる。
終了するときはCtrl+C
を押す。
ローカルでアプリが起動するか確認 ブラウザからhttp://127.0.0.1:8000/にアクセスする。うまくいってれば以下の画像のようなページが表示される。
gitでバージョン管理をする
.gitignoreの作成 .gitignoreファイルを作成し、以下を書き込む。
*.pyc venv staticfiles db.sqlite3
コミットする
$ git init $ git add . $ git commit -m "Djangoアプリを作成した"
Herokuへデプロイする
Procfileの作成
$ echo "web: gunicorn myDjango.wsgi --log-file -" > Procfile
ProcfileはHerokuに何を実行させるか教えるためのファイル。
runtime.txtの作成
$ echo "python-3.6.1" > runtime.txt
runtime.txtでPythonのバージョンを指定する。
requirements.txtの作成
$ pip freeze > requirements.txt
こういう風なファイルができる
dj-database-url==0.4.2 dj-static==0.0.6 Django==1.11.3 django-toolbelt==0.0.1 gunicorn==19.7.1 psycopg2==2.7.1 pytz==2017.2 static3==0.7.0
DjangoアプリをHerokuで使えるようにする
settings.pyの最後の行に以下を追加する。
# Parse database configuration from $DATABASE_URL import dj_database_url db_from_env = dj_database_url.config() DATABASES['default'].update(db_from_env) # Honor the 'X-Forwarded-Proto' header for request.is_secure() SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # Allow all host headers ALLOWED_HOSTS = ['*'] # Static asset configuration import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) STATIC_ROOT = 'staticfiles' STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), )
wsgi.pyを書き換える
import os from dj_static import Cling from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myDjango.settings") application = Cling(get_wsgi_application())
Herokuアプリの作成
$ heroku create
Heroku環境変数の設定
$ heroku config:set DISABLE_COLLECTSTATIC=1
これをしないとpush時にエラーになる。
Herokuにプッシュ
$ git add . $ git commit -m "Herokuで動くようにした" $ git push heroku master
remote: Verifying deploy... done.
と表示されたらプッシュ成功
Herokuでもマイグレーションする
$ heroku run python manage.py migrate
heroku run 〇〇
を実行すると、heroku上で〇〇というコマンドを実行できる。
Herokuで動いてるかを確認
$ heroku open
heroku open
で今回作ったHeroku上のアプリケーションにアクセスできる。
うまくいっていれば以下の画像のようなページが表示される。
まとめ
今回はDjangoの作ったばっかのアプリをHeroku上で動かすところまでをやった。 次回は管理サイトについてとモデル作成を行う。
次回 DjangoアプリをHerokuにデプロイする[その2]