--- tags: Django --- 將專案發佈到 pythonanywhere === pythonanywhere 是一家提供 Python 主機代管服務的公司。主機代管的意思是,你不需要自己準備機器,不需要自己灌作業系統,不需要自己租網路,你只需要跟代管公司租用服務,就可以讓你自己的專案在網路上線提供服務。一般來說,可以依據網路流量、需要的硬碟儲存空間、記憶體容量、CPU運算資源等等,選擇合適自己(荷包)的租用方案。 幸運的是,pythonanywhere 提供了免費方案,僅提供一些有限的功能、少量的 CPU 運算以及網路頻寬讓我們試用。 ## 申請 pythonanywhere 帳號 - 先至 pythonanywhere 官網 [https://www.pythonanywhere.com/](https://www.pythonanywhere.com/) <kbd></kbd> 點選右上角的「__Pricing & Signup__」 - 接著在「Plans and pricing」頁面中間點按「__Create a Beginner account__」按鈕 <kbd></kbd> - 填寫註冊表單 <kbd></kbd> 填完所有欄位後,按下「__Register__」鈕送出申請。 - 若表單送出後沒有錯誤訊息,接下來請到剛才在註冊表單填上的信箱收取確認信,並點按信件中的確認信箱連結 <kbd></kbd> --- ## 建立網頁應用程式(Web App) 到 [https://www.pythonanywhere.com/login/](https://www.pythonanywhere.com/login/) 登入 pythonanywhere。初次登入時會顯示一些小提示,按完就好了。接著就會進到你的儀表板(Dashboard)頁面。 <kbd></kbd> 在這個頁面上可以看到你的租用方案的狀況,包含 CPU 使用概況、硬碟空間,然後在下方分成 4 個區塊: - Consoles 中控臺 使用這個功能會在網頁上開啟一個終端機的畫面,讓你連到虛擬機裡,透過指令進行一些操作。 - Files 檔案 可以檢視、刪除、上傳檔案到虛擬機。 - Notebooks 免費方案不提供此功能。這是 Python 裡的一套執行環境,叫 Jupyter Notebook,可以透過網頁界面讓你寫 python 程式,另外有些 python 的資料分析套件在統計完資料後要繪製圖表,也需要在 Jupyter Notebook 環境下才能執行。不過我們的用 django 開發的專案並不需要這東西,所以不能用也沒什麼影響。 - Web Apps 網頁應用程式 我們的 django 專案要上線的話,要在這邊進行設定。但是免費版的方案只允許建立一個網頁應用程式而已。如果想上線多個專案,一個方法是升級為付費會員,另一個,嗯,多申請幾個帳號 ... (噓....) ### 新增網頁應用程式 - 點按 Web Apps 區塊下方的「__Open Web tab__」按鈕,切換到網頁應用程式的頁面。 <kbd></kbd> 點按左方「__Add a new web app__」按鈕 - 設定提供服務的主機網域名稱 <kbd></kbd> 免費方案不提供自訂網域名稱的選項,主機網域名稱被限定為「你的帳號名稱.pythonanywhere.com. 」,例如:我的帳號名稱是 `idreamer` 所以主機名稱就是 `idreamer.pythonanywhere.com`。 接著按「__Next__」切換到下一步。 - 選擇欲使用的 Python 網頁框架 <kbd></kbd> 當然是選第一個「__Django__」囉!點按「__Django__」連結就會切換到下一步,不需要按「Next」 - 選擇 Python 版本 <kbd></kbd> 選擇跟我們與本書示範時相同的版本「__Python 3.7__ (Django 2.1)」 - 建立 Django 專案 <kbd></kbd> 這個頁面要建立一個新的 Django 專案。別擔心,先照它的預設值建一個新專案,等等再上傳我們已經寫好的專案上來就好。 最後點按「__Next__」按鈕,然後就會開始建立網頁應用程式了。 - 完成 <kbd></kbd> 看到這個畫面表示網頁應用程式已經建好了。頁面中間有一段訊息說著要我們至少每 3 個月要登入一次,才能讓剛才建立的網頁應用程式持續提供服務。 你可以點按畫面中間那個「你的帳號.pythonanywhere.com」的連結來存取網頁應用程式。然後應該會看到 Django 專案的預設畫面: <kbd></kbd> --- ## 上傳我們已經寫好的專案 雖然 pythonanywhere 有提供 Files 的頁面可以上傳檔案,但是沒辦法將整個專案的資料夾一次上傳。有兩種方式解決這個問題: 1. 將專案壓縮成一個 zip 檔,上傳後再進主控臺以「`unzip 壓縮檔檔名.zip`」來解壓縮 2. 用先前教過的,將你的專案上傳到 github 上,然後進主控臺以「`git clone 你的專案網址`」將專案複製到 pythonanywhere 的虛擬機。 建議使用第二種,因為你在你的電腦上修改完程式碼後,可以透過 Visual Studio Code 的界面直接提交版本,也可以上傳到遠端(github),然後只要登入 pythonanywhere 主控臺,用「cd 專案資料夾」切換到專案資料夾後,再以 `git pull` 指令將後續的變更下載下來就可以了。 在這邊以先前上傳到 github 的線上投票專案為例,專案網址為 [https://github.com/dcsh-dreamer/poll](https://github.com/dcsh-dreamer/poll) - 切換到 Console 頁面 <kbd></kbd> 點選 pythonanywhere 畫面右上方的「__Consoles__」連結,切換到主控臺頁面。 - 開啟主控臺的連線 <kbd></kbd> 在「__Start a new console__」下,請點按 Other 後方的「__Bash__」來開啟主控臺連線。 - 複製 github 上的專案 <kbd></kbd> 等到頁面出現一大塊黑色的區塊,並出現「時間 ~ $」的提示符號後,表示主控臺已經連上,可以開始下命令了。 接著請以 `git clone 你的專案網址` 將 github 上的專案複製過來,例: ``` bash git clone https://github.com/dcsh-dreamer/poll ``` <kbd></kbd> ### 修改網頁應用程式(Web App)設定 從中控臺頁面按頁面右上方的「三」來展開下拉選單,再從下拉選單中點按「__Web__」切換到網頁應用程式頁面。 <kbd></kbd> 將網頁應用程式頁面往下捲動到「__Code:__」區,將執行的專案抽換成我們後來上傳的: <kbd></kbd> - 修改專案路徑 先把 Source Code 後的路徑連結點按一下可以編輯它。將其變更為我們上傳的專案的路徑。例:原本的預設的是「`/home/idreamer/mysite`」,改成「`/home/idreamer/poll`」 <kbd></kbd> - 修改 WSGI 的設定 我們先前在開發專案的過程中,要測試專案的時候,都是透過底下的指令讓 Django 內建的網頁伺服器跑起來執行我們的專案: ``` bash python manage.py runserver 0.0.0.0:80 ``` 但是 pythonanywhere 上執行專案的方式跟我們在本機開發過程中的方式不太一樣,它的網頁伺服器是專門的網頁伺服器程式 nginx,再透過 uWSGI 介面來執行我們的專案,因此需要修改 WSGI 的設定檔來告訴 nginx 如何執行我們的專案。 點按 WSGI configuration file: 後方的 「`/var/www/你的帳號_pythonanywhere_com_wsgi.py`」連結來修改 WSGI 的設定檔。 <kbd></kbd> 要修改的地方有兩個: - __第 12 行__,修改 `project_home`,將其設定為我們的專案的資料夾路徑,例: ```` python project_home = '/home/idreamer/poll' ```` - __第 17 行__,指定 django 專案的設定模組在哪,改成 `專案名稱.settings`即可,例: ```` python os.environ['DJANGO_SETTINGS_MODULE'] = 'poll.settings' ```` 修改完畢後,點按右上方的「__Save__」按鈕儲存設定。 - 載入新設定值 儲存 WSGI 設定檔後,要讓 nginx 重新載入設定檔才會生效。點按 __Save__ 鈕右邊第二顆看起來像轉圈圈的按鈕(它叫 Reload)。 接下來用瀏覽器重新訪問 `你的帳號.pythonanywhere.com` 網址,應該就會看到我們的網站上線了。 <kbd></kbd>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up