Skip to main content

Biến môi trường

Cấu hình runtime tách thành hai phần:

  • Phía client (Vite) — biến cần prefix VITE_* để được expose qua import.meta.env.
  • Phía server (server.js) — đọc bằng process.env qua dotenv.

Tệp .env.development đã commit như mẫu tham chiếu; tệp thực sự dùng ở máy là .env (gitignored).

Khởi tạo

cp .env.development .env
# chỉnh lại URL backend và OAuth client cho môi trường của bạn

Biến phía client (VITE_*)

KhoáMục đích
VITE_BUILDERX_SPA_URLURL của chính SPA — dùng cho CORS và redirect callback.
VITE_BUILDERX_API_URLURL của builderx_api.
VITE_BUILDERX_SPA_AFFILIATE_URLSubdomain affiliate (affiliate.localhost:5173).
VITE_LANDING_PAGE_API_URLURL public của landing_page_backend.
VITE_LANDING_PREVIEW_URLDịch vụ render preview landing.
VITE_LANDING_PAGE_BUILDER_URLURL của landing builder.
VITE_PANCAKEID_CLIENT_ID / _SECRETOAuth client của Pancake ID.
VITE_PANCAKE_AUTH_URLTên miền OAuth VN (https://account.pancake.vn).
VITE_PANCAKE_AUTH_URL_INTERNATIONALTên miền OAuth quốc tế (https://account.pancake.biz).
VITE_GOOGLE_CLIENT_ID / _API_KEYOAuth Google + Drive / Sheets / Picker.
VITE_DROPBOX_APP_KEYDropbox chooser.
VITE_DRIBBBLE_CLIENT_IDPicker tài nguyên Dribbble.
VITE_VIMEO_API_KEYVimeo metadata.
VITE_INSTAGRAM_CLIENT_IDInstagram Graph login.
VITE_FACEBOOK_CLIENT_IDFacebook login & Graph.
VITE_DEVIANT_ART_CLIENT_IDPicker tài nguyên DeviantArt.
VITE_STRIPE_PKStripe publishable key.
VITE_SLACK_CLIENT_IDTích hợp thông báo Slack.
VITE_PANCAKE_SECRET_KEYKhoá ký không nhạy cảm của Pancake.
VITE_SAPO_CLIENT_IDTích hợp Sapo.
VITE_HARAVAN_CLIENT_IDTích hợp Haravan.
VITE_SHOPIFY_CLIENT_ID / _SECRET_KEYTích hợp Shopify (sandbox).
VITE_LANDING_PAGE_BACKEND_URLURL backend dùng phía server (server.js).
VITE_LANDING_GOOGLE_CLIENT_IDOAuth client riêng cho luồng landing.
VITE_LANDING_SLACK_CLIENT_IDSlack client riêng cho luồng landing.

Mọi biến VITE_* sẽ được nhúng vào bundle client. Không đặt secret thực sự nhạy cảm ở đây.

Biến phía server (server.js)

KhoáMục đích
NODE_ENVdevelopment / production. Ảnh hưởng cache và mức log.
JWT_KEYSecret ký cookie nội bộ. Phải đồng bộ giữa các replica.
PANCAKE_AUTH_URLEndpoint Pancake auth phía server (đổi mã OAuth).
BUILDERX_API_URLURL builderx_api nhìn từ trong container (thường http://host.docker.internal:24679).

Thêm biến mới

  1. Bổ sung placeholder vào .env.development (không secret thật).
  2. Cập nhật bảng ở trên kèm mô tả và nguồn cấp (ops, tự sinh, công khai,…).
  3. Đảm bảo vite.config.js hoặc server.js có đọc biến đó.
  4. Secret thật được nạp qua Ansible / vault, không qua tệp này.

Sai sót thường gặp

  • Thay đổi .env không nóng — phải dừng Vite, sửa .env, chạy npm run dev lại.
  • Biến không có prefix VITE_* sẽ không xuất hiện ở import.meta.env.
  • Dùng import.meta.env.MODE ('development' / 'production') thay vì so sánh NODE_ENV ở phía client.
  • Đừng console.log(import.meta.env) — sẽ lộ các client id công khai mà bạn không muốn bị thu thập.