环境变量
VEF Framework 支持通过环境变量覆盖配置文件中的设置。
环境变量命名规则
环境变量使用 VEF_ 前缀,配置路径用下划线分隔,全部大写:
配置路径: database.host
环境变量: VEF_DATABASE_HOST常用环境变量
应用配置
| 环境变量 | 配置路径 | 说明 |
|---|---|---|
VEF_APP_NAME | app.name | 应用名称 |
VEF_APP_ENV | app.env | 运行环境 |
VEF_APP_DEBUG | app.debug | 调试模式 |
服务器配置
| 环境变量 | 配置路径 | 说明 |
|---|---|---|
VEF_SERVER_HOST | server.host | 监听地址 |
VEF_SERVER_PORT | server.port | 监听端口 |
数据库配置
| 环境变量 | 配置路径 | 说明 |
|---|---|---|
VEF_DATABASE_HOST | database.host | 数据库主机 |
VEF_DATABASE_PORT | database.port | 数据库端口 |
VEF_DATABASE_DATABASE | database.database | 数据库名 |
VEF_DATABASE_USERNAME | database.username | 用户名 |
VEF_DATABASE_PASSWORD | database.password | 密码 |
Redis 配置
| 环境变量 | 配置路径 | 说明 |
|---|---|---|
VEF_REDIS_HOST | redis.host | Redis 主机 |
VEF_REDIS_PORT | redis.port | Redis 端口 |
VEF_REDIS_PASSWORD | redis.password | Redis 密码 |
JWT 配置
| 环境变量 | 配置路径 | 说明 |
|---|---|---|
VEF_AUTH_JWT_SECRET | auth.jwt.secret | JWT 密钥 |
VEF_AUTH_JWT_EXPIRATION | auth.jwt.expiration | Token 过期时间 |
使用示例
Docker 环境
dockerfile
FROM golang:1.21-alpine
ENV VEF_APP_ENV=production
ENV VEF_DATABASE_HOST=db
ENV VEF_DATABASE_PASSWORD=secret
ENV VEF_REDIS_HOST=redis
COPY . /app
WORKDIR /app
RUN go build -o main .
CMD ["./main"]Docker Compose
yaml
version: '3.8'
services:
app:
build: .
environment:
- VEF_APP_ENV=production
- VEF_DATABASE_HOST=db
- VEF_DATABASE_PASSWORD=${DB_PASSWORD}
- VEF_REDIS_HOST=redis
- VEF_AUTH_JWT_SECRET=${JWT_SECRET}
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
- MYSQL_DATABASE=myapp
redis:
image: redis:7-alpineKubernetes
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
VEF_APP_ENV: "production"
VEF_DATABASE_HOST: "mysql-service"
VEF_REDIS_HOST: "redis-service"
---
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
VEF_DATABASE_PASSWORD: "your-db-password"
VEF_AUTH_JWT_SECRET: "your-jwt-secret"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
template:
spec:
containers:
- name: app
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secrets优先级
配置加载优先级(从低到高):
- 默认配置 (
config.yaml) - 环境特定配置 (
config.{env}.yaml) - 环境变量
go
// Example: database.host resolution
// 1. config.yaml: database.host = "localhost"
// 2. config.prod.yaml: database.host = "db.internal"
// 3. VEF_DATABASE_HOST = "db.cluster.local"
// Final value: "db.cluster.local"