> ## Documentation Index
> Fetch the complete documentation index at: https://docs-th.stardeck.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Environment Variables

> เรียนรู้วิธีการตั้งค่าและจัดการ environment variables สำหรับโปรเจค Stardeck ของคุณ

## ภาพรวม

Environment variables ช่วยให้คุณสามารถเก็บค่าการตั้งค่าและ secrets ที่แอปพลิเคชันของคุณจำเป็นต้องใช้ในการทำงาน กรณีการใช้งานทั่วไป ได้แก่:

* API keys และ tokens
* ข้อมูลประจำตัวของบริการภายนอก
* Feature flags
* การตั้งค่าเฉพาะสำหรับแต่ละ environment

ใน Stardeck, environment variables สามารถตั้งค่าได้ต่อโปรเจค และกำหนดเป้าหมายไปยัง deployment environments เฉพาะ

## Deployment Targets

Environment variable แต่ละตัวสามารถตั้งค่าได้สำหรับหนึ่งหรือหลาย deployment targets:

### Sandbox

Environment สำหรับการพัฒนาที่คุณสร้างและทดสอบแอปพลิเคชันของคุณ เมื่อคุณแก้ไข sandbox environment variables, dev server จะรีสตาร์ทโดยอัตโนมัติเพื่อใช้การเปลี่ยนแปลง

### Preview

Branch preview deployments ที่สร้างขึ้นสำหรับ Git branches เฉพาะ ใช้ preview variables เพื่อทดสอบกับข้อมูลที่คล้ายกับ production โดยไม่กระทบกับเว็บไซต์ที่เผยแพร่แล้ว

### Production

แอปพลิเคชันที่เผยแพร่และใช้งานจริงของคุณ Production variables ถูกใช้เมื่อคุณ deploy โปรเจคของคุณไปยังโดเมนที่กำหนดเองหรือ URL เริ่มต้น `project-slug.stardeck.site`

<Note>
  คุณสามารถเลือกหลาย targets สำหรับ variable เดียว ช่วยให้คุณสามารถใช้การตั้งค่าเดียวกันในหลาย environments
</Note>

## ประเภทของ Variable

Stardeck รองรับสองประเภทของ environment variables ที่มีรูปแบบการมองเห็นและการเข้าถึงที่แตกต่างกัน:

### Non-Secret Variables

Non-secret variables เหมาะสำหรับค่าการตั้งค่าที่ไม่ละเอียดอ่อนซึ่งสามารถเปิดเผยได้อย่างปลอดภัย:

* **การเข้าถึงในขั้นตอน Build**: มีอยู่แล้วโดยอัตโนมัติสำหรับ Vite ด้วย prefix `VITE_` ในระหว่างกระบวนการ build
* **การเข้าถึงในขั้นตอน Runtime**: มีอยู่เป็น environment variables ปกติ
* **การมองเห็น**: ค่าจะมองเห็นได้ (แต่ถูกซ่อน) ใน project settings UI
* **กรณีการใช้งาน**: Public API endpoints, feature flags, การตั้งค่าที่ไม่ละเอียดอ่อน

<Info>
  เมื่อคุณสร้าง non-secret variable ชื่อ `API_URL`, Stardeck จะทำให้มันพร้อมใช้งานโดยอัตโนมัติทั้งเป็น `VITE_API_URL` (สำหรับ client-side code) และ `API_URL` (สำหรับ server-side code)
</Info>

### Secret Variables

Secret variables ถูกเข้ารหัสและเก็บไว้อย่างปลอดภัย:

* **Runtime-only**: มีอยู่เฉพาะใน runtime เท่านั้น ไม่เคยถูกเปิดเผยในระหว่างกระบวนการ build
* **การจัดเก็บแบบเข้ารหัส**: ค่าถูกเข้ารหัสใน database
* **ซ่อนใน UI**: ค่าจะไม่ถูกแสดงใน project settings เลย
* **กรณีการใช้งาน**: API keys, tokens, passwords, database credentials

<Warning>
  Secret variables **ไม่สามารถเข้าถึงได้** โดย Vite ในขั้นตอน build พวกเขามีอยู่เฉพาะสำหรับ server-side code ใน runtime ผ่าน `process.env` เท่านั้น
</Warning>

## Reserved Variables

ชื่อ environment variable บางอันถูกจองไว้โดย Stardeck สำหรับการใช้งานระบบและไม่สามารถตั้งค่าโดยผู้ใช้:

### Reserved Prefixes

* **VITE\_** - เพิ่มโดยอัตโนมัติให้กับ non-secret variables สำหรับการเข้าถึงฝั่ง client คุณไม่ควรสร้าง variables ที่เริ่มต้นด้วย `VITE_` เพราะ Stardeck จัดการสิ่งนี้โดยอัตโนมัติ
* **OIDC\_** - จองไว้สำหรับการตั้งค่า OAuth และ authentication ที่จัดการโดย Stardeck

### Reserved Names

* **DATABASE\_URL** - Managed database connection string (ให้โดย Stardeck โดยอัตโนมัติ)
* **APP\_DATABASE\_NAME** - ชื่อ application database
* **DATABASE\_NAME** - ชื่อ database (legacy)
* **DEPLOYMENT\_ID** - ตัวระบุ deployment ปัจจุบัน
* **CLOUDFLARE\_INCLUDE\_PROCESS\_ENV** - Cloudflare environment flag

<Warning>
  หากคุณพยายามสร้าง variable ด้วยชื่อที่จองไว้ คุณจะได้รับข้อผิดพลาด เลือกชื่ออื่นสำหรับ custom variables ของคุณ (เช่น ใช้ `EXTERNAL_DATABASE_URL` แทน `DATABASE_URL` สำหรับการเชื่อมต่อ database ของบุคคลที่สาม)
</Warning>

## การจัดการ Environment Variables

### การเข้าถึงการตั้งค่า

1. เปิดโปรเจคของคุณใน Stardeck dashboard
2. คลิกปุ่ม **Settings** (ไอคอนเฟือง)
3. ไปที่แท็บ **Environment Variables**

### การเพิ่ม Variable

1. คลิก **Add Environment Variable**
2. ใส่ **Key** ในรูปแบบ UPPERCASE\_WITH\_UNDERSCORES (เช่น `API_KEY`, `STRIPE_SECRET_KEY`)
3. ใส่ **Value**
4. สลับ **Secret Variable** หากค่ามีข้อมูลที่ละเอียดอ่อน
5. เลือกหนึ่งหรือหลาย **Deployment Targets** (sandbox, preview, production)
6. คลิก **Add Variable**

<Note>
  สำหรับ sandbox environments, dev server จะรีสตาร์ทโดยอัตโนมัติเพื่อใช้ environment variables ใหม่
</Note>

### การแก้ไข Variable

1. คลิก **Edit** บน variable ที่คุณต้องการแก้ไข
2. อัปเดต key, value, สถานะ secret, หรือ deployment targets
3. คลิก **Update Variable**

<Info>
  เมื่อแก้ไข secret variable ปล่อยช่อง value ว่างเพื่อเก็บค่า secret ที่มีอยู่ไว้โดยไม่เปลี่ยนแปลง
</Info>

### การลบ Variable

1. คลิก **ไอคอนถังขยะ** ถัดจาก variable ที่คุณต้องการลบ
2. ยืนยันการลบ

<Warning>
  การลบ environment variable จะทริกเกอร์การรีสตาร์ท dev server สำหรับ sandbox environments หากเกี่ยวข้อง
</Warning>

## การใช้ Variables ในโค้ดของคุณ

### Client-Side Code (Vite/React)

เข้าถึง non-secret variables ใน client-side code ของคุณโดยใช้ `import.meta.env`:

```typescript theme={null}
// การเข้าถึง non-secret variable
const apiUrl = import.meta.env.VITE_API_URL;
const featureFlag = import.meta.env.VITE_ENABLE_FEATURE;

console.log(`API URL: ${apiUrl}`);
```

<Warning>
  เฉพาะ variables ที่มี prefix `VITE_` เท่านั้นที่สามารถเข้าถึงได้ใน client-side code ห้ามเก็บ secrets ใน VITE\_ variables เพราะพวกเขาถูกฝังอยู่ในแอปพลิเคชันที่ build แล้ว
</Warning>

### Server-Side Code (Node.js/API Routes)

เข้าถึงทั้ง secret และ non-secret variables ใน server code ของคุณโดยใช้ `process.env`:

```typescript theme={null}
// Server-side API route
export async function POST(req: Request) {
  // เข้าถึง secret variables
  const apiKey = process.env.STRIPE_SECRET_KEY;
  const webhookSecret = process.env.STRIPE_WEBHOOK_SECRET;
  
  // เข้าถึง non-secret variables
  const apiUrl = process.env.EXTERNAL_API_URL;
  
  // ใช้ variables
  const response = await fetch(apiUrl, {
    headers: { Authorization: `Bearer ${apiKey}` }
  });
  
  return Response.json({ data: await response.json() });
}
```

## Best Practices

### หลักการตั้งชื่อ

* ใช้ตัวพิมพ์ใหญ่พร้อม underscores: `MY_API_KEY`, `DATABASE_URL`
* ใช้คำที่อธิบายและสอดคล้อง: `STRIPE_SECRET_KEY`, `STRIPE_PUBLIC_KEY`
* ปฏิบัติตามรูปแบบการตั้งชื่อของทีม

### ความปลอดภัย

* **ใช้ secrets สำหรับข้อมูลที่ละเอียดอ่อน**: API keys, tokens, passwords, และ connection strings ควรถูกทำเครื่องหมายเป็น secret เสมอ
* **ห้าม commit secrets**: อย่าเก็บค่าที่ละเอียดอ่อนใน Git repository ของคุณ
* **หมุนเวียน credentials**: อัปเดตค่า secret เป็นระยะ โดยเฉพาะหากอาจถูกเปิดเผย
* **จำกัดการเข้าถึง**: เพิ่ม environment variables เฉพาะใน targets ที่จำเป็นเท่านั้น

### การจัดระเบียบ

* **จัดกลุ่ม variables ที่เกี่ยวข้อง**: ใช้ prefixes เพื่อจัดระเบียบการตั้งค่าที่เกี่ยวข้อง (เช่น `STRIPE_`, `AWS_`)
* **จัดทำเอกสาร variables**: เก็บบันทึกว่าแต่ละ variable ใช้เพื่ออะไร
* **ความเท่าเทียมของ Environment**: ใช้ชื่อ variable เดียวกันในทุก targets ด้วยค่าเฉพาะสำหรับแต่ละ environment

### Client-Side Variables

* **ลดการเปิดเผยฝั่ง client**: ใช้ `VITE_` variables เฉพาะเมื่อค่าจำเป็นต้องเข้าถึงได้ใน browser
* **ห้ามเปิดเผย secrets**: Client-side code มองเห็นได้โดยผู้ใช้ ดังนั้นอย่าใส่ข้อมูลที่ละเอียดอ่อนใน VITE\_ variables
* **ตรวจสอบบน server**: ตรวจสอบข้อมูลที่ client ส่งมาบน server เสมอ แม้ว่าคุณจะมีการตรวจสอบฝั่ง client

<Info>
  จำไว้ว่า: Non-secret variables มีอยู่โดยอัตโนมัติพร้อม prefix `VITE_` สำหรับการเข้าถึงฝั่ง client คุณไม่จำเป็นต้องสร้าง variables แยก
</Info>

## รูปแบบทั่วไป

### การตั้งค่า API

```typescript theme={null}
// Non-secret variable สำหรับ API endpoint
EXTERNAL_API_URL=https://api.example.com

// Secret variable สำหรับ API key (server-side เท่านั้น)
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
```

### การตั้งค่า External Database

```typescript theme={null}
// Secret variable สำหรับการเชื่อมต่อ external database
EXTERNAL_DATABASE_URL=postgresql://user:pass@host:5432/db

// Non-secret variable สำหรับ connection pool size
EXTERNAL_DB_POOL_SIZE=10
```

<Note>
  Stardeck ให้ `DATABASE_URL` โดยอัตโนมัติสำหรับ managed database ของโปรเจคคุณ ใช้ `EXTERNAL_DATABASE_URL` หรือชื่อคล้ายกันสำหรับการเชื่อมต่อไปยัง external databases
</Note>

### Feature Flags

```typescript theme={null}
// Non-secret variables สำหรับ feature toggles
VITE_ENABLE_ANALYTICS=true
VITE_ENABLE_BETA_FEATURES=false
```

### การตั้งค่าเฉพาะ Environment

ตั้งค่าต่างกันสำหรับ variable เดียวกันในแต่ละ target:

* **Sandbox**: `EXTERNAL_API_URL=http://localhost:8000`
* **Preview**: `EXTERNAL_API_URL=https://api-staging.example.com`
* **Production**: `EXTERNAL_API_URL=https://api.example.com`

***

ต้องการความช่วยเหลือเกี่ยวกับ environment variables? ติดต่อทีมสนับสนุนของเราผ่าน dashboard ของคุณ
