Skip to content

การตั้งค่า Environment Variables (.env)

ในการนำ RawPush ไป Deploy เพื่อใช้งานจริง ไม่ว่าจะเป็นส่วนของ Backend หรือ Dashboard หัวใจสำคัญที่หลีกเลี่ยงไม่ได้เลยก็คือการตั้งค่า Environment Variables (ตัวแปรสภาพแวดล้อม)

หน้านี้จะอธิบายความแตกต่างของไฟล์ .env ที่คุณมักจะพบเจอ และรวบรวมตัวอย่างไฟล์ .env ฉบับสมบูรณ์ที่พร้อมก๊อปปี้ไปปรับใช้งานตอน Deploy ได้เลย


1. 📂 .env กับ .env.local ต่างกันอย่างไร?

ในการพัฒนาแอปพลิเคชัน (โดยเฉพาะฝั่ง Dashboard ที่ใช้ Next.js) คุณจะเจอกับไฟล์ที่ลงท้ายด้วย env หลายรูปแบบ:

  • .env.example ไฟล์แม่แบบ โค้ดในนี้เป็นเพียงตัวอย่างและคำอธิบาย (ไม่มีรหัสผ่านจริง) ปกติจะถูกอัพขึ้น Git เพื่อให้ทีมรู้ว่าระบบต้องใช้ตัวแปรอะไรบ้าง
  • .env ตัวแปรสภาพแวดล้อม ค่าเริ่มต้น (Default) หากมีตัวแปรไหนที่ไม่เป็นความลับและสามารถใช้ร่วมกันได้ทุกคนในทีม มักจะตั้งไว้ที่นี่ (บางทีมอาจอัพขึ้น Git ได้ถ้าไม่มี Secret key)
  • .env.local ตัวแปรสภาพแวดล้อม เฉพาะเครื่องของคุณ (Local Default) ปกติไฟล์นี้จะ ถูก Ignore จาก Git (ห้ามขึ้น Git เด็ดขาด!) คุณควรนำรหัสผ่านฐานข้อมูล, API Key ของจริง หรือ Secret Key ใส่ไว้ในไฟล์นี้ระหว่างทำการพัฒนาในเครื่องตัวเอง

💡 สรุปง่ายๆ: ตอน Dev บนเครื่องตัวเอง: เรามักใช้ .env.local ใส่ข้อมูลความลับ ตอน Deploy บน Cloud (Vercel, Docker, VPS): เราจะไม่เอาไฟล์ .env ไปวาง แต่จะเอาบรรทัดต่างๆ ไปกรอกใส่ในช่อง Environment Variables บนหน้าเว็บตั้งค่าของ Server/Hosting นั้นๆแทน


2. ⚙️ ไฟล์ .env ฉบับเต็ม (พร้อม Deploy)

ทั้ง Backend รันบน Go และ Dashboard รันบน Next.js ต่างก็เป็น "บ้านแฝด" ที่ใช้ขุมพลังเบื้องหลังร่วมกัน (Database และ Redis ก้อนเดียวกัน) ดังนั้น ค่าหลายตัวต้องตรงกันเป๊ะๆ

นี่คือ Sample .env แบบจัดเต็ม แบ่งให้เห็นชัดเจน นำไปปรับค่าเล็กน้อยและ Deploy ได้เลย:

🟩 ส่วนที่ 1: ฝั่ง RawPush Backend

ตั้งค่าให้กับ Server Go ของคุณ ไม่ว่าจะรันผ่าน Docker หรือ VPS ห้ามลืมเปลี่ยนค่าที่เป็นความลับให้ยากต่อการเดา

env
# 1. โหมดระบบ (บังคับ Production ตอนขึ้นระบบจริง)
ENV=production

# 2. Ports สำหรับ Server
HTTP_PORT=8080
WS_PORT=8081

# 3. การเชื่อมต่อ ฐานข้อมูล & Redis (ของจริงเปลี่ยนแค่ User/Password/IP)
DATABASE_URL="postgresql://myapp:mysecretpassword@10.0.0.5:5432/websocket?sslmode=disable"
REDIS_URL="redis://:myredispassword@10.0.0.6:6379/0"
NATS_URL="nats://localhost:4222"

# 4. ความปลอดภัย (!!! สำคัญ ต้องตรงกับฝั่ง Dashboard !!!)
ADMIN_KEY="MyStrongSuperRandomAdminKeyHere123"
# สำคัญ: ENCRYPTION_KEY ต้องมีความยาว 64 ตัวอักษรเป๊ะ (32 bytes ในรูป hex)
ENCRYPTION_KEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"

# 5. ความปลอดภัย Web (CORS) อนุญาตหน้าเว็บไหนให้ต่อ WebSocket ได้บ้าง
WS_ALLOWED_ORIGINS=https://app.mydomain.com
API_ALLOWED_ORIGINS=https://app.mydomain.com

🟦 ส่วนที่ 2: ฝั่ง RawPush Dashboard (Next.js)

ตั้งค่านี้ให้หน้าบ้านของคุณ (เช่น กรอกบน Vercel หรือ Docker Environment)

env
# 1. ฐานข้อมูลและ Redis (!!! ต้องเป็นก้อนเดียวกับ Backend ข้างบน !!!)
DATABASE_URL="postgresql://myapp:mysecretpassword@10.0.0.5:5432/websocket?sslmode=disable"
REDIS_URL="redis://:myredispassword@10.0.0.6:6379/0"

# 2. URL ระบบสำหรับติดต่อกันเองและแสดงผลให้ผู้ใช้
NEXT_PUBLIC_APP_URL="https://app.mydomain.com"
NEXT_PUBLIC_API_URL="https://api.mydomain.com/api/v1"
NEXT_PUBLIC_WS_URL="wss://ws.mydomain.com/ws"

# 3. URL ของ Go Backend แบบเจาะจงที่อยู่เครื่องภายใน (Internal IPs) แบบยิงตรง
# ถ้าลงใน Server ตัวเดียวกันชี้ไปที่ localhost ได้เลย
GO_API_URL="http://10.0.0.10:8080"
GO_REALTIME_URL="http://10.0.0.10:8081"

# 4. ความปลอดภัย (!!! สำคัญ ต้องตรงกับฝั่ง Backend !!!)
ADMIN_KEY="MyStrongSuperRandomAdminKeyHere123"
ENCRYPTION_KEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"

# 5. บริการส่งรหัสผ่าน/ยินยันอีเมล (Resend.com)
RESEND_API_KEY="re_YourResendApiKey"
EMAIL_APP_NAME="RawPush"
EMAIL_APP_URL="https://app.mydomain.com"
EMAIL_FROM="noreply@mydomain.com"
EMAIL_BRAND_COLOR="#2563eb"

# 6. กุญแจกันสแปม Cloudflare Turnstile (Captcha)
# หาขอได้ฟรีจาก Cloudflare แนะนำให้ใส่เพื่อป้องกันเว็บล่มจากการโดนยิงสมัคร
NEXT_PUBLIC_TURNSTILE_SITE_KEY="0x4AAAAAAAPxxxxxx_"
TURNSTILE_SECRET_KEY="0x4AAAAAAAPxxxxxxxxxxxxxxxxxxxx_"

⚠️ เช็คลิสต์ 3 ข้อก่อน Deploy

  1. คีย์ต้องเหมือนกัน: โปรดเอาไม้บรรทัดมาเทียบว่า DATABASE_URL , REDIS_URL , ADMIN_KEY , และ ENCRYPTION_KEY ของ Backend และ Dashboard เหมือนกันทุกตัวอักษร หากไม่ตรง ระบบจะไม่สามารถอ่านข้อมูลถึงกันได้ หรือเกิดการถอดรหัสความลับผิดพลาด
  2. อย่าเผลอเปิด Allow All Origins: ในฝั่ง Backend ส่วน WS_ALLOWED_ORIGINS อย่าเว้นว่างไว้ตอนทำ Production เพราะจะเป็นการเปิดให้ใครก็ได้เอาโค้ดไปรันที่คอมฯตัวเองและต่อหน้าบ้านคุณ
  3. NEXT_PUBLIC_ หลุดออกไปที่ Browser เสมอ: จำไว้ว่าตัวแปรที่นำหน้าด้วย NEXT_PUBLIC_ ในฝั่ง Dashboard จะเผยแพร่ออกไปที่ Browser ทั้งสิ้น ห้ามเอารหัสผ่าน Secret อะไรมาไว้ตรงนี้เด็ดขาด

Released under the MIT License.