From 3fe284ec5cc20b068729691c1edcc3b582d2f780 Mon Sep 17 00:00:00 2001 From: duoaohui <928970622@qq.com> Date: Tue, 19 May 2026 16:15:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/go-service/Dockerfile | 4 ++-- backend/go-service/config/config.docker.yaml | 2 +- backend/go-service/pkg/db/postgres.go | 7 +++++++ deploy/docker-compose.dev.yml | 8 +++++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/backend/go-service/Dockerfile b/backend/go-service/Dockerfile index 55db3b6..536ddf1 100644 --- a/backend/go-service/Dockerfile +++ b/backend/go-service/Dockerfile @@ -22,8 +22,8 @@ RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /build/echochat ./cmd/ # --- 第二阶段:运行 --- FROM alpine:3.19 -# 安装运行时依赖(时区数据 + CA 证书) -RUN apk add --no-cache ca-certificates tzdata +# 安装运行时依赖(时区数据 + CA 证书 + 录制 WebM→MP4 转码所需 ffmpeg) +RUN apk add --no-cache ca-certificates tzdata ffmpeg # 设置时区为上海 ENV TZ=Asia/Shanghai diff --git a/backend/go-service/config/config.docker.yaml b/backend/go-service/config/config.docker.yaml index b8a22e0..0f798f8 100644 --- a/backend/go-service/config/config.docker.yaml +++ b/backend/go-service/config/config.docker.yaml @@ -83,5 +83,5 @@ meeting: # 生产部署请通过环境变量 ECHOCHAT_MEETING_INTERNAL_WEBHOOK_SECRET 覆盖(viper.AutomaticEnv 已开启) internal_webhook_secret: internal-webhook-12xqs recording_transcode_enabled: true - recording_transcode_ffmpeg_path: /home/ykf/jenkins/yuyin/ffmpeg/ffmpeg-7.0.2-amd64-static/ffmpeg + recording_transcode_ffmpeg_path: ffmpeg recording_transcode_timeout_seconds: 600 diff --git a/backend/go-service/pkg/db/postgres.go b/backend/go-service/pkg/db/postgres.go index 79ebab6..c4d90c3 100644 --- a/backend/go-service/pkg/db/postgres.go +++ b/backend/go-service/pkg/db/postgres.go @@ -3,6 +3,7 @@ package db import ( "context" + "errors" "fmt" "time" @@ -43,6 +44,12 @@ func (l *zapGormLogger) Trace(ctx context.Context, begin time.Time, fc func() (s zap.String("sql", sql), } if err != nil { + // gorm.ErrRecordNotFound 在业务侧大量被用作"是否存在"判定(GetByXxx 返回 nil, nil) + // 没必要在 SQL 层把它当 ERROR 刷出来,否则会误触告警;保持原 fields 在 Debug 层级即可排障 + if errors.Is(err, gorm.ErrRecordNotFound) { + logs.Debug(ctx, "gorm.trace", "SQL未命中(record not found)", fields...) + return + } fields = append(fields, zap.Error(err)) logs.Error(ctx, "gorm.trace", "SQL执行失败", fields...) return diff --git a/deploy/docker-compose.dev.yml b/deploy/docker-compose.dev.yml index 1ac8cd8..f405735 100644 --- a/deploy/docker-compose.dev.yml +++ b/deploy/docker-compose.dev.yml @@ -69,7 +69,10 @@ services: ECHOCHAT_MEDIA_SERVER_INTERNAL_TOKEN: ${MEDIA_INTERNAL_TOKEN:-} # media-server 失败回调共享密钥:与 media-server 服务的 INTERNAL_WEBHOOK_SECRET 保持一致 # 未配置时 go-service 会拒绝所有 webhook(Forbidden),录制失败状态将无法及时落 failed - INTERNAL_WEBHOOK_SECRET: ${INTERNAL_WEBHOOK_SECRET:-internal-webhook-secret-change-me} + ECHOCHAT_MEETING_INTERNAL_WEBHOOK_SECRET: ${INTERNAL_WEBHOOK_SECRET:-internal-webhook-12xqs} + ECHOCHAT_MEETING_RECORDING_TRANSCODE_ENABLED: ${RECORDING_TRANSCODE_ENABLED:-true} + ECHOCHAT_MEETING_RECORDING_TRANSCODE_FFMPEG_PATH: ${RECORDING_TRANSCODE_FFMPEG_PATH:-ffmpeg} + ECHOCHAT_MEETING_RECORDING_TRANSCODE_TIMEOUT_SECONDS: ${RECORDING_TRANSCODE_TIMEOUT_SECONDS:-600} ports: - "${GO_SERVICE_PORT:-8085}:8085" depends_on: @@ -81,6 +84,9 @@ services: condition: service_healthy media-server: condition: service_healthy + volumes: + # 与 media-server 使用同一个 host 目录,确保容器部署 go-service 时也能读取录制产物并转码/上传 + - ${RECORDING_OUTPUT_DIR:-/home/ykf/jenkins/yuyin/data}:${RECORDING_OUTPUT_DIR:-/home/ykf/jenkins/yuyin/data} restart: unless-stopped # ============================================================