WeHelp
免費使用 Vercel 服務架設 Python/Flask 網站後端應用 demo
2024-04-19 12:20:37
近年由於 Heroku 收費政策,已不再有免費的伺服器可供使用。對於學習寫程式的大家,如果要無本部署後端 App 實在是蠻困擾的,畢竟放在 GitHub 上 Hosting 並沒有辦法做後端至前端的渲染、安裝套件等等動態網站等大人的遊戲。切版的靜態網站滿足不了大家想做滿滿功能網站的學習之心! 本文根據 [彭彭老師的影片](https://www.youtube.com/watch?v=wWRYBUzEG6E&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=25),試著改用 Vercel 的免費空間,比較使用 Heroku 與 Vercel 的差異。 ## ㄧ樣的地方:`requirements.txt` - Vercel 也需要 `requirements.txt`,裡頭可標注需求套件如 flask 版本 - 以官方範例檔為例,基本上是 Flask==2.3,但其實 ≥= 2 應該都可以 ## 不ㄧ樣的地方:vercel.json、刪除 Procfile、增添 /api 資料夾 - Vercel 不需要 `Procfile` - Vercel 需要一個 `vercel.json` - 執行檔以 index.py 為例,範例檔預設路徑在 `api/` 路徑資料夾中 ``` { "rewrites": [ { "source": "/(.*)", "destination": "/api/index" } ] } ``` - (optional 可選) 建立一個 Pipfile 設定版本 (否則撰文目前 Vercel 預設是以 python 3.9 執行) ``` [[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] flask = "2.3.2" [requires] python_version = "3.11.3" ``` - 新增一個 `.gitignore` 避免上傳一些敏感或不需要的本地部署資料 ``` .vercel *.log *.pyc __pycache__ # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ ``` 像是 `.env` 這種常常拿來存放帳密、密鑰,push 到 GitHub 就倒大楣囉,算常態。 `.vercel` 則是一些連結到 vercel 部署後會生成的東西,project.json 裡頭是你的專案 ID 與組織 / 使用者 ID,也算是一種隱私資訊,不應該被 git 追蹤呦。 ## 關於 git ![image](wehelp-storage://3bb10cd3bde9d2708f3226880cc65921) 與 Heroku 要下載專用軟體,並可直接推上不同,Vercel 有可以一鍵同步部署 GitHub 的方便功能。因此,可以先推到 GitHub 上去連結即可。例如先建立一個叫 flask 的 repo (大概就類似專案 repository 儲存庫),通常全稱就是 你的使用者名稱 ID /repo,如 steward379/flask 接著就是一些常見的 git 行為啦。如果遠端 GitHub 已經建好與 root 資料夾同名的 repo ,也安裝好了 git (在 mac 上是 `brew install git` 先以 homebrew 底層套件安裝工具安裝好,基本上有了因為很多人也是用這個按安裝 python 等等),本地也設定好權限就可已使用了。可以參考這篇文章做權限設定。 `git init` 初始化專案 `git add .` 將所有檔案除 `.gitignore` 提到的以外全部上 stage `git commit -m "這邊打你想放的資訊"` 這裡就是你的艦長日記,分條列點告訴大家你做了什麼改動,通常帶有標題 以上就可以在你的本地 git 做出一條捷運線啦!這裡 HackMD 大神朋友推薦使用 fork 這套 GUI 軟體做版本管理(版控)視覺化。⚠️ GitHub 是遠端存放檔案的地方,跟 Git 是不同的!Git 本身是一種版本控制工具,也同時存在你的本地端 (local),但你需要推到遠端伺服器 (remote) 去才能去做後續的部署網站,因為 GitHub 只提供簡單的 hosting (代管靜態網站) 功能,對於我們所需的動態網站是不夠的。 到這裡如果直接 `git push` ,git 會不知道要推到哪裡去….所以必須 `git remote add origin <這邊再填入 SSH 或 https 網址>` 如 `git remote add origin https://github.com/steward379/flask` `git push -u origin master` 就可以推到預設的 master 這個 branch (分支),加了 -u 設定預設值以後就可以直接打 git push 雖然也可以不用 origin 這個遠端儲存庫名,但「起源/源頭」這個命名算是一般的慣例。 push 成功之後去你的儲存庫網址看看有沒有更新:`[https://github.com/steward379/flask](https://github.com/steward379/flask)`,有的話就可以準備 Vercel 了 ## Vercel 使用 Vercel 使用真是簡單到不行,首先可以選擇用途,我之前是選 Hobby 但大家可以選專業一些的。 在右上的 Add new… 下拉選擇 Project,並在 Import Git Repository 找到你剛才的 repo: ![image](wehelp-storage://2d385ac010f37b5fd85c6f8c27646d31) 例如我的是 Flask 接著填寫表格,Project Name 隨你取,Framework Preset 先不用動,留在Other (他預設是用 JS/TS) ,Root directory 也不用動。其餘基本上都不要管。直接 Deploy! 等待勾勾完成,就可以點網址看成果囉。 如果有錯也會跳錯誤訊息提醒你。 ![image](wehelp-storage://c84d7f5b7fb096c0353b6c9e729b717b) 最後值得一提的是,其實官方針對 python 等非 js 語言有範例檔案跟文件,都可以多多參考。 使用以下指令就可以在本地安裝 vercel 並測試了。 ``` npm i -g vercel vercel dev ``` 官方的 flask 範例程式碼,基本上我就是照他的為主 [examples/python/flask at main · vercel/examples · GitHub](https://github.com/vercel/examples/tree/main/python) 官方提供的友善範例網站樣板 [Python Hello World — Vercel](https://vercel.com/templates/python/python-hello-world) 對,這是文件 [Using the Python Runtime with Serverless Functions | Vercel Docs](https://vercel.com/docs/functions/runtimes/python) 我做的在這 [flask-x21v.vercel.app](https://flask-x21v.vercel.app/) 感謝閱讀,續集請看 🌞[實戰 Vercel 服務架設 Flask 網站應用撞牆細節](https://wehelp.tw/topic/6316628274839552)