iT邦幫忙

2021 iThome 鐵人賽

DAY 27
1
自我挑戰組

Python 30天自我挑戰系列 第 27

Day27 - 部屬到正式環境 (2)

今天的實作內容主要根據教學網站進行。

將應用程式安裝到Heroku

環境設定

Heroku主要利用四個檔案來設定環境:

  • runtime.txt
  • requirements.txt
  • Procfile
  • wsgi.py

接下來我將逐一設定這些檔案。

runtime.txt

用來標示使用的程式語言運行環境與版本。

新增方法:在專案根目錄 (和manage.py同一層級)新增runtime.txt,其中內容如下:

python-3.9.7

要注意的是Heroku並不是所有版本都支援,故需要先去Heroku網站確認Python的支援版本,不然在推送到Heroku時會發生問題。

Procfile

同樣在根目錄下新增Procfile檔案,內容如下:

web: gunicorn bookhelper.wsgi --log-file -

gunicorn為Heroku推薦的web application server,此段宣告gunicorn使用bookhelper.wsgi作為組態設定。

requirements.txt

用來宣告要安裝的Python套件。

需要安裝的Python套件可以使用以下指令,將開發環境有安裝的套件列出:

pip freeze > requirements.txt

輸出的檔案一樣放在根目錄,Heroku會根據此檔案進行安裝,但要注意的是如果是自己私人開發未上傳到PYPI的套件 (如Day17內容)就無法使用。

除了開發階段已安裝的套件外,因應正式環境的環境設置,還有一些額外的套件需要安裝。

實際requirement.txt內容:

dj-database-url==0.5.0
Django==3.2.7
django-allauth==0.45.0
django-q==1.3.9
gunicorn==20.1.0
psycopg2==2.9.1
whitenoise==5.3.0
  • gunicorn

  • dj-database.url
    在開發期間,django的settings.py中我們使用local資料庫連線設定,當上傳到正式環境時,Heroku以add-on透過URL的方式提供我們使用。

Heroku建議使用此套件以解析資料庫使用的URL。

settings.py可以調整如下:

# Heroku: Update database configuration from $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
  • psycopg2
    Heroku的免費方案中提供的資料庫為Postgres,故需要安裝對應的套件。

  • WhiteNoise
    用來提供Python web app的靜態檔案。(如果透過Django提供靜態檔案的話效能會較差)

settings.py要配合做以下設定:

MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

因為時間因素,今天內容就先更新到這邊,明天再接續後面的流程。


上一篇
Day26 - 部屬到正式環境 (1)
下一篇
Day28 - 部屬到正式環境 (3)
系列文
Python 30天自我挑戰30

尚未有邦友留言

立即登入留言