iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 27
0

部署
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>

就完成了


上一篇
[Day 26] Deploy
下一篇
[Day 28]
系列文
使用 Django 開發網頁系統30

尚未有邦友留言

立即登入留言