部署
Heroku 是一個雲端主機,可以把django 部屬上去。 (也有其他語言的)
https://www.heroku.com/
會用這個是因為他是免費主機,但是如果一段時間沒有請求會睡覺
https://devcenter.heroku.com/articles/free-dyno-hours#dyno-sleeping
在下一個請求會比較慢回應
價錢
https://www.heroku.com/pricing
先註冊一個帳號
建立新的app ,名字不能重複
先安裝 heroku-cli 以 windows 為例
https://devcenter.heroku.com/articles/heroku-cli#windows
參考
https://devcenter.heroku.com/articles/deploying-python
https://devcenter.heroku.com/articles/django-app-configuration
whitenoise 處理 static file (css, js) 因為會執行 colectstatic 會把所有static 放到一個資料下,由另一個服務處理
如果static file 沒有出現 代表 靜態檔案處理有問題
另外 heroku是不允許上傳檔案 如果要得要傳到其他儲存空間使用 例如amazon-s3
http://django-storages.readthedocs.io/en/latest/
gunicorn: python server
dj-database-url: 資料庫處理
安裝3個套件
pip install gunicorn dj-database-url whitenoise
要放在最下面,或是在新增一個productionSettings.py
DEBUG = False, 我們不希望發生錯誤訊息 讓使用者看到 所以改成False
shop/settings.py
...
MIDDLEWARE = [
...
'whitenoise.middleware.WhiteNoiseMiddleware',
]
...
if 'dyno' in os.environ:
DEBUG = False
ALLOWED_HOSTS = ['*']
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Procfile
web: gunicorn \<project_name>.wsgi --log-file -
pip freeze 產生所有套件檔案
pip freeze > requirements.txt
Ex.
dj-database-url==0.4.2
Django==2.0.1
gunicorn==19.7.1
psycopg2==2.7.3.2
pytz==2017.3
whitenoise==3.3.1
.gitignore
.idea/*
db.sqlite3
*.pyc
deploy
https://devcenter.heroku.com/articles/git
heroku login
git init
heroku git:remote -a \<heroku_app_name>
git add .
git commit -m "first"
git push -f heroku master
看到沒有錯誤
可以輸入
heroku open
就可以看到完成了
做 migrate
heroku run python3 manage.py migrate --app \<heroku_app_name>
create superuser
heroku run python3 manage.py createsuperuser --app \<heroku_app_name>
就完成了