ai-lab.oao.tw / sites guide
OpenAI Sites 怎麼用
Field note
把網站當成可以被 agent 持續更新的部署目標
最後更新:2026-07-22
這不是官方文件摘要,而是 AI Lab OAO 目前採用的實戰流程:先讓 Sites 登記一個 site project,再把可部署的版本保存起來,最後明確選擇要不要發布到 production。重點會放在 AI 實作時容易踩雷的地方。
1. 先登記一個 Site
在 ChatGPT app 裡,通常是從 Work 或 Codex 介面開始,描述你要做的 website,讓 ChatGPT 產生 preview,再從 sharing / publish 流程建立正式 Site。這條路比較像手動產品流程:看預覽、調整、選擇權限、按下發布。
Codex CLI 這邊比較像工具流程。 它可以透過 Sites connector 建立 site、保存 version、部署 production,並把 `project_id` 寫進 `.openai/hosting.json`。你仍然要知道它做了什麼,因為 production deployment 不是 preview。
登記後最重要會拿到幾種資料:site title、slug、project id、預設站點網址、access mode、可部署版本記錄。如果要後續自動化,`project_id` 是最關鍵的那個識別碼。
2. 可以自訂網域
Sites 會先給一個平台網址。像這個實驗室也有平台部署網址,但實際公開入口使用自訂網域:
https://ai-lab.oao.tw
自訂網域不是 Sites 幫你買 domain。你要先擁有這個 domain,然後依照 Sites 提供的 DNS records 去設定。AI 可以協助你讀懂 CNAME、A record、TXT verification,但最後 DNS 是在你的 domain provider 那邊生效。
實戰心得: custom domain 成功不代表 SSL 立刻就緒。domain status、provider status、SSL status 要分開看。
3. 它不是傳統網頁空間
傳統網頁空間常見心智模型是「把 `index.html` 丟上去」。Sites 比較接近「保存一個可執行的網站版本」,再把那個 version 發布到 production。
對簡單靜態頁來說,source 可以仍然是 HTML、CSS、JS;但部署時通常還是需要 build,把檔案整理成 Sites runtime 能服務的格式。這也是為什麼 AI 不能只說「我寫好 HTML 了」就算完成。
GitHub 是免費仔的好朋友。 Sites 管 project、version、access、custom domain、runtime env;source code 則交給 GitHub 留底、回溯、協作,讓每一次發布都能知道對應哪個版本。
4. 部署是兩件事
- 上傳 / 保存:把目前 source 對應的 build output 保存成 Sites version。
- 公布 / 發布:把某個已保存的 version 部署到 production URL。
這兩步要分清楚。保存 version 只是留下可部署版本;發布 production 才會讓公開網址更新。AI 最容易犯的錯,是 build 完或 save version 後就以為已經上線。
對 public site,發布前要再次確認內容沒有私密資料、連結沒有錯、access mode 符合預期。production URL 是正式入口,不是暫時 preview。
AI 踩雷點
- UTF-8:中文內容不能只在原始檔正常,build output 和 response header 也要明確是 UTF-8。
- URL cache:改了 CSS 或 JS 但瀏覽器還吃舊檔時,要用明確的 cache bust 版本。
- save 不等於 publish:保存 Sites version 之後,仍然要部署才會更新公開網站。
- preview 不等於 production:正式 URL 會被真實訪客看到,不能拿 production 當草稿區。
- secret 位置:runtime secret 不應該寫進 repo 或 `.openai/hosting.json`,要放 Sites 的環境變數管理。
- domain 狀態:DNS、domain verification、SSL 是不同狀態,不能看到其中一個 active 就以為全部完成。
- App 與 git clone:Desktop app 能不能直接操作 git clone、本地 repo 與既有 source flow,還需要多測幾輪;先不要假設 app 和 CLI 的 git 能力完全一樣。