前往
大廳
主題

【個人紀錄】將Next.js+Flask應用程式佈署至Deta.space。

Treeboy | 2023-10-01 18:51:21 | 巴幣 1106 | 人氣 407

Next.js是React的前端框架,被設計成不需要太多設定就可以打造高效能的網頁,學習門檻低;Flask是熱門的輕量級Python web框架,核心理念是簡單又可以擴充更多第三方框架;Deta.space是雲端佈署平台。

後端可以使用Flask與FastAPI等Python後端框架,未來會做到資料視覺化的專案,所以Python是不可缺的程式語言,Vercel官方有說明如何將Next.js + Python應用程式佈署至Vercel,不過我這次打算要佈署至Deta.space,因為蠻新的,本人想使用看看。

建立專案

這是Next.js與Flask的專案,我是依照Vercel提供的文件編寫的,將Python程式包進Next.js專案內,其實就是在專案裡面建立另一個路徑。

next.config.js需要編寫下列的程式碼,
這是設置next.js去尋找檔案位置的變數,
裡面的api是next.js專案內的api檔案。


requirements.txt需要安裝這三個重要模組
flask_cors是跨域請求的模組,需要CORS才可以讓next.js讀取到flask的請求。

flask後端,
設置路徑為/api

next.js前端,參考網路教學與網誌的程式碼改寫的。
fetch("/next-flask/api")語法是用來接收專案內的flask發出的json api路徑。

如果佈署成功了,在網址後方輸入python後端的網址,可以發現flask發出的json。


上傳至Deta.space


第一步先安裝CLI
再cmd輸入
iwr https://deta.space/assets/space-cli.ps1 -useb | iex

第二步輸入space login登入space帳號,
它是使用token,需要到官網setting生成API token

生成token的settings


要叫出settings可以使用下方的搜尋欄

點下去往下滑就可以找到了

輸入成功之後
第三步再輸入spaec new創建Spacefile檔與.spaceignore


Spacefile會自動尋找語言並自動生成micros,
Spacefile是屬於yaml檔,告訴雲端平台你要佈署的程式的內容。
micros會生成name、src與engine這三個設定,如果缺一個就無法上傳到雲端。

micros可以設定5個,我只設置前端與後端的micros。

這段是用來生執行Next.js前端
micros:
  - name: nextjs-app
    src: ./next-flask
    engine: next
    primary: true

這段是用來生執行python後端
  - name: next-flask
    src: ./next-flask/api
    engine: python3.9
    run: gunicorn main:app
    public_routes:
      - "/*"
      - "/*/*"

以下是micros的設定
v: 0版本號,不能亂改。
name: micros的名稱
src: 執行檔的路徑
engine: 要運行的程式語言類型
primary:向Spacefile說明這個micro是要先執行的,
public_routes:內容公開的權限
run:要額外執行的語法

還有更多設定可以在該網頁找到

註:如果你是用Python,必須要額外加上requirements.txt,
讓雲端自行下載你專案需要用到的套件。

第四步輸入space push將程式打包上傳至Deta

佈署成功之後就會生成網址

成功
未來如果實作了數據分析的作品,可以直接使用next.js渲染網頁,
我覺得蠻實用的,安全性與效能也會提升很多~

創作回應

ㄈㄓ的加班生活
ㄊㄓ
2023-10-04 21:49:10
Treeboy
https://media.tenor.com/mLpvCSSE5wQAAAAC/middle-finger-ronnie.gif
2023-10-04 21:50:04
卡丘☆(ˊ● ω ●ˋ)★
有中文版的嗎?
2023-10-04 22:05:08

更多創作