Environments & Secrets
Environments ใน GrowthBook
หัวข้อที่มีชื่อว่า “Environments ใน GrowthBook”GrowthBook มาพร้อมกับสาม environment ในตัว: development, staging และ production แต่ละ environment มี:
- SDK Connection —
clientKeyแยกกันที่แอปของคุณใช้ต่อ environment - Feature state — flag สามารถ ON ใน development และ OFF ใน production แยกกันได้
- Override rules — targeting rules แยกต่อ environment ทำให้คุณปล่อยให้ internal user ใน staging โดยไม่กระทบ production
การสร้าง custom environment
หัวข้อที่มีชื่อว่า “การสร้าง custom environment”- ไปที่ Settings → Environments
- คลิก Add Environment
- ตั้งชื่อ (เช่น
canary) และ optionally ทำเครื่องหมายว่าเป็น production environment เพื่อให้ metrics ของตัวเอง highlight - คลิก Save
Custom environments มีประโยชน์สำหรับ canary deployment หรือ QA environment เฉพาะ
SDK connections แยกต่อ environment
หัวข้อที่มีชื่อว่า “SDK connections แยกต่อ environment”- ไปที่ SDK Connections → Add SDK Connection
- เลือก Environment เป้าหมายจาก dropdown
- คัดลอก
clientKeyที่สร้างขึ้น ใช้ key นี้เฉพาะใน app config ของ environment นั้น
การรักษาความปลอดภัย secret ใน self-hosted Docker Compose
หัวข้อที่มีชื่อว่า “การรักษาความปลอดภัย secret ใน self-hosted Docker Compose”Docker Compose file อย่างเป็นทางการของ GrowthBook เปิดเผย secret หลายอย่างที่ ต้อง ถูกเปลี่ยนก่อน go production
environment variables ที่สำคัญ
หัวข้อที่มีชื่อว่า “environment variables ที่สำคัญ”# docker-compose.yml (relevant excerpt)services: growthbook: environment: - MONGODB_URI=mongodb://mongo:27017/growthbook - JWT_SECRET=dev_secret # MUST change - ENCRYPTION_KEY=dev_key # MUST change - NODE_ENV=production - APP_ORIGIN=https://growthbook.yourcompany.comอย่า deploy ด้วย dev_secret หรือ dev_key สร้างค่าที่แข็งแกร่ง:
# Generate a 64-char hex JWT secret
openssl rand -hex 32
# Generate a 32-char base64 encryption key
openssl rand -base64 24เก็บ output ในไฟล์ .env (ห้าม commit เข้า git) และอ้างอิงใน Compose:
services: growthbook: env_file: - .envเพิ่ม .env ใน .gitignore ทันที
MongoDB backups
หัวข้อที่มีชื่อว่า “MongoDB backups”GrowthBook เก็บ features, experiments, metrics และ audit logs ทั้งหมดไว้ใน MongoDB แผน backup เป็นสิ่งที่ขาดไม่ได้
mongodump แบบ one-off
หัวข้อที่มีชื่อว่า “mongodump แบบ one-off”docker exec growthbook-mongo-1 \ mongodump --uri="mongodb://localhost:27017/growthbook" \ --archive=/tmp/growthbook-backup.gz --gzip
docker cp growthbook-mongo-1:/tmp/growthbook-backup.gz \ ./backups/growthbook-$(date +%Y%m%d).gzbackup อัตโนมัติรายวันผ่าน cron
หัวข้อที่มีชื่อว่า “backup อัตโนมัติรายวันผ่าน cron”# Add to crontab: crontab -e0 2 * * * docker exec growthbook-mongo-1 \ mongodump --uri="mongodb://localhost:27017/growthbook" \ --archive=/tmp/gb-daily.gz --gzip && \ docker cp growthbook-mongo-1:/tmp/gb-daily.gz \ /backups/growthbook-$(date +\%Y\%m\%d).gzหมายเหตุเรื่อง scaling และ proxy
หัวข้อที่มีชื่อว่า “หมายเหตุเรื่อง scaling และ proxy”สำหรับ deployment ที่มี traffic สูง:
- รัน GrowthBook Proxy (
ghcr.io/growthbook/proxy) ไว้หน้า SDK endpoint Proxy แคช feature payload และ serve ที่ edge ลด load บน GrowthBook app server - ตั้ง
GROWTHBOOK_PROXY_HOSTใน proxy container ให้ชี้ไปยัง app server ของคุณ - Proxy รองรับ webhook-triggered cache invalidation ที่อธิบายในบทที่แล้ว
Production checklist
หัวข้อที่มีชื่อว่า “Production checklist”ทำ checklist นี้ให้ครบก่อนเปลี่ยน DNS ไป production:
[ ] JWT_SECRET เป็น hex string 64 ตัวอักษรที่สร้างแบบ random[ ] ENCRYPTION_KEY เป็น base64 string 32 ตัวอักษรที่สร้างแบบ random[ ] MONGODB_URI ชี้ไปยัง replica set หรือ managed MongoDB (ไม่ใช่ single node)[ ] .env อยู่ใน .gitignore — ห้าม commit เด็ดขาด[ ] cron mongodump รายวันกำลังรันอยู่และมีการทดสอบ restore แล้ว[ ] APP_ORIGIN ตั้งเป็น HTTPS domain จริงของคุณ[ ] SDK Connections มี key แยกต่อ environment[ ] มี Read-only API key อย่างน้อยหนึ่งอันสำหรับ dashboard และ monitoring[ ] GrowthBook Proxy deploy แล้วสำหรับ SDK endpoint ที่มี traffic สูง[ ] Webhook endpoints ตรวจสอบด้วย HMAC signature checkingข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
| เก็บ secret ใน environment variable / secret manager | ปลอดภัยกว่า แยกจาก code | ต้องตั้งค่า infra เพิ่ม (secret manager, injection) |
| Hardcode ใน config file | เร็วกว่าตอน dev | เสี่ยง secret รั่วเข้า git repository |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- commit API secret หรือ SDK secret key เข้า git repository
- ใช้ secret เดียวกันข้าม environment ทำให้ revoke key เดียวกระทบทุกที่
- ไม่ rotate secret เป็นระยะ
💡 ตัวอย่างจากของจริง
ทีม security ที่บริษัทใหญ่บังคับให้ secret ทุกตัวผ่าน secret manager (เช่น AWS Secrets Manager, Vault) ไม่ใช่เก็บใน
.envfile ธรรมดาสำหรับ production