AI 開發規範

開始 coding 前先讀:1gb.us 的部署環境、技術選型、硬性限制

用途

如果 user 請你幫他開發一個要部署到 1gb.us 的專案,請先完整讀完這份規範,再根據限制挑選技術棧與架構。部署實際操作請讀 1gb.us/deploy.html

部署目標環境

項目規格
Server RAM1 GB(總量,含系統)
Server CPU共享 VPS,建議視為單核
Storage~15 GB 可用
CPU 架構linux/amd64 only
對外網路Cloudflare Tunnel,自動 HTTPS
網址https://<你的站名>.1gb.us
Server 網路IPv6-only(部分 IPv4 服務抓不到,build 請在本地做)

Container 硬性限制

限制數值意義
RAM200 MB超過直接 OOM 被 kill
CPU0.5 核避免單人吃爆
Image 上傳500 MBgzip 後大小
單檔上傳200 MB靜態站用
⚠️ 200 MB RAM 的意義
一個 Next.js dev server 起來就 300 MB+,直接出局。Node app 常見 150-300 MB,必須挑精簡的框架。

✅ 推薦技術棧(按資源由省到重排序)

🥇 首選:PocketBase + Astro(靜態)

技術RAM
前端Astro SSG(純靜態輸出)0 MB
後端 + DB + Auth + AdminPocketBase(單 Go binary,內建 SQLite)~10 MB

為什麼首選:新手最友善、RAM 最省、完全不用自己寫後端。PocketBase 自動生成 REST API + 後台管理 UI + 檔案上傳 + 認證。

部署模式:Astro build 出 dist/ → 逐檔 PUT 上傳(走靜態站流程);PocketBase 另外包 Docker image 部署到另一個子域。前端直接打 PocketBase 的 API。

適合:CMS、上稿後台、會員系統、表單收集、blog、todo、任何 CRUD。

🥈 次選:Hono + Drizzle + SQLite + HTMX

技術RAM
後端 runtimeNode 20 + Hono~40 MB
ORMDrizzle ORM(included)
DBbetter-sqlite3 → /data/app.db0 額外
前端互動HTMX + Alpine.js(CDN 引入)0 MB
樣式Tailwind CDN0 MB
模板Hono JSX 或 server-side HTML string0 MB

為什麼:TypeScript 全棧、要自己寫後端邏輯時的最省組合。HTMX 讓後端 return HTML 就能做 SPA 體驗,不用寫前端 JS。

適合:要自訂業務邏輯、想學 TS 全棧。

🥉 第三:FastAPI + SQLite + HTMX(Python)

技術RAM
後端FastAPI + uvicorn~60 MB
DBSQLModel 或 sqlite3 → /data/app.db0 額外
前端Jinja2 + HTMX + Tailwind CDN0 MB

為什麼:Python 生態對 AI 最友善、自動生成 Swagger docs。

適合:Python 老手、AI/ML 相關、需要 API docs。

❌ 禁用技術

禁用原因
Next.js / Nuxt啟動 200-400 MB,跑不起來
Laravelphp-fpm 150 MB+,且 AI 生成品質差
Django~120 MB,太肥
Rails200 MB+
Spring Boot400 MB+,直接出局
自帶 Postgres / MySQL / MongoDB container200-400 MB,禁止
Redis container30 MB,請用 SQLite 當 cache/queue
Elasticsearch / Meilisearch太吃 RAM,請用 SQLite FTS5

資料庫規範

選項狀態說明
SQLite(檔案存 /data/✅ 推薦零額外 RAM、零設定、重部署不掉資料
外部 DB(Supabase / Neon / PlanetScale / Turso)✅ 可用連線字串透過環境變數傳入
自己帶 DB container❌ 禁止RAM 不夠

SQLite 最佳實踐

對外網路(呼叫第三方 API)

Server 是 IPv6-only,但我們在基礎設施層裝了 Cloudflare WARP + privoxy,每個 container 在啟動時會自動注入這些環境變數:

HTTP_PROXY=http://172.20.0.1:8888
HTTPS_PROXY=http://172.20.0.1:8888
NO_PROXY=localhost,127.0.0.1,.1gb.us

所以 container 裡的 app 可以直接呼叫 IPv4-only 的外部 API(OpenAI、Google Maps、天氣 API 等),不用做任何特殊處理。

哪些 HTTP client 會自動吃 proxy env?

語言 / library自動吃備註
Node:fetch(undici)✅ 新版Node 20+
Node:axiosgotnode-fetch
Python:requestshttpxurllib
Go:net/http預設讀 HTTP_PROXY env
Ruby:Net::HTTPhttparty
PHP:curlGuzzleGuzzle 要設 proxy config
Java:HttpClient⚠️要用 ProxySelector.of(...) 或 JVM 旗標
Rust:reqwest⚠️Client::builder().proxy(...)
自己用 raw socket不吃 HTTP proxy,建議改走 HTTP client

測試 container 外連

# 從任何 container 內執行
curl https://api.ipify.org
# 回傳的 IPv4 會是 WARP 的出口 IP(例如 104.28.x.x)
注意NO_PROXY 包含 .1gb.us 和 localhost,表示打 1gb.us 內部其他服務(例如另一個 user 的 container)不走 proxy,保持內網低延遲。

持久化資料夾:/data/

Container 內寫到 /data/ 的檔案會 mount 到 host 上的 volume,重新部署不會掉。

前端建議(盡量零 build / 零 bundle)

用途推薦
頁面結構Server-side render(Hono JSX、Jinja2、PocketBase hook)或 Astro SSG
互動HTMX(後端返 HTML 片段)
局部狀態Alpine.js(15 KB,宣告式)
樣式Tailwind CDNhttps://cdn.tailwindcss.com,零 build)
iconHeroicons / Lucide(SVG inline)
複雜互動Svelte 或 Vue 靜態 bundle(若真的需要)

開發時要注意的事

  1. Docker image 必須 linux/amd64。ARM Mac 請用 docker build --platform linux/amd64
  2. Build 在本地做,不要在 server 上 build。Server 是 IPv6-only,部分 registry 拉不到。
  3. 用 Alpine-based imagenode:20-alpinepython:3.12-alpinealpine:3.19,image 小 deploy 快。
  4. app 一定要 0.0.0.0,不是 127.0.0.1,不然 container 外連不進來。
  5. exposed port 要跟 deploy JSON 的 port 對齊
  6. 敏感資料走環境變數,不要寫死在 image 裡。
  7. log 寫 stdout,方便 docker logs 看。
  8. 健康檢查:提供 /health endpoint 回 200。

典型開發流程

  1. 跟 user 確認需求、選定技術棧(符合上方限制)
  2. 本地開發,資料庫指向 ./data/app.db(或設環境變數)
  3. 寫好 Dockerfile,本地 docker build --platform linux/amd64 -t test .
  4. 本地 docker run -p 3000:3000 -v $PWD/data:/data test 測通
  5. 跟 user 確認要部署時,讀 /deploy.html 執行部署

AI 開發者小提醒

開發完成後 → 部署指南 | ← 回到 1gb.us