Appearance
配置
系统配置
在网站后台:常规管理 > 系统配置 可以进行配置的项目,我们称之为系统配置。
- 系统配置是保存在数据库中的。
- 系统配置可以在后台可视化的进行修改。
- 可以随时在后台添加新的系统配置。
- 管理员添加的配置项,也可以直接在后台删除。
获取系统配置
我们在 config 仓储封装了 GetConfigs 和 GetConfigsByGroup 方法,用于同时获取多个配置,或直接获取某个分组的全部配置;
go
configNames := []string{"name", "record_number", "version"}
result, err := h.configRepo.GetConfigs(c.Request.Context(), configNames)
if err != nil {
httpx.Fail(c, httpx.WithMessage("获取配置失败: "+err.Error()))
return
}go
// 获取所有 group=basic 的配置项(基础配置分组的配置),
// 返回值类型是 map[string]string,格式是 name=value
cfg, err := h.configRepo.GetConfigsByGroup(c.Request.Context(), "basic")
if err != nil {
httpx.Fail(c, httpx.WithMessage("获取基础配置失败: "+err.Error()))
return
}文件配置
我们在 项目根目录/config/ 下放置了多个 yaml 格式的配置文件:
config.yaml未分类的综合配置,含:应用、服务、数据库、token、cdn配置项captcha.yaml验证码配置cors.yaml跨域配置upload.yaml上传配置
配置读取
配置项的 key 和文件名是无关的,放到不同的文件只是为了分类,读取配置示例:
go
// 返回全局带读写锁的配置副本
cfg := config.Get()
// app.name
fmt.Printf("App.Name: %s", cfg.App.Name)
// server.port
addr := fmt.Sprintf(":%d", cfg.Server.Port)TIP
配置覆盖机制
所有配置项的值,可以被后续定义覆盖掉,如:
yaml
# config.yaml 文件
app:
name: ai-go-adminyaml
# test.yaml 文件
app:
name: ai-go-admin-test最终 app.name 的值是 ai-go-admin-test,即后者覆盖前者,哪怕在不同的文件。
TIP
config目录内的配置文件读取,是按字母升序([a-z])读取的,任意key后者覆盖前者;- 为避免混乱,我们并不推荐您主动做以上这种覆盖,只是这一机制还用于环境配置文件(也是
yaml,可以直接覆盖所有配置key)。
环境配置文件
项目根目录有一个 .env.yaml.example 文件,将它更名为 .env.yaml 后,即可作为系统的 环境配置文件,非 环境变量,但作用也是从外部(二进制外)动态设定配置。
.env.yaml 在系统编译时,并不会被嵌入二进制以内,而且它是按需建立的,也就是说:
- 您可以不建立它,实现单二进制部署。
- 也可以建立它,实现对所有配置项的动态覆盖(编译后的二进制也能读取外部的同级
.env.yaml文件)。
TIP
- 本
环境配置文件是一个yaml文件,天然能按key覆盖掉config目录内的所有配置值(受益于系统 文件配置的覆盖机制)。 环境变量也有类似的功能,但使用本环境配置文件可以更加方便的批量覆盖;- 您也可以单纯的将
环境配置文件理解为开发环境专用配置,在开发环境建立它做单独的数据库信息等配置,而生产就不要了。
环境变量
系统只读取 全大写、下划线分割 的环境变量,您可以如下设置临时环境变量,系统会自动读取并覆盖同名的文件配置值:
bash
# Windows PowerShell
$env:APP_NAME="ai-go-admin-env-test";$env:SERVER_PORT=7000;air
# Linux / MacOS
APP_NAME=ai-go-admin-env-test SERVER_PORT=7000 air # AIR
APP_NAME=ai-go-admin-env-test SERVER_PORT=7000 ./aigo-linux-amd64 # 直接运行编译后的二进制
# Windows CMD
# 一行设定一个,不支持单行一次性设定
set APP_NAME=ai-go-admin-env-test
set SERVER_PORT=7000
air环境变量最常用的场景是设定数据库配置信息,以下给出 linux 平台下的启动示例:
bash
DATABASE_WRITE_HOST="127.0.0.1" DATABASE_WRITE_PORT=5432 DATABASE_WRITE_USER="postgres" DATABASE_WRITE_DBNAME="aigo" DATABASE_WRITE_PASSWORD="admin888" ./aigo-linux-amd64