Tham khảo Biến Môi trường
Cách thức file môi trường hoạt động
Mỗi package backend dùng dotenv-flow. Giá trị NODE_ENV quyết định file nào được nạp:
| File | Mục đích | Bị gitignore |
|---|---|---|
.env.development | Dev server (bun run server:dev) | Thường là không |
.env.local | Override cá nhân | Có |
.env.test | Test suite (bun run test) | Thường là có |
Để cài đặt một package mới, hãy sao chép từ một package đã hoạt động và điều chỉnh cổng / tên dịch vụ / Snowflake ID.
Các script npm của mỗi package truyền file env một cách tường minh:
json
"server:dev": "NODE_ENV=development bun run start --env-file=.env.development"Biến chung (Tất cả dịch vụ)
Các biến này được dùng chung cho mọi dịch vụ backend.
Application
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_APPLICATION_NAME | Có | Tên dịch vụ (dùng trong logging, service discovery) | identity |
APP_ENV_APPLICATION_CODE | Có | Mã dịch vụ duy nhất | SVC-00010-IDENTITY |
APP_ENV_APPLICATION_ROLES | Có | Tag vai trò dịch vụ | identity |
APP_ENV_APPLICATION_TIMEZONE | Có | Múi giờ | Asia/Ho_Chi_Minh |
APP_ENV_APPLICATION_SECRET | Có | Secret dùng chung cho mã hóa payload AES-256-GCM (hệ thống chứng chỉ, mã hóa thông tin xác thực). Phải giống hệt nhau giữa tất cả các dịch vụ. | — |
APP_ENV_APPLICATION_DS_MIGRATION | Không | Tên datasource migration | pg_core |
APP_ENV_APPLICATION_DS_AUTHORIZE | Không | Tên datasource authorization | pg_core |
Server
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_SERVER_HOST | Có | Host bind | localhost |
APP_ENV_SERVER_PORT | Có | Cổng bind (duy nhất theo từng dịch vụ) | 31010 |
APP_ENV_SERVER_BASE_PATH | Có | Base path API | /v1/api/identity |
Snowflake ID
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_SNOWFLAKE_WORKER_ID | Có | Worker ID duy nhất (0-1023). Phải duy nhất theo từng instance đang chạy — trùng lặp sẽ gây ID trùng. | 1 |
APP_ENV_SNOWFLAKE_EPOCH_CHECKPOINT | Có | Mốc bắt đầu epoch (ms tính từ Unix epoch) | 1735689600000 |
PostgreSQL
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_POSTGRES_HOST | Có | Host database | localhost |
APP_ENV_POSTGRES_PORT | Có | Cổng database | 5432 |
APP_ENV_POSTGRES_DATABASE | Có | Tên database | nx_seller |
APP_ENV_POSTGRES_USERNAME | Có | User DB | postgres |
APP_ENV_POSTGRES_PASSWORD | Có | Mật khẩu DB | — |
Redis (Cache)
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_CACHE_REDIS_MODE | Có | single hoặc cluster | cluster |
APP_ENV_CACHE_REDIS_IDENTIFIER | Có | Tên logic | cache |
APP_ENV_CACHE_REDIS_PASSWORD | Không | Mật khẩu Redis | — |
APP_ENV_CACHE_REDIS_HOST | Chế độ single | Host Redis | localhost |
APP_ENV_CACHE_REDIS_PORT | Chế độ single | Cổng Redis | 6379 |
APP_ENV_CACHE_REDIS_CLUSTER_NODES | Chế độ cluster | host:port cách nhau bằng dấu phẩy | node1:6379,node2:6380 |
Redis (BullMQ / Queue)
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_BULLMQ_REDIS_HOST | Nếu dùng queue | Host Redis cho BullMQ | localhost |
APP_ENV_BULLMQ_REDIS_PORT | Nếu dùng queue | Cổng Redis | 6379 |
APP_ENV_BULLMQ_REDIS_PASSWORD | Không | Mật khẩu Redis | — |
Dịch vụ Bên ngoài
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_IDENTITY_SERVICE_BASE_URL | Có (tất cả verifier) | URL dịch vụ identity cho JWKS | http://localhost:31010/v1/api/identity |
APP_ENV_JWKS_REST_PATH | Không | Đường dẫn endpoint JWKS | /jw-certs (mặc định) |
APP_ENV_BASIC_AUTH_USERNAME | Không | User HTTP Basic auth | superadmin |
APP_ENV_BASIC_AUTH_PASSWORD | Không | Mật khẩu HTTP Basic auth | — |
Logging
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_LOGGER_FOLDER_PATH | Không | Thư mục output file log | ./app_data/logs |
APP_ENV_PARSE_RESULT_FOLDER_PATH | Không | Output kết quả parse | ./app_data/parse_result |
Khác
| Biến | Mô tả | Ví dụ |
|---|---|---|
DEBUG | Bật output debug | true |
NODE_ENV | Môi trường runtime | development |
RUN_MODE | startup hoặc migrate | startup |
TZ | Múi giờ hệ thống | Asia/Ho_Chi_Minh |
Chỉ Dịch vụ Identity (JWKS Issuer)
Các biến này chỉ cần cho @nx/identity — JWKS issuer.
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_JWT_EXPIRES_IN | Có | Thời gian sống của JWT tính bằng giây | 86400 (1 ngày) |
APP_ENV_JWKS_ALGORITHM | Có | Thuật toán ký | ES256 |
APP_ENV_JWKS_PRIVATE_KEY | Có | Private key ECDSA (PEM, định dạng PKCS#8) | -----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY----- |
APP_ENV_JWKS_PUBLIC_KEY | Có | Public key ECDSA (PEM) | -----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY----- |
Bắt buộc PKCS#8
Private key phải dùng định dạng PKCS#8 (-----BEGIN PRIVATE KEY-----), không phải SEC1 (-----BEGIN EC PRIVATE KEY-----). Tạo bằng:
bash
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 \
| tee private.pem | openssl pkey -pubout > public.pemDịch vụ Licensing
| Biến | Bắt buộc | Mô tả | Mặc định |
|---|---|---|---|
APP_ENV_LICENSING_ED25519_PRIVATE_KEY | Không* | Private key Ed25519 PEM để ký chứng chỉ | — |
APP_ENV_LICENSING_ED25519_PUBLIC_KEY | Không* | Public key Ed25519 PEM để xác thực | — |
APP_ENV_LICENSING_CERT_TTL_SECONDS | Không | TTL chứng chỉ (ghi vào Redis + payload) | 86400 |
* Nếu thiếu, publishCertificate() sẽ bỏ qua một cách im lặng — license vẫn được phát hành nhưng không có chứng chỉ.
Dịch vụ Signal (WebSocket)
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_WEBSOCKET_REDIS_MODE | Có | single hoặc cluster | single |
APP_ENV_WEBSOCKET_REDIS_HOST | Chế độ single | Host Redis WebSocket | localhost |
APP_ENV_WEBSOCKET_REDIS_PORT | Chế độ single | Cổng Redis WebSocket | 6379 |
APP_ENV_WEBSOCKET_ECDH_INFO | Có | Chuỗi info HKDF cho mã hóa E2E | — |
Dịch vụ Asset (S3 / MinIO)
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_MINIO_HOST | Có | Host lưu trữ tương thích S3 | localhost |
APP_ENV_MINIO_API_PORT | Có | Cổng API S3 | 9000 |
APP_ENV_MINIO_ACCESS_KEY | Có | Access key S3 | — |
APP_ENV_MINIO_SECRET_KEY | Có | Secret key S3 | — |
Dịch vụ Search (Typesense)
| Biến | Bắt buộc | Mô tả | Ví dụ |
|---|---|---|---|
APP_ENV_TYPESENSE_API_KEY | Có | API key Typesense | — |
APP_ENV_TYPESENSE_NODES | Có | Danh sách node (protocol:host:port) | http:localhost:8108 |
Commerce / URL Liên dịch vụ
| Biến | Mục đích | Ví dụ |
|---|---|---|
APP_ENV_COMMERCE_SERVICE_BASE_URL | Base API Commerce cho các cuộc gọi liên dịch vụ | http://localhost:31020/v1/api/commerce |
Dịch vụ Payment
| Biến | Mô tả |
|---|---|
APP_ENV_MQ_PAY_MODE | Chế độ triển khai: full (mặc định), api (chỉ REST), worker (chỉ BullMQ) |
Tham khảo Nhanh Danh mục Dịch vụ
| Dịch vụ | APPLICATION_NAME | APPLICATION_CODE | SERVER_PORT | SNOWFLAKE_WORKER_ID | SERVER_BASE_PATH |
|---|---|---|---|---|---|
| identity | identity | SVC-00010-IDENTITY | 31010 | 1 | /v1/api/identity |
| commerce | commerce | SVC-00020-COMMERCE | 31020 | 2 | /v1/api/commerce |
| sale | sale | SVC-00030-SALE | 31030 | 3 | /v1/api/sale |
| finance | finance | SVC-00040-FINANCE | 31040 | 4 | /v1/api/finance |
| inventory | inventory | SVC-00050-INVENTORY | 31050 | 5 | /v1/api/inventory |
| ledger | ledger | SVC-00060-LEDGER | 31060 | 6 | /v1/api/ledger |
| pricing | pricing | SVC-00070-PRICING | 31070 | 7 | /v1/api/pricing |
| payment | payment | SVC-00080-PAYMENT | 31080 | 8 | /v1/api/payment |
| signal | signal | SVC-00090-SIGNAL | 31090 | 9 | /v1/api/signal |
| outreach | outreach | SVC-00110-OUTREACH | 31110 | 10 | /v1/api/outreach |
| licensing | licensing | SVC-00140-LICENSING | 31120 | 11 | /v1/api/licensing |
| taxation | taxation | SVC-00130-TAXATION | 31130 | 13 | /v1/api/taxation |
Trang Liên quan
| Trang | Mô tả |
|---|---|
| Bắt đầu | Hướng dẫn cài đặt |
| Hệ thống Build | Target Make |
| IGNIS Patterns | Pattern cấu hình framework |
| Licensing — Chứng chỉ | Cách APP_ENV_APPLICATION_SECRET được dùng cho mã hóa chứng chỉ |