iT邦幫忙

2021 iThome 鐵人賽

DAY 12
2

如果你有自己的固定IP,可以在本機進行部署,或著使用免費版本的Heroku Platform在雲端建立你的伺服器,方法沒有一定,今天進行Python版本的建置流程

套件安裝

這邊建立你的Heroku Free Account

安裝Heroku CLI

下載並啟用範例專案

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

如果你因為設定錯了參數,想要重新使用已經創建的App,可以使用以下指令設定遠端專案

heroku git:remote -a [the-app-name]

建立第一個Heroku App

建立一個新App,並將當前的專案推送至Heroku

heroku create
git push heroku main

建置完成的App,在未啟用前處於壓縮的狀態(slug),將其部屬到節點(dynos),才能啟用App,使用以下指令分配一個dynos給App:

heroku ps:scale web=1

完成資源分配後,你的App就能夠使用分配到的資源開始運作,使用以下指令測試App:

heroku open

檢視Log:

heroku logs --tail

Procfile

Procfile,是App的啟動指令,格式為

<process type>: <command>
# 測試App中的Procfile為
web: gunicorn gettingstarted.wsgi

只有web類型的程序能夠進行HTTP傳輸,其他類型的則無法從Heroku的Router上接收傳送資料

requirements環境套件

如果專案根目錄存在requirements.txt,Heroku將會判斷專案為Python語言,同時在部署時Heroku會讀取內部的內容安裝指定的套件

如果你沒有虛擬環境,或虛擬環境有太多不相干的套件,可以使用pipreqs產生專案的requirements.txt

pip install pipreqs
pipreqs /path/to/project

本機運行測試

在部署上去之前,可以在個人電腦進行模擬測試,以避免上船上去後發生編譯錯誤或其他問題,由於是本機運作,如果系統為Windows需要設定專用的Procfile:

# Procfile.windows
python manage.py collectstatic

#以此指令在Windows上啟動本機模式
heroku local web -f Procfile.windows

#以此指令在Unix系統上執行本機模式
heroku local web

使用瀏覽器打開http://localhost:5000,如果正常,應該可以看到App產生的網頁

將修改完成的新版本上傳到雲端

Heroku使用與Git同樣的格式進行版本控管,以下為範例

修改requirements.txt,新增reequests套件使用

在hello/views.py加入import requests,並修改index函式為:

def index(request):
    r = requests.get('http://httpbin.org/status/418')
    print(r.text)
    return HttpResponse('<pre>' + r.text + '</pre>')

完成本機測試後,與Git相同

git add . 
git commit -m "new Index"

部署

git push heroku main

開啟

heroku open

設定環境變數

Heroku鼓勵使用config vars作為變數的儲存方式,可以通過網頁的控制台頁籤中的Setting-Config Vars進行設定,或使用CLI

#顯示專案環境變數
heroku config

#取得特定的變數值
heroku config:get [Key]

#設定環境變數
heroku config:set [Key]=[Val]

#移除環境變數
heroku config:unset [Key]

其他功能

插件執行命令、開啟Bash

今天簡單的過一遍基礎的Heroku使用方式,明天進入將Line機器人部署的教學


上一篇
day[11] Hello Line - 第一個Line訊息
下一篇
[day13] 設定gunicorn Logging
系列文
openAPI 對接實務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言