feat(lyra): 接入 PostgreSQL 与 Goose 迁移

- 使用 pgx/sqlx 建立连接,从环境变量读取数据库密码
- 添加本地 PostgreSQL Compose 配置与初始迁移
- 补充 Goose 操作手册和连接串排错说明
This commit is contained in:
2026-10-17 15:09:46 +08:00
parent 3f16384376
commit 8c0c9978e5
15 changed files with 580 additions and 33 deletions
+27 -9
View File
@@ -2,30 +2,48 @@
package main
import (
"context"
"fmt"
"log"
"lyra/internal/config"
"lyra/internal/router"
"github.com/gin-gonic/gin"
"github.com/jmoiron/sqlx"
"github.com/joho/godotenv"
// 注册 pgx 驱动,供 sqlx 以 "pgx" 驱动名使用。
_ "github.com/jackc/pgx/v5/stdlib"
)
func main() {
// 加载 .env.local 文件,覆盖环境变量
if err := godotenv.Load(".env.local"); err != nil {
log.Fatal("加载环境变量失败,请检查文件是否存在")
}
// 加载配置(internal/config)
cfg, err := config.Load("etc/lyra.toml")
if err != nil {
panic(err)
log.Fatal("加载配置失败,请检查配置文件和环境变量")
}
// TODO: 组装依赖——建立 PostgreSQL 连接(internal/postgres)。
gin.SetMode(cfg.App.Env)
gEngine := gin.Default()
ginEngine := gin.Default()
//没有反向代理,在启动前关闭代理信任:
if err := gEngine.SetTrustedProxies(nil); err != nil {
panic(err)
if err := ginEngine.SetTrustedProxies(nil); err != nil {
log.Fatal("设置代理信任失败,请检查配置")
}
router.RegisterRoutes(gEngine)
// TODO: 退出时关闭连接、释放资源。
dataSourceName := fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s sslmode=disable", cfg.Database.Host, cfg.Database.Port, cfg.Database.User, cfg.Database.Name, cfg.Database.Password)
ctx := context.Background()
db, err := sqlx.ConnectContext(ctx, cfg.Database.Driver, dataSourceName)
if err != nil {
log.Fatal("连接 PostgreSQL 失败,请检查连接配置、认证和网络")
}
defer db.Close()
router.RegisterRoutes(ginEngine)
addr := fmt.Sprintf("%s:%d", cfg.HTTP.Host, cfg.HTTP.Port)
if err := gEngine.Run(addr); err != nil {
panic(err)
if err := ginEngine.Run(addr); err != nil {
log.Fatal("启动 HTTP 服务失败,请检查端口是否被占用")
}
}