Viết thẳng mật khẩu database vào file .py rồi đẩy lên GitHub là một trong những lỗi tốn kém nhất mà lập trình viên mắc phải. Cách đúng là tách cấu hình ra khỏi code.
Đọc biến môi trường
import os
db_url = os.environ["DATABASE_URL"] # thiếu -> báo lỗi ngay
debug = os.getenv("DEBUG", "false") # thiếu -> dùng mặc định
Với cấu hình bắt buộc, hãy dùng os.environ[...]: hỏng sớm và rõ ràng lúc khởi động vẫn tốt hơn lỗi bí ẩn giữa đêm.
File .env cho môi trường phát triển
pip install python-dotenv
# .env
DATABASE_URL=mysql://user:matkhau@localhost/mydb
API_KEY=sk-xxxxx
DEBUG=true
# settings.py
from dotenv import load_dotenv
import os
load_dotenv() # nạp .env vào biến môi trường
DATABASE_URL = os.environ["DATABASE_URL"]
API_KEY = os.environ["API_KEY"]
DEBUG = os.getenv("DEBUG", "false").lower() == "true"
Bước quan trọng nhất
# .gitignore
.env
Thêm .env vào .gitignore trước lần commit đầu tiên. Nếu đã lỡ đẩy lên, xóa file thôi là chưa đủ — hãy đổi ngay toàn bộ mật khẩu và khóa API đó, vì lịch sử Git vẫn còn lưu.
Chia sẻ cấu trúc mà không lộ giá trị
# .env.example (file này ĐƯỢC commit)
DATABASE_URL=
API_KEY=
DEBUG=false
Đồng nghiệp mới chỉ cần copy thành .env rồi điền giá trị của họ.
Gom cấu hình vào một chỗ
from dataclasses import dataclass
import os
@dataclass(frozen=True)
class CauHinh:
database_url: str
api_key: str
debug: bool = False
@classmethod
def tu_moi_truong(cls):
return cls(
database_url=os.environ["DATABASE_URL"],
api_key=os.environ["API_KEY"],
debug=os.getenv("DEBUG", "false").lower() == "true",
)
cau_hinh = CauHinh.tu_moi_truong()
Trên server thật, đừng dùng file .env — hãy đặt biến môi trường qua systemd, Docker hoặc dịch vụ quản lý secret của nhà cung cấp. File .env chỉ nên phục vụ máy phát triển của bạn.
