[Django] Deploy on Heroku

程式語言:Python
Package:Django, psycopg2, gunicorn, dj-database-url, dj-static
官方網站
psycopg2把 PostgreSQL 與 Python 銜接起來的套件,使 Python 可以使用 PostgreSQL
GunicornWSGI server,針對 Unix 的 WSGI HTTP Server
dj-database-url可以透過 URL 設定 database 所在,使在 heroku 上可以設定 database URL 來源
dj-static靜態資源檔案的服務,透過此服務使的在 heroku 上可以讀取靜態資源檔案,例:static, media ...

簡介:將 Django deploy 到 Heorku

前置動作


安裝套件

pip install dj-database-url gunicorn dj-static

建立必需檔案(與 manage.py 同層)


requirements.txt
讓 Heroku 安裝需求套件的文件
pip freeze > requirements.txt
由於 Heroku 使用 PostgreSQL 資料庫,需加上 psycopg2,版本依需求填寫
檔案內容範例如下 (pypiwin32 記得去除)
Django==1.8.5
dj-database-url==0.4.1
gunicorn==19.6.0
dj-static==0.0.6
static3==0.7.0
psycopg2==2.6.1

Procfile
告訴 Heroku 要執行什麼指令來啟動 app
web: gunicorn --pythonpath appName(任意) appName.wsgi
< process_type >: < command >
這一行表示:
< process_type > -- 啟用web應用
< command > -- Gunicorn 是原生支援 Django 的 Python WSGI Server,透過指令來啟動網站

runtime.txt
讓 Heroku 知道要用哪一個版本的 Python,新增 runtime.txt,內容如下,依需求版本填寫
python-3.5.2

Django 必要設定


settings.py
修正為以下幾行
import dj_database_url

ALLOWED_HOSTS = ['*']

# Update database configuration with $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')

wsgi.py
修正為以下幾行
try:
    from dj_static import Cling, MediaCling
    application = Cling(get_wsgi_application())
    #有設定 media 才需此行,不然會有問題
    #application = Cling(MediaCling(get_wsgi_application()))
except:
    pass

Git 設定

因 Heroku 是利用 git 上傳至伺服器,需設定一些參數
git 指令參考

.gitignore
請依需求設定,範例如下
*.pyc
__pycache__
staticfiles
*.sqlite3

建立 git
git init
git add .
git commit

Heroku 操作


登入,push 前需登入
heroku login

建立新 Web
不加 webName 則會自動產生,webName 不得與他人重名
限定為小寫、數字、"-"
heroku create webName

已存在 Apps
heroku apps

git remote 加入 heroku
heroku git:remote -a webName

檢查 git 已存在 remote
git remote -v

必做,確保未來在 Heroku 執行任何指令時,都是使用到部署專用的設定檔
heroku config:set DJANGO_SETTINGS_MODULE=appName.production_settings

上傳至 Heroku 伺服器
git push heroku master

啟動/關閉 伺服器
# 啟動寫法
heroku ps:scale web=1
# 關閉寫法
heroku ps:scale web=0

在 Heroku 伺服器執行指令
heroku run Cmd

初始化資料庫
heroku run python manage.py migrate

建立超級使用者
heroku run python manage.py createsuperuser

開啟瀏覽器觀看網站
網址可任意分享
heroku open

更新網站
git push heroku master

觀看網站執行的紀錄
heroku logs
#連續模式
heroku logs --tail

目前正在執行的 dyno
heroku ps

連至網站的 CLI
heroku run bash

重啟網站
訣竅:可重啟,再配合 logs 使用
heroku restart

參考

Django Girls 學習指南
[Django|Python] 部署至Heroku (2)

留言