refactor: 连接配置统一迁移至 .env,config.yaml 仅作默认值

- 新增 .env.example 模板(DB/Redis/Server 全部连接信息)
- bindEnvOverride 补全 11 个环境变量绑定(原仅 2 个密码)
- README 和 deployment.md 改为 .env 优先流程
- 移除 systemd EnvironmentFile,统一读 WorkingDirectory/.env
This commit is contained in:
2026-06-22 02:49:24 +08:00
parent 786f463613
commit e7185f58fb
4 changed files with 80 additions and 58 deletions

View File

@ -1,6 +1,24 @@
# 复制为 .env 后填入真实值
# .env 会覆盖 config.yaml 中的同名字段
# ==================================
# MCE 环境变量配置模板
# 复制为 .env 后填入实际值
# cp .env.example .env
# ==================================
DATABASE_PASSWORD=your_password_here
JWT_SECRET=generate-a-random-64-char-string-here
REDIS_PASSWORD=your_redis_password_here
# --- 数据库 ---
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_USER=metazone
DATABASE_PASSWORD=
DATABASE_DBNAME=metalab_dev
DATABASE_SSLMODE=disable
# --- Redisenabled=false 时以下可忽略) ---
REDIS_ENABLED=true
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# --- 服务 ---
SERVER_PORT=8080
SERVER_MODE=debug

View File

@ -85,31 +85,29 @@ git clone git@git.metazone.cc:MetaZone/mce.git
cd mce
```
编辑 `config.yaml`,修改数据库和 Redis 连接信息
```yaml
database:
host: 127.0.0.1
port: 5432
user: metazone
password: "your_password" # 或用 .env 注入
dbname: metalab_dev # 提前创建此数据库
redis:
enabled: true # false 则使用内存存储,无需 Redis
host: 127.0.0.1
port: 6379
password: ""
```
敏感信息数据库密码、Redis 密码)可通过 `.env` 注入:
复制环境变量模板并填入实际值
```bash
# .envgit 不追踪)
DB_PASSWORD=your_password
REDIS_PASSWORD=your_redis_password
cp .env.example .env
```
编辑 `.env`,至少填入数据库密码:
```bash
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_USER=metazone
DATABASE_PASSWORD=your_password
DATABASE_DBNAME=metalab_dev
REDIS_ENABLED=true # 可选false 则使用内存存储
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
```
> 所有连接信息统一在 `.env` 管理。`config.yaml` 保留默认值兜底,通常无需修改。
### 2. 初始化数据库
```bash

View File

@ -30,33 +30,33 @@ done
## 3. 配置
复制并修改生产配置:
```bash
cp .env.example .env
```
编辑 `.env`,填入生产环境值:
```bash
cp config.yaml /etc/mce/config.yaml
# 服务
SERVER_MODE=release
# 数据库(生产实例地址)
DATABASE_HOST=10.0.0.1
DATABASE_PORT=5432
DATABASE_USER=metazone
DATABASE_PASSWORD=your_secure_password
DATABASE_DBNAME=metalab_prod
DATABASE_SSLMODE=require
# Redis
REDIS_ENABLED=true
REDIS_HOST=10.0.0.2
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
REDIS_DB=0
```
生产环境关键调整:
```yaml
server:
mode: release # 关闭 debug 日志
cookie_secure: true # HTTPS 下启用
session:
idle_timeout: 120 # 2 小时
remember_timeout: 43200 # 30 天
redis:
enabled: true # 生产环境建议启用
```
敏感信息通过环境变量注入(不写进配置文件):
```bash
export DB_PASSWORD="..."
export REDIS_PASSWORD="..."
```
> `config.yaml` 中的默认值会被 `.env` 覆盖,通常无需修改。
## 4. systemd 服务
@ -71,7 +71,6 @@ After=network.target postgresql.service redis.service
Type=simple
User=mce
WorkingDirectory=/opt/mce
EnvironmentFile=-/etc/mce/env
ExecStart=/usr/local/bin/mce
Restart=on-failure
RestartSec=5
@ -80,13 +79,6 @@ RestartSec=5
WantedBy=multi-user.target
```
`/etc/mce/env`
```bash
DB_PASSWORD=your_db_password
REDIS_PASSWORD=your_redis_password
```
启动:
```bash

View File

@ -136,10 +136,24 @@ func loadEnvFile(path string) {
}
}
// bindEnvOverride 将环境变量映射到 config 的嵌套键
// bindEnvOverride 将环境变量映射到 config 的嵌套键.env 覆盖 config.yaml 默认值)
func bindEnvOverride(v *viper.Viper) {
// 数据库
_ = v.BindEnv("database.host", "DATABASE_HOST")
_ = v.BindEnv("database.port", "DATABASE_PORT")
_ = v.BindEnv("database.user", "DATABASE_USER")
_ = v.BindEnv("database.password", "DATABASE_PASSWORD")
_ = v.BindEnv("database.dbname", "DATABASE_DBNAME")
_ = v.BindEnv("database.sslmode", "DATABASE_SSLMODE")
// Redis
_ = v.BindEnv("redis.enabled", "REDIS_ENABLED")
_ = v.BindEnv("redis.host", "REDIS_HOST")
_ = v.BindEnv("redis.port", "REDIS_PORT")
_ = v.BindEnv("redis.password", "REDIS_PASSWORD")
_ = v.BindEnv("redis.db", "REDIS_DB")
// 服务
_ = v.BindEnv("server.port", "SERVER_PORT")
_ = v.BindEnv("server.mode", "SERVER_MODE")
}
// GetIdleTimeout 返回临时会话空闲超时(分钟),实现 controller.sessionConfig 接口