Skip to content

twtrubiks/Deploying_Django_To_Heroku_Tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deploying_Django_To_Heroku_Tutorial

Deploying a Django App To Heroku Tutorial

後端有一個自動爬蟲的程式去抓圖片,可參考 auto_crawler_ptt_beauty_image

本專案將教大家如何將自己的 Django 佈署到 Heroku

Heroku 免費版本

  • 可以創造 5個 app。
  • 24小時一定要休息6小時的規定。
  • 支援很多種程式語言。
  • 有SSL ( https ) 。

更多說明請參考 Heroku

詳細的步驟可參考 Deploying-Flask-To-Heroku

下面將只介紹佈署 Django 要注意的步驟。

教學

我的 project_name 為 ptt_beauty_images

設定 Procfile

web: gunicorn ptt_beauty_images.wsgi

更多說明請參考

https://devcenter.heroku.com/articles/django-app-configuration#the-basics

建議使用 WhiteNoise 佈署

設定 Collectstatic

Disabling Collectstatic

heroku config:set DISABLE_COLLECTSTATIC=1

可參考 https://devcenter.heroku.com/articles/django-assets#collectstatic-during-builds

pip3 install whitenoise

這樣靜態檔案才會正常顯示.

詳細說明可參考 Using WhiteNoise with Django

settings.py 中加入以下東西,

設定 ALLOWED_HOSTS

ALLOWED_HOSTS = ['*']

記得把 DEBUG 修改為 False

DEBUG = False

設定 STATIC_ROOT

STATIC_ROOT = BASE_DIR / "staticfiles"

設定 WhiteNoise 到 MIDDLEWARE

MIDDLEWARE = [
    # ...
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    # ...
]

Add compression

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

最後執行 python3 manage.py collectstatic

如果沒有任何錯誤, 再將產生出來的東西一起 push 到 Heroku 上.

設定 DATABASE

settings.py

我使用 Heroku Postgres ,

詳細教學可參考 如何在 heroku 上使用 database

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DATABASE_NAME'),
        'USER': os.environ.get('DATABASE_USER'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
        'HOST': os.environ.get('DATABASE_HOST'),
        'PORT': os.environ.get('DATABASE_PORT'),
    }
}

請在自己 Heroku 的 Config Variables 設定 DATABASE 連線字串

Django multiple-databases

順便介紹在 Django 中的 multiple-databases,

使用方法, 將 settings.py 裡的 DATABASES 修改成如下

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DATABASE_NAME'),
        'USER': os.environ.get('DATABASE_USER'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
        'HOST': os.environ.get('DATABASE_HOST'),
        'PORT': os.environ.get('DATABASE_PORT'),
    },
    'db2': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DATABASE_NAME_2'),
        'USER': os.environ.get('DATABASE_USER_2'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD_2'),
        'HOST': os.environ.get('DATABASE_HOST_2'),
        'PORT': os.environ.get('DATABASE_PORT_2'),
    }
}

這樣就代表你有兩個 DATABASES,更多資料可參考 Django multi-db

如果要指定 DATABASES 也非常容易,

假設我今天要用 'default' 這個 DB ,可以寫這樣

Image.objects.using('default').all()

假設我今天要用 'db2' 這個 DB,可以寫這樣

Image.objects.using('db2').all()

有沒有發現,其實就是 using('database name') 這樣,非常簡單

更多資料可參考 Django manually-selecting-a-database

更新 heroku stack 指令

指令如下

heroku stack:set heroku-22 -a <app name>

之後再 commit push 一次就會自動 migrate 到新的 stack.

執行環境

  • Python 3.9

Reference

Donation

文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡:laughing:

alt tag

贊助者付款

License

MIT license

About

Deploying a Django App To Heroku Tutorial

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published