如何在heroku上部署你的Django程序

本身寫了個Django博客,最後成功的部署到了heroku上,記錄一下艱辛的過程(windows上)python

準備階段

首先得有個heroku帳號,我是用gmail註冊的git

而後就能夠按照基礎教程一步一步部署到heroku上github

https://devcenter.heroku.com/articles/getting-started-with-pythonweb

安裝好git(版本控制工具)以及heroku客戶端sql

安裝好後將heroku啓動路徑加入環境變量,接下來就能在cmd登入herokushell

$ heroku login
Enter your Heroku credentials.
Email: user@example.com                       # 帳號
Password:                                     # 密碼

接下來能夠按照官方教程下一個Django app試驗一下流程數據庫

$ git clone https://github.com/heroku/python-getting-started.git           
$ cd python-getting-started

上傳操做

上傳前須要安裝一些包才能正常使用靜態文件以及數據庫服務見下文django設置,若是隻是用官方示例app直接進行下方操做就行django

上傳操做其實和上傳到github的操做大體一致,先進入Django目錄下git init—》git add . ——》git commit -m 「first commit」windows

$ heroku create (可加一個app name)#在heroku上建立app
Creating lit-bastion-5032 in organization heroku... done, stack is cedar-14
http://lit-bastion-5032.herokuapp.com/ | https://git.heroku.com/lit-bastion-5032.git
Git remote heroku added 

$ git push heroku master          #把本地文件部署到heroku上 
$ heroku ps:scale web=1           #確保app在運轉

$ heroku open                     #打開網站

查看日誌瞭解你部署的app運轉狀況,ctrl+C退出app

$ heroku logs --tail
2014-08-15T15:17:55.780361+00:00 app[web.1]: 2014-08-15 15:17:55 [2] [INFO] Listening at: http://0.0.0.0:19585 (2)
2014-08-15T15:17:55.780488+00:00 app[web.1]: 2014-08-15 15:17:55 [2] [INFO] Using worker: sync
2014-08-15T15:17:55.830489+00:00 app[web.1]: 2014-08-15 15:17:55 [7] [INFO] Booting worker with pid: 7
2014-08-15T15:17:55.779494+00:00 app[web.1]: 2014-08-15 15:17:55 [2] [INFO] Starting gunicorn 19.0.0
2014-08-15T15:17:56.321151+00:00 heroku[web.1]: State changed from starting to up
2014-08-15T15:17:57.847806+00:00 heroku[router]: at=info method=GET path="/" host=lit-bastion-5032.herokuapp.com request_id=7fd99883-20ec-43d5-8b2d-5204351cdf2d fwd="94.174.204.242" dyno=web.1 connect=1ms service=240ms status=200 bytes=679

上傳前的準備工做

在項目根目錄下建立一個Procfile文本文件,用於定義app啓動須要執行的命令

web: gunicorn gettingstarted.wsgi --log-file -        中間的gettingstarted.wsgi需替換成項目名.wsgi,不替換會報錯找不到gettingstarted

還能夠定義一個在本地windows上運行的Procfile.windows文件

web: python manage.py runserver 0.0.0.0:5000

定義項目所依賴的環境,安裝的包

若是你使用的是Pipenv建立的虛擬環境根目錄下會有Pipfile這個文件

使用其餘方法的話須要新建一個requirements.txt文件,能夠進入虛擬環境後輸入命令pip freeze > requirement.txt寫入

這個文件讓heroku知道要安裝哪些包

beautifulsoup4==4.6.0
bs4==0.0.1
dj-database-url==0.5.0
dj-static==0.0.6
Django==2.0.7
django-toolbelt==0.0.1
gunicorn==19.9.0
Pillow==5.2.0
psycopg2==2.7.5
pytz==2018.5
static3==0.7.0
whitenoise==3.3.1
django-heroku==0.3.1
certifi==2018.4.16    
chardet==3.0.4    
idna==2.7    
requests==2.19.1    
setuptools==28.8.0
urllib3==1.23
requirement.txt

本地啓動app

$ python manage.py collectstatic           #報錯了需根據錯誤信息解決問題,上傳到heroku也有這個過程蒐集靜態文件
$ heroku local web -f Procfile.windows #本地啓動app服務

打開http://localhost:5000 訪問本地app

經過heroku上傳本地更新的內容

$ git add .
$ git commit -m "Demo"
$ git push heroku master
$ heroku open

部署後的控制檯

能夠經過heroku run命令打開控制檯

$ heroku run python manage.py shell
$ heroku run python manage.py makemigrations        
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser

Django部署的一些特別設置

安裝Gunicorn web server

$ pipenv install gunicorn

安裝django-heroku

安裝whitenoise

settings文件設置

import django_heroku
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False         #把debug模式設置成false

INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',      加到app最上面
    'django.contrib.admin',
]

MIDDLEWARE = [
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', 加到中間件
]
###########靜態文件設置###############
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) # Django用戶上傳的都叫media文件 MEDIA_URL = "/media/" # media配置,用戶上傳的文件都默認放在這個文件夾下 MEDIA_ROOT = os.path.join(BASE_DIR, "media")
#數據庫設置
if os.getenv('DATABASE_URL') is not None: import dj_database_url DATABASES['default'] = dj_database_url.config() STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' # Activate Django-Heroku. django_heroku.settings(locals())

數據庫相關

django數據庫上傳不上去

heroku用的是heroku-postgresql數據庫服務

因此部署好app後得從新寫入數據庫

相關文章
相關標籤/搜索