Biến Môi trường
Thông tin Tài liệu
| Trường | Giá trị |
|---|---|
| Tệp Nguồn | packages/core/src/common/environments.ts (93 dòng) |
| Lớp | EnvironmentKeys extends BaseEnvironmentKeys |
| Tổng số Biến | 65+ (11 kế thừa + 54 dành riêng cho ứng dụng) |
| Framework | Biến Môi trường IGNIS |
1. Tổng quan
Lớp EnvironmentKeys trong @nx/core mở rộng BaseEnvironmentKeys của framework IGNIS để định nghĩa tất cả biến môi trường được sử dụng trên các dịch vụ BANA. Mọi biến tuân theo quy ước tiền tố APP_ENV_.
import { EnvironmentKeys as BaseEnvironmentKeys } from '@venizia/ignis';
export class EnvironmentKeys extends BaseEnvironmentKeys {
static readonly APP_ENV_NODE_ENV = 'APP_ENV_NODE_ENV';
// ... 54 application-specific keys
}Chuỗi kế thừa:
BaseEnvironmentKeys (IGNIS) ← Application, JWT, Server, PostgreSQL
└── EnvironmentKeys (@nx/core) ← Redis, Minio, Mail, WebSocket, Kafka, etc.Tất cả biến được truy cập qua applicationEnvironment.get():
import { applicationEnvironment } from '@venizia/ignis';
import { EnvironmentKeys } from '@nx/core';
const host = applicationEnvironment.get<string>(EnvironmentKeys.APP_ENV_POSTGRES_HOST);Để tham khảo đầy đủ các biến cơ sở IGNIS, xem tài liệu Biến Môi trường IGNIS.
2. Kế thừa từ IGNIS (BaseEnvironmentKeys)
Các biến này được định nghĩa trong framework IGNIS và được EnvironmentKeys kế thừa thông qua mở rộng lớp. Chúng có sẵn trong mọi dịch vụ BANA mà không cần khai báo lại.
Ứng dụng
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_APPLICATION_NAME | string | APP | Tên ứng dụng dùng trong log và nhận dạng |
APP_ENV_APPLICATION_SECRET | string | -- | Khóa bí mật mã hóa ứng dụng cho mã hóa payload JWT |
APP_ENV_APPLICATION_TIMEZONE | string | Asia/Ho_Chi_Minh | Múi giờ mặc định cho thao tác ngày tháng |
APP_ENV_APPLICATION_ROLES | string | -- | Danh sách phân cách bằng dấu phẩy các định danh vai trò ứng dụng |
Xác thực JWT
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_JWT_SECRET | string | -- | Khóa bí mật để ký token JWT |
APP_ENV_JWT_EXPIRES_IN | number | 86400 | Thời gian hết hạn token JWT tính bằng giây (mặc định 24 giờ) |
Máy chủ
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_SERVER_HOST | string | localhost | Địa chỉ bind máy chủ |
APP_ENV_SERVER_PORT | number | 3000 | Cổng lắng nghe máy chủ |
APP_ENV_SERVER_BASE_PATH | string | / | Tiền tố đường dẫn cơ sở cho tất cả route |
PostgreSQL
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_POSTGRES_HOST | string | localhost | Host máy chủ PostgreSQL |
APP_ENV_POSTGRES_PORT | number | 5432 | Cổng máy chủ PostgreSQL |
APP_ENV_POSTGRES_DATABASE | string | -- | Tên cơ sở dữ liệu |
APP_ENV_POSTGRES_USERNAME | string | postgres | Tên người dùng cơ sở dữ liệu |
APP_ENV_POSTGRES_PASSWORD | string | -- | Mật khẩu cơ sở dữ liệu |
3. Ứng dụng
Các biến dành riêng cho cấu hình ứng dụng BANA.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_NODE_ENV | string | development | Môi trường runtime (development, test, staging, production) |
APP_ENV_APPLICATION_EXPLORER_URL | string | -- | URL cho API explorer / Swagger UI |
APP_ENV_PARSE_RESULT_FOLDER_PATH | string | -- | Đường dẫn thư mục tạm cho kết quả phân tích tệp |
4. Bộ Tạo Snowflake ID
Cấu hình cho bộ tạo Snowflake ID phân tán. Mỗi instance dịch vụ phải có worker ID duy nhất để tránh xung đột.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_SNOWFLAKE_WORKER_ID | number | -- | Worker ID duy nhất (0--1023) cho instance dịch vụ này |
APP_ENV_SNOWFLAKE_EPOCH_CHECKPOINT | number | -- | Dấu thời gian epoch tùy chỉnh tính bằng millisecond (ví dụ: 1704067200000 cho 2024-01-01) |
5. Minio (Lưu trữ Tương thích S3)
Cài đặt kết nối cho lưu trữ đối tượng MinIO, được dịch vụ asset sử dụng cho tải lên tệp và tạo URL có chữ ký.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_MINIO_HOST | string | -- | Tên host máy chủ MinIO |
APP_ENV_MINIO_API_PORT | number | 9000 | Cổng API MinIO |
APP_ENV_MINIO_ACCESS_KEY | string | -- | ID khóa truy cập MinIO |
APP_ENV_MINIO_SECRET_KEY | string | -- | Khóa truy cập bí mật MinIO |
6. Redis -- BullMQ (Hàng đợi Công việc)
Kết nối Redis chuyên dụng cho hàng đợi công việc BullMQ. Được sử dụng bởi các dịch vụ xử lý công việc nền (sale, payment, finance, mq-pay).
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_BULLMQ_REDIS_IDENTIFIER | string | -- | Định danh kết nối cho log và chẩn đoán |
APP_ENV_BULLMQ_REDIS_HOST | string | -- | Host Redis cho BullMQ |
APP_ENV_BULLMQ_REDIS_PORT | number | 6379 | Cổng Redis |
APP_ENV_BULLMQ_REDIS_DB | number | 0 | Số cơ sở dữ liệu Redis |
APP_ENV_BULLMQ_REDIS_PASSWORD | string | -- | Mật khẩu Redis (tùy chọn nếu không có xác thực) |
APP_ENV_BULLMQ_REDIS_MAX_RETRY | number | -- | Số lần thử kết nối lại tối đa |
7. Redis -- Cache
Kết nối Redis chuyên dụng cho bộ nhớ đệm ứng dụng. Được sử dụng bởi các dịch vụ để cache tra cứu (ví dụ: loại theo dõi kho, cấu hình thanh toán).
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_CACHE_REDIS_IDENTIFIER | string | -- | Định danh kết nối cho log và chẩn đoán |
APP_ENV_CACHE_REDIS_HOST | string | -- | Host Redis cho bộ nhớ đệm |
APP_ENV_CACHE_REDIS_PORT | number | 6379 | Cổng Redis |
APP_ENV_CACHE_REDIS_DB | number | 0 | Số cơ sở dữ liệu Redis |
APP_ENV_CACHE_REDIS_PASSWORD | string | -- | Mật khẩu Redis (tùy chọn nếu không có xác thực) |
APP_ENV_CACHE_REDIS_MAX_RETRY | number | -- | Số lần thử kết nối lại tối đa |
8. Redis -- PubSub Subscriber
Kết nối Redis chuyên dụng cho phía subscriber của pub/sub. Được sử dụng bởi các dịch vụ lắng nghe sự kiện liên dịch vụ (ví dụ: finance lắng nghe sự kiện payment).
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_IDENTIFIER | string | -- | Định danh kết nối cho log và chẩn đoán |
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_HOST | string | -- | Host Redis cho subscriber |
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_PORT | number | 6379 | Cổng Redis |
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_DB | number | 0 | Số cơ sở dữ liệu Redis |
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_PASSWORD | string | -- | Mật khẩu Redis (tùy chọn nếu không có xác thực) |
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_MAX_RETRY | number | -- | Số lần thử kết nối lại tối đa |
9. Redis -- PubSub Publisher
Kết nối Redis chuyên dụng cho phía publisher của pub/sub. Được sử dụng bởi các dịch vụ phát sự kiện liên dịch vụ (ví dụ: payment phát sự kiện thanh toán thành công).
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_PUBSUB_PUBLISHER_REDIS_IDENTIFIER | string | -- | Định danh kết nối cho log và chẩn đoán |
APP_ENV_PUBSUB_PUBLISHER_REDIS_HOST | string | -- | Host Redis cho publisher |
APP_ENV_PUBSUB_PUBLISHER_REDIS_PORT | number | 6379 | Cổng Redis |
APP_ENV_PUBSUB_PUBLISHER_REDIS_DB | number | 0 | Số cơ sở dữ liệu Redis |
APP_ENV_PUBSUB_PUBLISHER_REDIS_PASSWORD | string | -- | Mật khẩu Redis (tùy chọn nếu không có xác thực) |
APP_ENV_PUBSUB_PUBLISHER_REDIS_MAX_RETRY | number | -- | Số lần thử kết nối lại tối đa |
10. Redis -- WebSocket
Kết nối Redis cho phân phối tin nhắn WebSocket liên instance. Hỗ trợ cả chế độ đơn node và cluster. Được sử dụng riêng bởi dịch vụ @nx/signal.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_WEBSOCKET_REDIS_MODE | string | single | Chế độ Redis: single hoặc cluster |
APP_ENV_WEBSOCKET_REDIS_IDENTIFIER | string | -- | Định danh kết nối (chế độ single) |
APP_ENV_WEBSOCKET_REDIS_HOST | string | -- | Host Redis (chế độ single) |
APP_ENV_WEBSOCKET_REDIS_PORT | number | 6379 | Cổng Redis (chế độ single) |
APP_ENV_WEBSOCKET_REDIS_DB | number | 0 | Số cơ sở dữ liệu Redis (chế độ single) |
APP_ENV_WEBSOCKET_REDIS_PASSWORD | string | -- | Mật khẩu Redis (chế độ single, tùy chọn) |
APP_ENV_WEBSOCKET_REDIS_MAX_RETRY | number | -- | Số lần thử kết nối lại tối đa (chế độ single) |
APP_ENV_WEBSOCKET_REDIS_CLUSTER_IDENTIFIER | string | -- | Định danh kết nối (chế độ cluster) |
APP_ENV_WEBSOCKET_REDIS_CLUSTER_NODES | string | -- | Địa chỉ các node cluster phân cách bằng dấu phẩy (ví dụ: node1:6379,node2:6379,node3:6379) |
Ví dụ chế độ single:
APP_ENV_WEBSOCKET_REDIS_MODE=single
APP_ENV_WEBSOCKET_REDIS_HOST=localhost
APP_ENV_WEBSOCKET_REDIS_PORT=6379
APP_ENV_WEBSOCKET_REDIS_DB=0Ví dụ chế độ cluster:
APP_ENV_WEBSOCKET_REDIS_MODE=cluster
APP_ENV_WEBSOCKET_REDIS_CLUSTER_NODES=redis-node1:6379,redis-node2:6379,redis-node3:637911. Mã hóa WebSocket ECDH
Tham số mã hóa cho trao đổi khóa ECDH P-256 được sử dụng bởi dịch vụ signal. Giá trị này được dùng làm tham số info trong dẫn xuất khóa HKDF để tạo khóa mã hóa AES-256-GCM dùng chung.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_WEBSOCKET_ECDH_INFO | string | -- | Chuỗi info HKDF cho dẫn xuất khóa chia sẻ ECDH |
12. Mail (SMTP)
Cấu hình SMTP và OAuth2 cho thành phần email. Hỗ trợ xác thực SMTP cơ bản và Gmail OAuth2.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_MAIL_HOST | string | smtp.gmail.com | Tên host máy chủ SMTP |
APP_ENV_MAIL_PORT | number | 465 | Cổng máy chủ SMTP |
APP_ENV_MAIL_SECURE | boolean | true | Bật TLS cho kết nối SMTP |
APP_ENV_MAIL_USER | string | -- | Tên người dùng SMTP hoặc địa chỉ email người gửi |
APP_ENV_MAIL_CLIENT_ID | string | -- | OAuth2 client ID (cho Gmail) |
APP_ENV_MAIL_CLIENT_SECRET | string | -- | OAuth2 client secret |
APP_ENV_MAIL_REFRESH_TOKEN | string | -- | OAuth2 refresh token |
APP_ENV_MAIL_QUEUE_TYPE | string | internal | Kiểu hàng đợi cho gửi mail (internal hoặc hàng đợi bên ngoài) |
APP_ENV_MAIL_INTERNAL_QUEUE_IDENTIFIER | string | -- | Định danh cho hàng đợi mail nội bộ |
13. URL Dịch vụ (Giao tiếp Liên Dịch vụ)
URL cơ sở cho giao tiếp HTTP liên dịch vụ qua IdentityNetworkService và các dịch vụ mạng khác.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_IDENTITY_SERVICE_BASE_URL | string | -- | URL cơ sở dịch vụ Identity (ví dụ: http://localhost:3001) |
APP_ENV_COMMERCE_SERVICE_BASE_URL | string | -- | URL cơ sở dịch vụ Commerce (ví dụ: http://localhost:3002) |
14. T-VAN / IIAPI (Hóa đơn Điện tử Việt Nam)
Cấu hình cho tích hợp hóa đơn điện tử Việt Nam.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_VNPAY_IIAPI_CLIENT_NAME | string | -- | Định danh client có tên cho registry IIAPI |
APP_ENV_VNPAY_TVAN_API_KEY | string | -- | API key cho xác thực dịch vụ T-VAN |
15. Kafka
Cài đặt kết nối Apache Kafka cho truyền phát sự kiện. Được sử dụng khi nhắn tin dựa trên Kafka được bật.
| Biến | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
APP_ENV_KAFKA_BROKERS | string | -- | Địa chỉ broker phân cách bằng dấu phẩy (ví dụ: kafka1:9092,kafka2:9092) |
APP_ENV_KAFKA_CLIENT_ID | string | -- | Định danh Kafka client |
APP_ENV_KAFKA_GROUP_ID | string | -- | Định danh nhóm consumer |
16. Tải Tệp Môi trường
BANA sử dụng dotenv-flow để tải biến môi trường. Mỗi gói duy trì tập hợp tệp .env riêng.
Cấu trúc Tệp
packages/<service>/
├── .env # Base defaults (committed)
├── .env.local # Local overrides (gitignored)
├── .env.development # Development environment
├── .env.test # Test environment
├── .env.staging # Staging environment
├── .env.production # Production environment
└── .env.example # Template for team reference (committed)Thứ tự Tải (dotenv-flow)
Các tệp được tải theo thứ tự sau. Tệp sau ghi đè tệp trước:
.env-- giá trị mặc định cơ sở.env.local-- ghi đè cục bộ.env.{NODE_ENV}-- giá trị dành riêng cho môi trường (ví dụ:.env.development).env.{NODE_ENV}.local-- ghi đè cục bộ dành riêng cho môi trường
17. Tệp .env.example Đầy đủ
# =============================================
# NX-SELLER ENVIRONMENT VARIABLES
# =============================================
# Copy this file to .env.development and fill in values.
# =============================================
# APPLICATION
# =============================================
APP_ENV_NODE_ENV=development
APP_ENV_APPLICATION_NAME=my-service
APP_ENV_APPLICATION_SECRET=generate-a-strong-random-secret
APP_ENV_APPLICATION_EXPLORER_URL=
APP_ENV_APPLICATION_TIMEZONE=Asia/Ho_Chi_Minh
APP_ENV_PARSE_RESULT_FOLDER_PATH=/tmp/parsed-results
# =============================================
# SERVER
# =============================================
APP_ENV_SERVER_HOST=0.0.0.0
APP_ENV_SERVER_PORT=3000
APP_ENV_SERVER_BASE_PATH=/v1/api
# =============================================
# JWT AUTHENTICATION
# =============================================
APP_ENV_JWT_SECRET=generate-another-strong-random-secret
APP_ENV_JWT_EXPIRES_IN=86400
# =============================================
# POSTGRESQL
# =============================================
APP_ENV_POSTGRES_HOST=localhost
APP_ENV_POSTGRES_PORT=5432
APP_ENV_POSTGRES_DATABASE=bana
APP_ENV_POSTGRES_USERNAME=postgres
APP_ENV_POSTGRES_PASSWORD=password
# =============================================
# SNOWFLAKE ID GENERATOR
# =============================================
APP_ENV_SNOWFLAKE_WORKER_ID=1
APP_ENV_SNOWFLAKE_EPOCH_CHECKPOINT=1704067200000
# =============================================
# MINIO (S3-Compatible Storage)
# =============================================
APP_ENV_MINIO_HOST=localhost
APP_ENV_MINIO_API_PORT=9000
APP_ENV_MINIO_ACCESS_KEY=minioadmin
APP_ENV_MINIO_SECRET_KEY=minioadmin
# =============================================
# REDIS - BullMQ (Job Queues)
# =============================================
APP_ENV_BULLMQ_REDIS_IDENTIFIER=bullmq
APP_ENV_BULLMQ_REDIS_HOST=localhost
APP_ENV_BULLMQ_REDIS_PORT=6379
APP_ENV_BULLMQ_REDIS_DB=1
APP_ENV_BULLMQ_REDIS_PASSWORD=
APP_ENV_BULLMQ_REDIS_MAX_RETRY=5
# =============================================
# REDIS - Cache
# =============================================
APP_ENV_CACHE_REDIS_IDENTIFIER=cache
APP_ENV_CACHE_REDIS_HOST=localhost
APP_ENV_CACHE_REDIS_PORT=6379
APP_ENV_CACHE_REDIS_DB=0
APP_ENV_CACHE_REDIS_PASSWORD=
APP_ENV_CACHE_REDIS_MAX_RETRY=5
# =============================================
# REDIS - PubSub Subscriber
# =============================================
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_IDENTIFIER=pubsub-subscriber
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_HOST=localhost
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_PORT=6379
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_DB=0
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_PASSWORD=
APP_ENV_PUBSUB_SUBSCRIBER_REDIS_MAX_RETRY=5
# =============================================
# REDIS - PubSub Publisher
# =============================================
APP_ENV_PUBSUB_PUBLISHER_REDIS_IDENTIFIER=pubsub-publisher
APP_ENV_PUBSUB_PUBLISHER_REDIS_HOST=localhost
APP_ENV_PUBSUB_PUBLISHER_REDIS_PORT=6379
APP_ENV_PUBSUB_PUBLISHER_REDIS_DB=0
APP_ENV_PUBSUB_PUBLISHER_REDIS_PASSWORD=
APP_ENV_PUBSUB_PUBLISHER_REDIS_MAX_RETRY=5
# =============================================
# REDIS - WebSocket (Single Mode)
# =============================================
APP_ENV_WEBSOCKET_REDIS_MODE=single
APP_ENV_WEBSOCKET_REDIS_IDENTIFIER=websocket
APP_ENV_WEBSOCKET_REDIS_HOST=localhost
APP_ENV_WEBSOCKET_REDIS_PORT=6379
APP_ENV_WEBSOCKET_REDIS_DB=0
APP_ENV_WEBSOCKET_REDIS_PASSWORD=
APP_ENV_WEBSOCKET_REDIS_MAX_RETRY=5
# REDIS - WebSocket (Cluster Mode — uncomment to use)
# APP_ENV_WEBSOCKET_REDIS_MODE=cluster
# APP_ENV_WEBSOCKET_REDIS_CLUSTER_IDENTIFIER=websocket-cluster
# APP_ENV_WEBSOCKET_REDIS_CLUSTER_NODES=node1:6379,node2:6379,node3:6379
# =============================================
# WEBSOCKET ECDH ENCRYPTION
# =============================================
APP_ENV_WEBSOCKET_ECDH_INFO=bana-websocket-encryption
# =============================================
# MAIL (SMTP / Gmail OAuth2)
# =============================================
APP_ENV_MAIL_HOST=smtp.gmail.com
APP_ENV_MAIL_PORT=465
APP_ENV_MAIL_SECURE=true
APP_ENV_MAIL_USER=noreply@example.com
APP_ENV_MAIL_CLIENT_ID=
APP_ENV_MAIL_CLIENT_SECRET=
APP_ENV_MAIL_REFRESH_TOKEN=
APP_ENV_MAIL_QUEUE_TYPE=internal
APP_ENV_MAIL_INTERNAL_QUEUE_IDENTIFIER=
# =============================================
# INTER-SERVICE COMMUNICATION
# =============================================
APP_ENV_IDENTITY_SERVICE_BASE_URL=http://localhost:3001
APP_ENV_COMMERCE_SERVICE_BASE_URL=http://localhost:3002
# =============================================
# T-VAN / IIAPI (Vietnam E-Invoice)
# =============================================
APP_ENV_VNPAY_IIAPI_CLIENT_NAME=
APP_ENV_VNPAY_TVAN_API_KEY=
# =============================================
# KAFKA (Event Streaming)
# =============================================
APP_ENV_KAFKA_BROKERS=localhost:9092
APP_ENV_KAFKA_CLIENT_ID=bana
APP_ENV_KAFKA_GROUP_ID=bana-group18. Sử dụng trong Mã nguồn
Đọc Biến
import { applicationEnvironment } from '@venizia/ignis';
import { EnvironmentKeys } from '@nx/core';
// String value
const host = applicationEnvironment.get<string>(EnvironmentKeys.APP_ENV_POSTGRES_HOST);
// Number value (requires parsing)
const port = parseInt(
applicationEnvironment.get<string>(EnvironmentKeys.APP_ENV_POSTGRES_PORT) || '5432',
);
// Boolean value
const secure = applicationEnvironment.get<string>(EnvironmentKeys.APP_ENV_MAIL_SECURE) === 'true';
// With fallback default
const nodeEnv = applicationEnvironment.get<string>(EnvironmentKeys.APP_ENV_NODE_ENV)
?? 'development';Xác thực Khi Khởi động
function validateEnvironment() {
const required = [
EnvironmentKeys.APP_ENV_POSTGRES_HOST,
EnvironmentKeys.APP_ENV_POSTGRES_DATABASE,
EnvironmentKeys.APP_ENV_SNOWFLAKE_WORKER_ID,
EnvironmentKeys.APP_ENV_JWT_SECRET,
EnvironmentKeys.APP_ENV_APPLICATION_SECRET,
];
const missing = required.filter(key => !applicationEnvironment.get(key));
if (missing.length > 0) {
throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
}
}19. Thực hành Bảo mật Tốt nhất
Không Bao giờ Commit Bí mật
# .gitignore
.env.local
.env.*.local
.env.productionSử dụng Bí mật Khác nhau cho Mỗi Môi trường
# Development
APP_ENV_JWT_SECRET=dev-secret-not-for-production
# Production (from secret manager)
APP_ENV_JWT_SECRET=<from-vault-or-k8s-secret>Sử dụng Trình Quản lý Bí mật trong Production
# Kubernetes Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
stringData:
APP_ENV_JWT_SECRET: "production-jwt-secret"
APP_ENV_APPLICATION_SECRET: "production-app-secret"
APP_ENV_POSTGRES_PASSWORD: "production-db-password"Xoay vòng Bí mật Thường xuyên
Lên lịch xoay vòng thường xuyên cho:
APP_ENV_JWT_SECRETAPP_ENV_APPLICATION_SECRETAPP_ENV_POSTGRES_PASSWORDAPP_ENV_MINIO_SECRET_KEYAPP_ENV_MAIL_CLIENT_SECRETAPP_ENV_VNPAY_TVAN_API_KEY