Notes & software courses · Free to learn
Aph's Blog
On this page

Environment Variables & Config

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

เก็บค่าตั้งค่าและ secret (เช่น API key) ไว้นอกโค้ด — ปลอดภัยและเปลี่ยนได้โดยไม่แก้โปรแกรม

API key, รหัสผ่านฐานข้อมูล, URL ของ server เหล่านี้ไม่ควรฮาร์ดโค้ดไว้ในโปรแกรม เพราะเปลี่ยนยากและเสี่ยงหลุดขึ้น git environment variable คือวิธีมาตรฐานในการเก็บค่าพวกนี้ไว้ "นอกโค้ด"

อ่าน environment variable

python
import os

# อ่านค่าจาก environment (คืน None ถ้าไม่มี)
api_key = os.environ.get("API_KEY")

# กำหนดค่า default ถ้าไม่มี
port = os.environ.get("PORT", "8000")

# ถ้าจำเป็นต้องมี ให้ raise เมื่อไม่เจอ
db_url = os.environ["DATABASE_URL"]   # KeyError ถ้าไม่มี
bash
# ตั้งค่า env var ตอนรัน (macOS/Linux)
export API_KEY=secret123
python app.py

# หรือใส่หน้าคำสั่งครั้งเดียว
API_KEY=secret123 python app.py

ไฟล์ .env + python-dotenv

การ export ทีละตัวไม่สะดวก นิยมเก็บค่าทั้งหมดไว้ในไฟล์ .env แล้วใช้ library python-dotenv โหลดเข้ามา

bash
# ไฟล์ .env
API_KEY=secret123
DATABASE_URL=postgres://localhost/mydb
PORT=8000
python
from dotenv import load_dotenv   # pip install python-dotenv
import os

load_dotenv()                    # อ่าน .env เข้าสู่ environment

api_key = os.environ.get("API_KEY")
print(api_key)                   # secret123

แยก config ออกจากโค้ด

python
# config.py — รวมการอ่าน config ไว้ที่เดียว
import os
from dotenv import load_dotenv

load_dotenv()

API_KEY = os.environ.get("API_KEY")
DATABASE_URL = os.environ.get("DATABASE_URL")
DEBUG = os.environ.get("DEBUG", "false").lower() == "true"

# ไฟล์อื่นแค่ from config import API_KEY
ห้าม commit secret ขึ้น git เด็ดขาด

ใส่ .env ใน .gitignore เสมอ! การเผลอ commit API key/รหัสผ่านขึ้น git (โดยเฉพาะ public repo) คือช่องโหว่ความปลอดภัยร้ายแรง — แม้ลบทีหลัง ค่าก็ยังอยู่ใน history นิยมทำไฟล์ .env.example ที่มีแค่ชื่อ key (ไม่มีค่าจริง) เข้า git แทนเพื่อให้คนอื่นรู้ว่าต้องตั้งอะไรบ้าง

สรุปหัวข้อนี้

  • เก็บ secret/config ไว้นอกโค้ดด้วย environment variable
  • อ่านด้วย os.environ.get("KEY", default) — get ปลอดภัยกว่าวงเล็บเหลี่ยม
  • เก็บรวมใน .env แล้วโหลดด้วย python-dotenv (load_dotenv())
  • ใส่ .env ใน .gitignore เสมอ — ทำ .env.example ไว้บอก key แทน
แบบฝึกหัด

1) ย้าย API key ที่ฮาร์ดโค้ดในโปรแกรมไปเป็น env var 2) สร้างไฟล์ .env แล้วโหลดด้วย python-dotenv 3) เขียน config.py ที่รวมการอ่าน config 4) เพิ่ม .env เข้า .gitignore แล้วสร้าง .env.example