DATABASE_URL=<string>
PORT=<number>
JWT_SECRET=<string>
pnpm install -P
pnpm run -r prisma:generate
pnpm run -r prisma:migrate
graph LR
subgraph Client
client(客戶端)
end
subgraph Cloudflare
proxy(DNS Proxy)
waf{WAF}
client --> waf
waf --> proxy
end
subgraph GCP
subgraph VPC[VPC Network]
ngfw{Cloud NGFW}
proxy --> ngfw
client --x ngfw
end
subgraph CE[Compute Engine]
ngx(Nginx)
static(靜態檔案)
express(Express.js)
ngfw --> ngx
ngx --> express
ngx --> static
end
subgraph SQL[Cloud SQL]
pg[(PostgreSQL)]
express --> pg
end
end
網站架設於 Google Cloud Platform 上,使用 Compute Engine 虛擬機運行。
因雲端平台成本考量,本系統前後端皆使用同一個 Express app 提供服務。
前端頁面為動態內容,由 Express app 提供服務。
靜態內容放置於 public
資料夾,由 Nginx 提供服務。
Express app 使用 pm2 管理,確保服務持續運行。
對外伺服器由 Nginx 提供服務,並使用 Let's Encrypt 提供的 SSL 憑證進行加密。
Nginx 會將所有包含副檔名的請求導向 public
資料夾,其餘請求則導向 Express app。
Nginx 設定可參閱此連結
客戶端與伺服端之間的連線使用 Cloudflare 的 DNS Proxy 保護
原點防火牆規則僅允許來自 Cloudflare 的連線。
限速規則為 20r/10s,超出將封鎖 10s。
Cloudflare WAF 規則可參閱此連結