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
|
DATABASE_HOST=127.0.0.1
|
||||||
REDIS_PASSWORD=your_redis_password_here
|
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
|
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
|
```bash
|
||||||
# .env(git 不追踪)
|
cp .env.example .env
|
||||||
DB_PASSWORD=your_password
|
|
||||||
REDIS_PASSWORD=your_redis_password
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
编辑 `.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. 初始化数据库
|
### 2. 初始化数据库
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@ -30,33 +30,33 @@ done
|
|||||||
|
|
||||||
## 3. 配置
|
## 3. 配置
|
||||||
|
|
||||||
复制并修改生产配置:
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑 `.env`,填入生产环境值:
|
||||||
|
|
||||||
```bash
|
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
生产环境关键调整:
|
> `config.yaml` 中的默认值会被 `.env` 覆盖,通常无需修改。
|
||||||
|
|
||||||
```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="..."
|
|
||||||
```
|
|
||||||
|
|
||||||
## 4. systemd 服务
|
## 4. systemd 服务
|
||||||
|
|
||||||
@ -71,7 +71,6 @@ After=network.target postgresql.service redis.service
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=mce
|
User=mce
|
||||||
WorkingDirectory=/opt/mce
|
WorkingDirectory=/opt/mce
|
||||||
EnvironmentFile=-/etc/mce/env
|
|
||||||
ExecStart=/usr/local/bin/mce
|
ExecStart=/usr/local/bin/mce
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
@ -80,13 +79,6 @@ RestartSec=5
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
|
|
||||||
`/etc/mce/env`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
DB_PASSWORD=your_db_password
|
|
||||||
REDIS_PASSWORD=your_redis_password
|
|
||||||
```
|
|
||||||
|
|
||||||
启动:
|
启动:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@ -136,10 +136,24 @@ func loadEnvFile(path string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// bindEnvOverride 将环境变量映射到 config 的嵌套键
|
// bindEnvOverride 将环境变量映射到 config 的嵌套键(.env 覆盖 config.yaml 默认值)
|
||||||
func bindEnvOverride(v *viper.Viper) {
|
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.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.password", "REDIS_PASSWORD")
|
||||||
|
_ = v.BindEnv("redis.db", "REDIS_DB")
|
||||||
|
// 服务
|
||||||
|
_ = v.BindEnv("server.port", "SERVER_PORT")
|
||||||
|
_ = v.BindEnv("server.mode", "SERVER_MODE")
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetIdleTimeout 返回临时会话空闲超时(分钟),实现 controller.sessionConfig 接口
|
// GetIdleTimeout 返回临时会话空闲超时(分钟),实现 controller.sessionConfig 接口
|
||||||
|
|||||||
Reference in New Issue
Block a user