今天是鐵人賽的倒數第二篇,之前我們都是在本機端(Localhost)寫Django的網站,這次就要把它部屬到pythonanywhere囉! 部署完成後,我們就可以不用在本機啟動Server後才能連上網站,而是24小時想進網站都能連上。
我原先是想將Django網站部署到Heroku上,但不幸的是Heroku將在2022年11月底停止免費服務,所以我選擇改部署到PythonAnywhere上。至於PythonAnywhere詳細提供的服務就先不在本篇說明,以下開始部署我們的Django網站吧!
1. 註冊並登入 PythonAnywhere

登入PythonAnywhere的帳號,沒有的話就註冊一個吧!

成功登入後,映入眼簾的是PythonAnywhere的儀表板(Dashboard)

2. 建立python虛擬環境並安裝Django
點擊儀錶板Consoles那邊的藍色Bash按鈕。

點完按鈕後,就會進入Bash的畫面。

在Bash輸入並執行下面的指令,建立名為myproject的虛擬環境,且python版本為3.7。
1 | virtualenv --python=python3.7 myproject |

分別輸入並執行下面的指令,啟動python虛擬環境並安裝Django。
1 | source myproject/bin/activate |
1 | pip install django |

安裝完Django後,輸入並執行以下指令,離開python虛擬環境。
1 | deactivate |

3. 將 Django Project 壓縮並上傳
找到Django Project的資料夾並將它加入壓縮檔(.zip)。

回到PythonAnywhere的儀表板,點擊Files的Browse Files按鈕。

進入下面的畫面後,點擊Upload a file的按鈕,上傳我們剛剛的Django Project壓縮檔。

上傳完壓縮檔,就可以在按鈕上面看到它 (紅框部分)。

4. 到 Bash 將 Django Project 壓縮檔解壓縮
回到儀錶板,點擊藍色Bash按鈕進入Bash。

輸入以下指令把壓縮檔解壓縮。
1 | unzip myworld.zip |

5. 建立 Web apps
回到Dashboard點擊Web Apps那邊藍色的Open Web tab按鈕。

接下來點擊左邊藍色的按鈕,建立新的web app。
(免費版帳號只能建立一個web app)

點擊後,它會跳出設定domain name的提示,但因為是免費版的帳號,所以不支援這個功能,直接按下方的Next就好。

按下Next後,接下來要選擇這個web app的python框架,這邊不選Django,我們選最下面的手動設定(紅框)。

接下來選擇跟python虛擬環境一樣的python 3.7版本,然後繼續點Next。

來到這邊繼續點Next。

最後看到這個畫面就代表web app建立成功囉!

6. 設定 Web apps 的 WSGI 和 Virtualenv
在剛建立完的web app頁面往下找到Code設定裡面的WSGI configuration file,點擊進入檔案。

進到檔案裡面後,把它所有的內容修改成下面這樣並按下Save儲存。
1 | import os |

回到web app畫面往下找到Virtualenv,然後點擊下方的紅字指定python虛擬環境的路徑。

改成前面建立的python虛擬環境路徑,home/PythonAnywhere帳號/虛擬環境名稱。

改完路徑後往上滑,點綠色的按鈕重新載入web app。

點擊QiXiang.pythonanywhere.com會發現沒辦法看到正確的網頁,因為我們沒有設定Django Project允許存取的主機位址。

7. 新增 Django Project Allowed Hosts
點擊上方藍色的Files就會看到目前所有的檔案,然後點擊右邊紅色圈起來的Django Project資料夾。

繼續點擊Django Project同名資料夾進入下一層。

點擊右方Files的settings.py,進入修改檔案的畫面。

在settings.py往下找到ALLOWED_HOSTS這個List,把主機位址'PythonAnywhere帳號.pythonanywhere.com'加到List裡面。

添加完後,回到web app頁面,點擊最上方的綠色按鈕重新載入web app。

直接點擊網址還是會有錯,但我們在瀏覽器直接輸入到members頁面的網址QiXiang.pythonanywhere.com/members,就會成功看到members網頁,代表我們成功部署Django網站囉!

以上就是在
PythonAnywhere部署Django網站的流程,明天是總結整個鐵人賽的心得篇,我們明天見!