diff --git a/CHANGELOG.md b/CHANGELOG.md index 76c05bce..9704f06f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - 功能新增:新增支持可灵生成视频。 - 功能优化:优化聊天页面代码块样式,优化公式的解析。 +- Bug 修复:优化 Redis 连接池配置,增加连接池超时时间,单核服务器报错 `redis: connection pool timeout`。 ## v4.2.0 diff --git a/api/handler/admin/media_handler.go b/api/handler/admin/media_handler.go index 4ce42c06..72924010 100644 --- a/api/handler/admin/media_handler.go +++ b/api/handler/admin/media_handler.go @@ -18,6 +18,7 @@ import ( "geekai/store/vo" "geekai/utils" "geekai/utils/resp" + "github.com/gin-gonic/gin" "gorm.io/gorm" ) @@ -33,6 +34,7 @@ func NewMediaHandler(app *core.AppServer, db *gorm.DB, userService *service.User } type mediaQuery struct { + Type string `json:"type"` // 任务类型 luma, keling Prompt string `json:"prompt"` Username string `json:"username"` CreatedAt []string `json:"created_at"` @@ -84,15 +86,15 @@ func (h *MediaHandler) SunoList(c *gin.Context) { resp.SUCCESS(c, vo.NewPage(total, data.Page, data.PageSize, items)) } -// LumaList Luma 视频任务列表 -func (h *MediaHandler) LumaList(c *gin.Context) { +// Videos 视频任务列表 +func (h *MediaHandler) Videos(c *gin.Context) { var data mediaQuery if err := c.ShouldBindJSON(&data); err != nil { resp.ERROR(c, types.InvalidArgs) return } - session := h.DB.Session(&gorm.Session{}) + session := h.DB.Session(&gorm.Session{}).Where("type", data.Type) if data.Username != "" { var user model.User err := h.DB.Where("username", data.Username).First(&user).Error @@ -154,6 +156,7 @@ func (h *MediaHandler) Remove(c *gin.Context) { fileURL = job.AudioURL break case "luma": + case "keling": var job model.VideoJob if res := h.DB.Where("id", id).First(&job); res.Error != nil { resp.ERROR(c, "记录不存在") diff --git a/api/main.go b/api/main.go index acfc2cf9..69425a4f 100644 --- a/api/main.go +++ b/api/main.go @@ -561,8 +561,8 @@ func main() { fx.Provide(admin.NewMediaHandler), fx.Invoke(func(s *core.AppServer, h *admin.MediaHandler) { group := s.Engine.Group("/api/admin/media") - group.POST("/list/suno", h.SunoList) - group.POST("/list/luma", h.LumaList) + group.POST("/suno", h.SunoList) + group.POST("/videos", h.Videos) group.GET("/remove", h.Remove) }), fx.Provide(handler.NewRealtimeHandler), diff --git a/api/service/video/video.go b/api/service/video/video.go index e37bc085..b969cee8 100644 --- a/api/service/video/video.go +++ b/api/service/video/video.go @@ -61,7 +61,7 @@ func (s *Service) PushTask(task types.VideoTask) { } func (s *Service) Run() { - // 将数据库中未提交的人物加载到队列 + // 将数据库中未提交的任务加载到队列 var jobs []model.VideoJob s.db.Where("task_id", "").Where("progress", 0).Find(&jobs) for _, v := range jobs { diff --git a/api/store/redis.go b/api/store/redis.go index f2e4814f..33f7bf1b 100644 --- a/api/store/redis.go +++ b/api/store/redis.go @@ -10,14 +10,18 @@ package store import ( "context" "geekai/core/types" + "time" + "github.com/go-redis/redis/v8" ) func NewRedisClient(config *types.AppConfig) (*redis.Client, error) { client := redis.NewClient(&redis.Options{ - Addr: config.Redis.Url(), - Password: config.Redis.Password, - DB: config.Redis.DB, + Addr: config.Redis.Url(), + Password: config.Redis.Password, + DB: config.Redis.DB, + PoolSize: 20, + PoolTimeout: 5 * time.Second, }) _, err := client.Ping(context.Background()).Result() if err != nil { diff --git a/build/build.sh b/build/build.sh index 8c161cce..efc427c4 100755 --- a/build/build.sh +++ b/build/build.sh @@ -5,11 +5,11 @@ arch=${2:-amd64} # build go api program cd ../api -make clean $arch +#make clean $arch # build web app cd ../web -npm run build +#npm run build cd ../build diff --git a/docker/conf/config.toml b/docker/conf/config.toml index ae9543b5..3d3290a5 100644 --- a/docker/conf/config.toml +++ b/docker/conf/config.toml @@ -3,7 +3,7 @@ ProxyURL = "" MysqlDns = "root:mhSCk0NheGhmtsha@tcp(geekai-mysql:3306)/geekai_plus?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local" StaticDir = "./static" StaticUrl = "/static" -TikaHost = "http://tika-geekai:9998" +TikaHost = "http://geekai-tika:9998" [Session] SecretKey = "azyehq3ivunjhbntz78isj00i4hz2mt9xtddysfucxakadq4qbfrt0b7q3lnvg80" @@ -68,14 +68,6 @@ TikaHost = "http://tika-geekai:9998" SubDir = "" Domain = "" -[XXLConfig] # xxl-job 配置,需要你部署 XXL-JOB 定时任务工具,用来定期清理未支付订单和清理过期 VIP,如果你没有启用支付服务,则该服务也无需启动 - Enabled = false # 是否启用 XXL JOB 服务 - ServerAddr = "http://geekai-xxl-job-admin:8080/xxl-job-admin" # xxl-job-admin 管理地址 - ExecutorIp = "geekai-api" # 执行器 IP 地址 - ExecutorPort = "9999" # 执行器服务端口 - AccessToken = "GeekMaster" # 执行器 API 通信 token - RegistryKey = "chatgpt-plus" # 任务注册 key,需要与 xxl-job 管理后台配置一致,请不要随意改动 - # 支付宝商户支付 [AlipayConfig] Enabled = false # 启用支付宝支付通道 diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 04b69f92..d0aa34b2 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -37,34 +37,13 @@ services: timeout: 10s retries: 5 - # xxl-job-admin: - # container_name: geekai-xxl-job-admin - # image: registry.cn-shenzhen.aliyuncs.com/geekmaster/xxl-job-admin:2.4.0 - # restart: always - # ports: - # - "8081:8080" - # environment: - # - PARAMS=--spring.config.location=/application.properties - # volumes: - # - ./logs/xxl-job:/data/applogs - # - ./conf/xxl-job/application.properties:/application.properties - - tika: + geekai-tika: image: registry.cn-shenzhen.aliyuncs.com/geekmaster/tika:latest container_name: geekai-tika restart: always ports: - "9999:9998" - # midjourney-proxy: - # image: registry.cn-shenzhen.aliyuncs.com/geekmaster/midjourney-proxy:2.6.2 - # container_name: geekai-midjourney-proxy - # restart: always - # ports: - # - "8082:8080" - # volumes: - # - ./conf/mj-proxy:/home/spring/config - # 后端 API 程序 geekai-api: image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-plus-api:v4.2.0-amd64 diff --git a/web/package-lock.json b/web/package-lock.json index f06bb156..19caefee 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -23,7 +23,6 @@ "lodash": "^4.17.21", "markdown-it": "^13.0.1", "markdown-it-emoji": "^2.0.0", - "markdown-it-katex": "^2.0.3", "markdown-it-mathjax3": "^4.3.2", "markmap-common": "^0.16.0", "markmap-lib": "^0.16.1", @@ -8655,25 +8654,6 @@ "resolved": "https://registry.npmmirror.com/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==" }, - "node_modules/markdown-it-katex": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/markdown-it-katex/-/markdown-it-katex-2.0.3.tgz", - "integrity": "sha512-nUkkMtRWeg7OpdflamflE/Ho/pWl64Lk9wNBKOmaj33XkQdumhXAIYhI0WO03GeiycPCsxbmX536V5NEXpC3Ng==", - "dependencies": { - "katex": "^0.6.0" - } - }, - "node_modules/markdown-it-katex/node_modules/katex": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/katex/-/katex-0.6.0.tgz", - "integrity": "sha512-rS4mY3SvHYg5LtQV6RBcK0if7ur6plyEukAOV+jGGPqFImuzu8fHL6M752iBmRGoUyF0bhZbAPoezehn7xYksA==", - "dependencies": { - "match-at": "^0.1.0" - }, - "bin": { - "katex": "cli.js" - } - }, "node_modules/markdown-it-mathjax3": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz", @@ -8915,11 +8895,6 @@ "markmap-common": "*" } }, - "node_modules/match-at": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/match-at/-/match-at-0.1.1.tgz", - "integrity": "sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q==" - }, "node_modules/mathjax-full": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz", diff --git a/web/src/views/admin/Medias.vue b/web/src/views/admin/Medias.vue index bc97a74c..788dc770 100644 --- a/web/src/views/admin/Medias.vue +++ b/web/src/views/admin/Medias.vue @@ -1,28 +1,10 @@