设置
对于接口级简化的项目,由于没有自动引入设置,所以需要手动引用设置的初始化函数。
package main
import (
"flag"
"github.com/uozi-tech/cosy/settings"
)
func main() {
// 初始化设置
var confPath string
flag.StringVar(&confPath, "config", "app.ini", "Specify the configuration file")
flag.Parse()
settings.Init(confPath)
// 其他代码
}
对于项目级简化,则不需要手动初始化。
配置方式
Cosy 支持多种配置方式:
- 配置文件:支持 INI 和 TOML 两种格式
- 环境变量:支持通过环境变量覆盖配置文件中的设置
配置的优先级为:环境变量 > 配置文件
环境变量配置
Cosy 支持通过环境变量来设置配置,环境变量名称格式为:{PREFIX}{SECTION}_{FIELD}
设置环境变量前缀
package main
import (
"flag"
"github.com/uozi-tech/cosy/settings"
)
func main() {
// 设置环境变量前缀
settings.SetEnvPrefix("COSY_")
// 初始化设置
var confPath string
flag.StringVar(&confPath, "config", "app.ini", "Specify the configuration file")
flag.Parse()
settings.Init(confPath)
// 其他代码
}
环境变量示例
假设设置了前缀 COSY_
,则环境变量名称为:
# App 配置 (字段名转换为 SCREAMING_SNAKE_CASE)
export COSY_APP_PAGE_SIZE=20
export COSY_APP_JWT_SECRET="39B4F75C-8E51-4E9C-87F5-94E40447B0E0"
# Server 配置
export COSY_SERVER_HOST="0.0.0.0"
export COSY_SERVER_PORT=8080
export COSY_SERVER_RUN_MODE="production"
export COSY_SERVER_ENABLE_HTTPS=true
# Database 配置
export COSY_DATABASE_HOST="localhost"
export COSY_DATABASE_PORT=5432
export COSY_DATABASE_USER="myuser"
export COSY_DATABASE_PASSWORD="mypassword"
export COSY_DATABASE_NAME="mydatabase"
export COSY_DATABASE_TABLE_PREFIX="t_"
# Redis 配置
export COSY_REDIS_ADDR="localhost:6379"
export COSY_REDIS_PASSWORD="myredispassword"
export COSY_REDIS_DB=0
如果没有设置前缀,则直接使用:
export APP_PAGE_SIZE=20
export SERVER_HOST="0.0.0.0"
export DATABASE_HOST="localhost"
配置文件格式
Cosy 支持两种配置文件格式:INI 和 TOML。默认情况下使用 INI 格式,但您可以通过构建标签选择使用 TOML 格式。
使用 INI 格式 (默认)
默认情况下,将 app.ini
放在与二进制文件相同的目录中即可。
[app]
PageSize = 20
JwtSecret = 39B4F75C-8E51-4E9C-87F5-94E40447B0E0
[server]
Host = 127.0.0.1
Port = 9000
RunMode = debug
BaseUrl = https://api.example.com
EnableHTTPS = false
SSLCert = /path/to/certificate.pem
SSLKey = /path/to/key.pem
[database]
User = postgres
Password =
Host = 127.0.0.1
Port = 5432
Name = my-database
TablePrefix = t_
[redis]
Addr = 127.0.0.1:6379
Password =
DB = 0
Prefix = my-prefix
注意:配置文件中的任何设置都可以通过对应的环境变量进行覆盖。例如,上述 server.Port
可以通过环境变量 COSY_SERVER_PORT
覆盖。字段名会自动转换为 SCREAMING_SNAKE_CASE 格式。
使用 TOML 格式
如果要使用 TOML 格式,需要在构建时添加 toml_settings
标签:
go build -tags toml_settings
然后将 app.toml
放在与二进制文件相同的目录中:
[app]
PageSize = 20
JwtSecret = "39B4F75C-8E51-4E9C-87F5-94E40447B0E0"
[server]
Host = "127.0.0.1"
Port = 9000
RunMode = "debug"
BaseUrl = "https://api.example.com"
EnableHTTPS = false
SSLCert = "/path/to/certificate.pem"
SSLKey = "/path/to/key.pem"
[database]
User = "postgres"
Password = ""
Host = "127.0.0.1"
Port = 5432
Name = "my-database"
TablePrefix = "t_"
[redis]
Addr = "127.0.0.1:6379"
Password = ""
DB = 0
Prefix = "my-prefix"
注意:与 INI 格式一样,TOML 配置文件中的任何设置都可以通过对应的环境变量进行覆盖。
配置组合使用
最佳实践
推荐的配置方式是将基础配置放在配置文件中,将敏感信息和环境特定的配置通过环境变量提供:
配置文件 (app.ini):
[app]
PageSize = 20
[server]
Host = 127.0.0.1
Port = 9000
RunMode = debug
[database]
Host = 127.0.0.1
Port = 5432
Name = my-database
TablePrefix = t_
环境变量:
# 生产环境中的敏感信息
export COSY_APP_JWT_SECRET="production-secret-key"
export COSY_DATABASE_USER="prod_user"
export COSY_DATABASE_PASSWORD="secure_password"
# 环境特定的配置
export COSY_SERVER_RUN_MODE="production"
export COSY_REDIS_ADDR="redis.production.com:6379"
export COSY_REDIS_PASSWORD="redis_password"
这样可以确保:
- 基础配置在代码库中可见和可维护
- 敏感信息不会泄露到代码库中
- 不同环境可以使用不同的配置值
协议支持
Cosy 支持多种 HTTP 协议,包括 HTTP/1.1、HTTP/2 和 HTTP/3:
EnableHTTPS
:是否启用 HTTPS,设置为true
开启SSLCert
:SSL 证书文件路径SSLKey
:SSL 密钥文件路径EnableH2
:是否启用 HTTP/2 支持EnableH3
:是否启用 HTTP/3 支持
当 EnableHTTPS
设置为 true
时,服务器将使用 HTTPS 协议启动,否则使用 HTTP。
详细的配置说明,请参考:
指定配置文件
如果需要指定不同的配置文件路径,可以使用 -config
参数。
假设有一个二进制文件 main:
# 使用 INI 格式
./main -config app.testing.ini
# 使用 TOML 格式 (如果使用 toml_settings 构建标签)
./main -config app.testing.toml
# 结合环境变量使用
COSY_DATABASE_HOST="test.db.com" ./main -config app.testing.ini
注意:无论使用哪种配置文件,环境变量都可以覆盖配置文件中的设置。这使得在不同环境中部署时非常灵活。