go-sonic / sonic

Sonic is a blogging platform developed by Go. Simple and powerful
MIT License
1.99k stars 255 forks source link

无法通过环境变量设置数据库的端口 #395

Closed aaro-n closed 5 months ago

aaro-n commented 6 months ago

检查清单

是什么版本出现了此问题?

1.1.4

使用的什么数据库?

Other

使用的哪种方式部署?

Docker

在线站点地址

发生了什么?

使用Docker安装sonic,通过环境变量配置数据库信息,运行容器后无法连接到数据库,提示未识别端口,手动通过配置文件设置mysql数据库信息,安装成功。不加引号,单引号,双引号,都试过,无效。还有如何通过环境变量启用mysql的ssl证书认证? 参见:使用云数据库PlanetScale和TiDB Cloud #394

相关日志输出

www@debian:~/sonic/data/logs$ cat sonic.log 
2024-03-02T11:29:43.284+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:43.285+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:43.285+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250
2024-03-02T11:29:43.892+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:43.892+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:43.892+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250
2024-03-02T11:29:44.455+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:44.456+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:44.456+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250
2024-03-02T11:29:45.216+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:45.216+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:45.216+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250
2024-03-02T11:29:46.386+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:46.386+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:46.386+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250
2024-03-02T11:29:48.318+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:48.319+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:48.319+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250
2024-03-02T11:29:51.835+0800    INFO    dal/dal.go:67   try connect to MySQL    {"dsn": "Use dsn in config"}
2024-03-02T11:29:51.836+0800    ERROR   reflect/value.go:584    failed to initialize database, got error dial tcp: address tcp/port: unknown port
2024-03-02T11:29:51.836+0800    FATAL   dal/dal.go:38   connect to MySQL error  {"error": "dial tcp: address tcp/port: unknown port"}
github.com/go-sonic/sonic/dal.NewGormDB
        github.com/go-sonic/sonic/dal/dal.go:38
reflect.Value.call
        reflect/value.go:584
reflect.Value.Call
        reflect/value.go:368
go.uber.org/dig.defaultInvoker
        go.uber.org/dig@v1.17.1/container.go:238
go.uber.org/dig.(*constructorNode).Call
        go.uber.org/dig@v1.17.1/constructor.go:185
go.uber.org/dig.paramSingle.Build
        go.uber.org/dig@v1.17.1/param.go:287
go.uber.org/dig.paramObjectField.Build
        go.uber.org/dig@v1.17.1/param.go:484
go.uber.org/dig.paramObject.Build
        go.uber.org/dig@v1.17.1/param.go:412
go.uber.org/dig.paramList.BuildList
        go.uber.org/dig@v1.17.1/param.go:150
go.uber.org/dig.(*Scope).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:122
go.uber.org/dig.(*Container).Invoke
        go.uber.org/dig@v1.17.1/invoke.go:82
go.uber.org/fx.runInvoke
        go.uber.org/fx@v1.20.1/invoke.go:108
go.uber.org/fx.(*module).executeInvoke
        go.uber.org/fx@v1.20.1/module.go:288
go.uber.org/fx.(*module).executeInvokes
        go.uber.org/fx@v1.20.1/module.go:274
go.uber.org/fx.New
        go.uber.org/fx@v1.20.1/app.go:503
main.InitApp
        github.com/go-sonic/sonic/main.go:74
main.main
        github.com/go-sonic/sonic/main.go:24
runtime.main
        runtime/proc.go:250

附加信息

使用的阿里云数据库,日本,通过配置文件可以连接数据库。

version: '3'
services:

  sonic:
    restart: always
    image: gosonic/sonic:latest
    container_name: sonic
    ports:
      - "8080:8080"
      - "3306:3306"
    environment:
      SQLITE3_ENABLE: false
      MYSQL_HOST: rm-1222333444.mysql.japan.rds.aliyuncs.com
      MYSQL_PORT: “3306”
      MYSQL_DB: sonic-db
      MYSQL_USERNAME: sonic
      MYSQL_PASSWORD: 111111
    volumes:
      - /home/www/sonic/data:/sonic
jakezhu9 commented 5 months ago

试试这个?

SQLITE3_ENABLE: false
MYSQL_DSN: username:password@tcp(host:port)/db_name?charset=utf8mb4&parseTime=True&loc=Local&interpolateParams=true&tls=true
aaro-n commented 5 months ago

@jakezhu9 已经通过环境变量MYSQL_DSN设置数据库连接,可以正常使用,需要我关闭此问题吗?