~/VibeHandbook
PDF miễn phí

Chương 05 · 05

Biến môi trường và cấu hình

Có những giá trị không thể viết cứng vào mã lệnh: khóa bí mật, mật khẩu cơ sở dữ liệu, địa chỉ của một dịch vụ. Và có những giá trị cần thay đổi tùy theo nơi ứng dụng đang chạy. Mã lệnh bạn kiểm thử trên laptop (môi trường dev, tức phát triển) nên nói chuyện với một cơ sở dữ liệu thử nghiệm; ứng dụng thực tế mà người dùng của bạn chạm vào (môi trường prod, tức production, sản xuất/vận hành thực tế) phải nói chuyện với cơ sở dữ liệu thật — dùng cùng một mã lệnh.

Câu trả lời là biến môi trường (environment variables, thường gọi tắt là "env var"): các giá trị có tên, sống bên ngoài mã lệnh, và được cung cấp cho nó khi nó chạy. Mã lệnh nói "cho tôi DATABASE_URL," và môi trường quyết định giá trị nào sẽ được đưa ra.

# A config file (e.g. .env) — values live here, not in the code

DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H...     # dev = a test key
SEND_REAL_EMAILS=false               # don't email real users while testing

Hai quy tắc sẽ giúp bạn tránh được đau khổ thật sự:

  • Bí mật không bao giờ được đặt trong mã lệnh. Bất cứ thứ gì trong mã lệnh của bạn đều có thể trở thành công khai (đặc biệt trong một repo được chia sẻ), và một khóa thanh toán hay mật khẩu cơ sở dữ liệu bị rò rỉ là một tình huống khẩn cấp thực sự. Bí mật thuộc về biến môi trường, được giữ ngoài hệ thống quản lý phiên bản (version control).
  • Dev và prod là khác nhau. Vấn đề mấu chốt là cùng một mã lệnh phải hoạt động đúng ở cả hai nơi, bởi vì môi trường — chứ không phải mã lệnh — quyết định dùng cơ sở dữ liệu và khóa nào.

Cùng một mã lệnh, hai ngôi nhà — biến môi trường là thứ khác biệt:

        SAME CODE
       /         \
      ▼           ▼
   ┌─────────────────┐     ┌─────────────────┐
   │  DEV            │     │  PROD           │
   │  your laptop    │     │  hosting (cloud)│
   │  test database  │     │  real database  │
   │  test API key   │     │  live API key   │
   │  fake emails    │     │  real emails    │
   └─────────────────┘     └─────────────────┘
     only you see it         your users see it

Muốn bản ngoại tuyến?

Tải trọn cuốn sách dưới dạng PDF hoặc EPUB — miễn phí.