- Node 渲染器(three r162 + headless-gl + pngjs):gen-templates 程序化生成简化人体 GLB(6 脸 × 6 体 × 5 肤色),render.js 绕 Y 轴 36 帧 256x512 白底渲染 - agent/render.go:RenderAvatarFrames 帧目录缓存复用 + GLB 缺失自动生成 + 15 分钟超时;render.enabled/node_bin 配置,node_bin 路径缺失回退 PATH - Build 异步化:写库 processing → goroutine 渲染 → done+frames_url / failed+error(客户端降级静态占位);修 BodyMeasurement 无记录时 Build 报错 - avatar_model 容错 ALTER 加 frames_url 列;AvatarGetRes 透传 frames_url - TDD:renderJob 状态机测试(成功 done / 失败 failed 降级) - 客户端 avatar_viewer 帧轮播(120ms × 36 帧,errorBuilder 降级占位),avatar_provider 解析 frames_url - Dockerfile 双阶段:node:20-alpine 编译 gl 原生模块 + 运行时带 nodejs/libglvnd
35 lines
1.3 KiB
Docker
35 lines
1.3 KiB
Docker
FROM golang:alpine AS builder
|
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
|
&& apk add --no-cache git ca-certificates tzdata
|
|
ENV TZ=Asia/Shanghai
|
|
ENV GO111MODULE=on
|
|
ENV GOPROXY=https://goproxy.cn,direct
|
|
ENV CGO_ENABLED=0
|
|
ENV GOTOOLCHAIN=auto
|
|
WORKDIR /build
|
|
COPY . .
|
|
RUN go mod download && go mod tidy
|
|
RUN go build -ldflags="-s -w" -o main ./main.go
|
|
|
|
# 3D 化身渲染器(Node + headless-gl,需原生编译)
|
|
FROM node:20-alpine AS renderer
|
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
|
&& apk add --no-cache git python3 make g++ mesa mesa-gles mesa-egl libglvnd-dev ca-certificates tzdata
|
|
WORKDIR /render
|
|
COPY scripts/avatar-render/package*.json ./
|
|
RUN npm ci --omit=dev --registry=https://registry.npmmirror.com
|
|
|
|
FROM alpine:3.19
|
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
|
&& apk add --no-cache ca-certificates tzdata libstdc++ libgcc libglvnd nodejs
|
|
ENV TZ=Asia/Shanghai
|
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
|
WORKDIR /app
|
|
COPY --from=builder /build/config.yml .
|
|
COPY --from=builder /build/main .
|
|
COPY --from=renderer /render/node_modules ./scripts/avatar-render/node_modules
|
|
COPY scripts/avatar-render/ ./scripts/avatar-render/
|
|
RUN mkdir -p /app/workspace
|
|
EXPOSE 3007
|
|
ENTRYPOINT ["./main"]
|