feat(config): implement layered configuration using config.yaml and .env
This commit is contained in:
112
README.md
112
README.md
@@ -111,26 +111,64 @@ go run main.go
|
||||
|
||||
服务器将在 http://localhost:3000 上运行。
|
||||
|
||||
### 5. 环境变量配置
|
||||
### 5. 配置管理
|
||||
|
||||
项目支持以下环境变量(按优先级排序):
|
||||
项目采用 **YAML 结构化管理 + 环境变量动态覆盖** 的方案:
|
||||
|
||||
| 变量名 | 说明 | 默认值 |
|
||||
|--------|------|--------|
|
||||
| `PORT` | 服务器端口 | 3000 |
|
||||
| `ENVIRONMENT` | 运行环境 (development/production) | development |
|
||||
| `JWT_SECRET` | JWT 签名密钥 | your-secret-key-here-change-in-production |
|
||||
| `JWT_EXPIRE` | JWT 过期时间(秒) | 7200 |
|
||||
| `DATABASE_DRIVER` | 数据库驱动 (sqlite/postgres) | sqlite |
|
||||
| `DATABASE_PATH` | SQLite 数据库路径 | ./data/database.sqlite |
|
||||
| `POSTGRES_HOST` | PostgreSQL 主机 | localhost |
|
||||
| `POSTGRES_PORT` | PostgreSQL 端口 | 5432 |
|
||||
| `POSTGRES_USER` | PostgreSQL 用户名 | trace |
|
||||
| `POSTGRES_PASSWORD` | PostgreSQL 密码 | trace123 |
|
||||
| `POSTGRES_DB` | PostgreSQL 数据库名 | trace |
|
||||
| `POSTGRES_SSLMODE` | PostgreSQL SSL 模式 | disable |
|
||||
#### 配置文件优先级(从高到低)
|
||||
|
||||
**注意**: 环境变量也可以通过 `.env` 文件设置。
|
||||
1. **环境变量** (最高优先级) - 格式:`APP_配置项`
|
||||
2. **.env 文件** - 本地开发环境配置
|
||||
3. **config.yaml** - 默认配置文件
|
||||
4. **内置默认值** (最低优先级)
|
||||
|
||||
#### 环境变量命名规则
|
||||
|
||||
所有环境变量使用 `APP_` 前缀,多级配置使用 `_` 连接:
|
||||
|
||||
```bash
|
||||
# 示例
|
||||
APP_SERVER_PORT=8080 # 覆盖 server.port
|
||||
APP_DATABASE_DRIVER=postgres # 覆盖 database.driver
|
||||
APP_DATABASE_POSTGRES_HOST=db.com # 覆盖 database.postgres.host
|
||||
APP_JWT_SECRET=my-secret-key # 覆盖 jwt.secret
|
||||
```
|
||||
|
||||
#### 常用配置项
|
||||
|
||||
| 环境变量 | 对应配置项 | 说明 | 默认值 |
|
||||
|---------|-----------|------|--------|
|
||||
| `APP_SERVER_PORT` | server.port | 服务器端口 | 3000 |
|
||||
| `APP_SERVER_ENVIRONMENT` | server.environment | 运行环境 | development |
|
||||
| `APP_DATABASE_DRIVER` | database.driver | 数据库驱动 | sqlite |
|
||||
| `APP_DATABASE_SQLITE_PATH` | database.sqlite.path | SQLite 路径 | ./data/database.sqlite |
|
||||
| `APP_DATABASE_POSTGRES_HOST` | database.postgres.host | PostgreSQL 主机 | localhost |
|
||||
| `APP_DATABASE_POSTGRES_PORT` | database.postgres.port | PostgreSQL 端口 | 5432 |
|
||||
| `APP_DATABASE_POSTGRES_USER` | database.postgres.user | PostgreSQL 用户名 | trace |
|
||||
| `APP_DATABASE_POSTGRES_PASSWORD` | database.postgres.password | PostgreSQL 密码 | trace123 |
|
||||
| `APP_DATABASE_POSTGRES_DBNAME` | database.postgres.dbname | PostgreSQL 数据库名 | trace |
|
||||
| `APP_JWT_SECRET` | jwt.secret | JWT 签名密钥 | your-secret-key... |
|
||||
| `APP_JWT_EXPIRE` | jwt.expire | JWT 过期时间(秒) | 7200 |
|
||||
|
||||
#### 快速配置示例
|
||||
|
||||
**开发环境(.env)**:
|
||||
```bash
|
||||
# 使用 SQLite
|
||||
DATABASE_DRIVER=sqlite
|
||||
DATABASE_PATH=./data/dev.sqlite
|
||||
```
|
||||
|
||||
**生产环境(环境变量)**:
|
||||
```bash
|
||||
# 使用 PostgreSQL
|
||||
export APP_SERVER_PORT=8080
|
||||
export APP_SERVER_ENVIRONMENT=production
|
||||
export APP_DATABASE_DRIVER=postgres
|
||||
export APP_DATABASE_POSTGRES_HOST=prod-db.example.com
|
||||
export APP_DATABASE_POSTGRES_PASSWORD=secure-password
|
||||
export APP_JWT_SECRET=your-production-secret-key
|
||||
```
|
||||
|
||||
### 6. 测试 API
|
||||
|
||||
@@ -243,33 +281,29 @@ CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o trace-backend
|
||||
|
||||
### SQLite 到 PostgreSQL 的迁移
|
||||
|
||||
1. 修改配置文件 `config.yaml` 中的数据库驱动:
|
||||
|
||||
```yaml
|
||||
database:
|
||||
driver: postgres
|
||||
postgres:
|
||||
host: localhost
|
||||
port: 5432
|
||||
user: trace
|
||||
password: trace123
|
||||
dbname: trace
|
||||
sslmode: disable
|
||||
```
|
||||
|
||||
2. 或者使用环境变量:
|
||||
修改 `.env` 文件中的数据库配置:
|
||||
|
||||
```bash
|
||||
# 将数据库驱动改为 postgres
|
||||
DATABASE_DRIVER=postgres
|
||||
|
||||
# PostgreSQL 配置
|
||||
POSTGRES_HOST=localhost
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_USER=trace
|
||||
POSTGRES_PASSWORD=trace123
|
||||
POSTGRES_DB=trace
|
||||
POSTGRES_SSLMODE=disable
|
||||
```
|
||||
|
||||
然后重新启动应用即可:
|
||||
|
||||
```bash
|
||||
DATABASE_DRIVER=postgres \
|
||||
POSTGRES_HOST=localhost \
|
||||
POSTGRES_PORT=5432 \
|
||||
POSTGRES_USER=trace \
|
||||
POSTGRES_PASSWORD=trace123 \
|
||||
POSTGRES_DB=trace \
|
||||
POSTGRES_SSLMODE=disable \
|
||||
./trace-backend
|
||||
```
|
||||
|
||||
**注意**: 切换数据库后,原有 SQLite 中的数据不会自动迁移到 PostgreSQL。需要使用数据库迁移工具(如 pgloader)手动迁移数据。
|
||||
|
||||
## 贡献指南
|
||||
|
||||
1. 克隆项目
|
||||
|
||||
Reference in New Issue
Block a user