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:
28
.env.example
28
.env.example
@ -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
|
||||
|
||||
# --- Redis(enabled=false 时以下可忽略) ---
|
||||
REDIS_ENABLED=true
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
|
||||
# --- 服务 ---
|
||||
SERVER_PORT=8080
|
||||
SERVER_MODE=debug
|
||||
|
||||
40
README.md
40
README.md
@ -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
|
||||
# .env(git 不追踪)
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 接口
|
||||
|
||||
Reference in New Issue
Block a user