ตัวแปรสภาพแวดล้อมและ secret · Environment & secrets
On this page
ตารางอ้างอิงเต็มอยู่ที่ reference/config-env.md หน้านี้เน้น "วิธีจัดการอย่างปลอดภัย" และเหตุผล
หลักการ#
- secret มีตัวเดียว:
OPENAI_API_KEYที่เหลือเป็น config ธรรมดา (vars) - secret ถูกอ่านใน
src/lib/server/env.tsที่เดียว (ไฟล์มีimport "server-only"กันการ import จาก client) ไม่ถูก log ไม่ถูกส่งกลับ client —GET /api/planคืนแค่ booleanserverKeyConfigured - ห้าม commit
.env.local,.dev.vars(อยู่ใน.gitignore) commit ได้เฉพาะไฟล์ตัวอย่าง.env.example,.dev.vars.exampleที่ค่าว่าง - ค่าที่ไม่ถูกต้องไม่ทำให้ระบบล่ม: ใช้ค่าเริ่มต้นและ log เฉพาะชื่อตัวแปร
ตั้งค่าแต่ละสภาพแวดล้อม#
| สภาพแวดล้อม | ที่เก็บ | หมายเหตุ |
|---|---|---|
next dev / next start |
.env.local |
Next โหลดอัตโนมัติ |
npm run preview (wrangler) |
.dev.vars |
ไฟล์ควรมีสิทธิ์ 600 |
| Cloudflare production | Worker secret + vars ใน wrangler.jsonc |
ตั้ง secret ผ่าน stdin |
ตั้ง secret บน Cloudflare (ผ่าน stdin เท่านั้น)#
printenv OPENAI_API_KEY | npx wrangler secret put OPENAI_API_KEYเหตุผล: การพิมพ์ key เป็น argument จะติดใน shell history และ process list การส่งผ่าน stdin ไม่ทิ้งร่องรอย secret ผูกกับเวอร์ชันของ Worker การ rollback จะคืน binding ของเวอร์ชันนั้นด้วย
Cloudflare API token#
- ใช้ token แบบ account-scoped สิทธิ์ขั้นต่ำ: Workers Scripts: Edit, Account Settings: Read (ดู DEPLOY.md หัวข้อ 7); ถ้าใช้
wrangler d1ต้องเพิ่ม D1: Edit และสำหรับ R2 ต้องเพิ่ม Workers R2 Storage: Edit (ดู d1-database.md) - ส่งเป็นตัวแปร
CLOUDFLARE_API_TOKENเฉพาะคำสั่งที่ต้องใช้ ห้ามพิมพ์ค่าออกหน้าจอ ห้ามเขียนลงไฟล์ใน repo - ถ้าตัวแปรมีข้อความอื่นปนมา (เช่นวางทั้งหน้าเว็บ) ให้ดึงเฉพาะ token ใน process โดยไม่ echo
key ของผู้ใช้ (BYO key)#
ผู้ใช้วาง key ของตัวเองใน UI ได้ key ไปใน header x-openai-key ของคำขอเดียว ต้องตรงรูปแบบ ^[\w-]{20,400}$ ใช้แทน key ของเซิร์ฟเวอร์ ไม่ติด AI limiter ไม่ถูกเก็บหรือ log และถูก redact ออกจาก error ทุกข้อความ
การหมุน key (rotation)#
- สร้าง key ใหม่ใน OpenAI dashboard (สิทธิ์ที่ต้องใช้: Responses API,
api.responses.write) printenv NEW_KEY | npx wrangler secret put OPENAI_API_KEY(สร้างเวอร์ชันใหม่ของ Worker)- ตรวจ
curl -s https://<worker>/api/plan→serverKeyConfigured: trueและลอง POST หนึ่งครั้ง - revoke key เก่า
เมื่อสงสัยว่า secret รั่ว#
revoke ที่ต้นทางทันที (OpenAI / Cloudflare) แล้วตั้งค่าใหม่ ตรวจ git history ว่าไม่มีไฟล์ secret ถูก commit (git log --all -- .dev.vars .env.local ต้องว่าง)
Source: docs/operations/env-secrets.md · /docs/operations/env-secrets.md