WEB3層
WSGIはWEBサーバー機能も持っているが、リバースプロキシとしてnginxを置くのが一般的
参考 https://blowup-bbs.com/webserver-interface-summary/
参考 https://devcenter.heroku.com/ja/articles/python-gunicorn
Heroku アカウント作成
- アカウントを作成後、Create a new app をクリックする
- App name は何でもok
- Windows SubSystems for Linux の場合はコマンドからCLIをインストールする
$ curl https://cli-assets.heroku.com/install-ubuntu.sh | sh (venv)$ heroku login
環境設定
- Heroku Settings -> Config Vars -> Reveal Config Vars
Heroku Setting の KEY に SECRET_KEY、VALUE に settings.py の SECRET_KEY の値を入力
$ pip install python-dotenv
ここでセキュリティ上 Heroku 上にアップロードする setting.py から SECRET_KEY を消す必要がある
しかし settings.py の SECRET_KEY を消すとローカルループバックアドレスでサーバーを立てれなくなって不便
そこで python-dotenv をインストールする
SECRET_KEY = test/bookproject5/bookproject/bookproject/setting.py に書かれている SECRET_KEY の値
test/bookproject5/bookproject/.env を書く
import os from dotenv import load_dotenv load_dotenv() SECRET_KEY = os.getenv('SECRET_KEY')
test/bookproject5/bookproject/bookproject/setting.py を書く
import os 追加
from dotenv import load_dotenv 追加
load_dotenv() 追加
SECRET_KEY = os.getenv('SECRET_KEY') 追加
(venv)$ touch .gitignore
__pycache__/ .env /venv/ /media/* !/media/.gitkeep /static/* !/static/.gitkeep db.sqlite3
test/bookproject5/bookproject/.gitignore を書く
__pycache__/ python のキャッシュが自動で生成されているので除外
.env 環境変数は除外
/venv/ 仮想環境は除外
/media/*
!/media/.gitkeep
media ディレクトリに .gitkeep というファイルを作成し、それ以外は除外
/static/*
!/static/.gitkeep
static ディレクトリに .gitkeep というファイルを作成し、それ以外は除外
db.sqlite3 DBは除外
(略) STATIC_URL = '/static/' STATIC_ROOT = BASE_DIR / 'static' MEDIA_URL = '/media/' (略)
test/bookproject5/bookproject/bookproject/settings.py を書く
STATIC_ROOT = BASE_DIR / 'static' を追加
$ python3 manage.py collectstatic
コマンドを入力して各アプリの static ディレクトリに置いていた static ファイルを移動させる
具体的にはデプロイした場合 test/bookproject5/bookproject/static に static ファイルを置かなければならない
つまりコマンドは BASE_DIR / 'static' ディレクトリに static ファイルを移動させる
$ pip install gunicorn
ウェブサーバ: apache, nginx
アプリサーバ: gunicorn
アプリ: python django
DB: sqlite3
gunicorn がウェブサーバーとアプリの橋渡しになる
参考 https://deecode.net/?p=408
web: python manage.py migrate && gunicorn bookproject.wsgi
test/bookproject5/bookproject/Procfile を書く
asgiref==3.5.2 Django==3.2 gunicorn==20.1.0 Pillow==9.1.1 python-dotenv==0.20.0 pytz==2022.1 sqlparse==0.4.2
test/bookproject5/bookproject/requirements.txt を書く
$ pip freeze で表示されたインストール済みライブラリを書く
#DEBUG = True #ALLOWED_HOSTS = [] DEBUG = False ALLOWED_HOSTS = ['tkr987test.herokuapp.com']
test/bookproject5/bookproject/bookproject/settings.py を書く
セキュリティ対策でエラー詳細表示(デバッグ)を false にする
ALLOWED_HOSTS にドメインを書く(herokuなら Setting -> Domains)
Heroku にプロジェクトをアップロードする
(venv)$ git init (venv)$ heroku git:remote -a tkr987test (venv)$ git add . (venv)$ git commit -m 'deploy' (venv)$ git push heroku master
ドメイン URL
https://tkr987test.herokuapp.com/
(ただし Heroku は画像を保存できないため Amazon S3 などを使う必要がある)