feat(lyra): 接入 PostgreSQL 与 Goose 迁移
- 使用 pgx/sqlx 建立连接,从环境变量读取数据库密码 - 添加本地 PostgreSQL Compose 配置与初始迁移 - 补充 Goose 操作手册和连接串排错说明
This commit is contained in:
@@ -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 服务失败,请检查端口是否被占用")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user