feat: 1130

This commit is contained in:
liqupan
2025-11-30 21:23:02 +08:00
parent 961cd12ab6
commit c20aca3da0
9 changed files with 9100 additions and 8810 deletions

View File

@@ -1,23 +1,21 @@
# Use Eclipse Temurin for both build and runtime stages
FROM eclipse-temurin:21-jdk AS builder
# =====================================
# BUILD STAGE (Temurin JDK + Maven)
# =====================================
# 添加构建参数,默认使用标准模型
ARG VOSK_MODEL_SIZE=standard
FROM eclipse-temurin:21-jdk-jammy AS builder
# ===== 新增:替换为国内镜像源 =====
RUN sed -i 's@archive.ubuntu.com@mirrors.aliyun.com@g' /etc/apt/sources.list.d/ubuntu.sources 2>/dev/null || \
sed -i 's@archive.ubuntu.com@mirrors.aliyun.com@g' /etc/apt/sources.list 2>/dev/null || \
true
# ===== 使用国内 apt 镜像(阿里云) =====
RUN sed -i 's@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g' /etc/apt/sources.list && \
sed -i 's@http://security.ubuntu.com@http://mirrors.aliyun.com@g' /etc/apt/sources.list
# 安装必要的构建工具
RUN apt-get update && apt-get install -y --no-install-recommends \
maven \
wget \
unzip \
curl \
&& rm -rf /var/lib/apt/lists/*
# 安装构建工具(带自动重试)
RUN apt-get update -o Acquire::Retries=5 && \
apt-get install -y --no-install-recommends \
maven wget unzip curl \
-o Acquire::Retries=5 && \
rm -rf /var/lib/apt/lists/*
# ===== 新增:配置 Maven 使用阿里云镜像 =====
# ===== Maven 使用阿里云镜像 =====
RUN mkdir -p /root/.m2 && \
cat > /root/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
@@ -38,74 +36,54 @@ EOF
WORKDIR /build
# 复制源代码
# 复制项目源代码
COPY ./src ./src
COPY ./db ./db
COPY pom.xml ./
# 构建应用
# 构建 jar 包
RUN mvn -Dmaven.repo.local=/root/.m2/repository package -DskipTests
# 正确提取项目版本号 - 使用更精确的grep模式匹配项目版本而非父项目版本
# 提取版本号
RUN APP_VERSION=$(grep -A1 "<artifactId>xiaozhi.server</artifactId>" pom.xml | grep "<version>" | sed -e 's/<version>//' -e 's/<\/version>//' -e 's/[[:space:]]//g') && \
echo "APP_VERSION=${APP_VERSION}" > /build/app_version.env && \
cat /build/app_version.env
echo "APP_VERSION=${APP_VERSION}" > /build/app_version.env
# 确保模型目录存在
RUN mkdir -p /build/models
COPY ./models/silero_vad.onnx /build/models/
# 复制模型文件
COPY ./models/silero_vad.onnx /build/models/silero_vad.onnx
# 下载并准备Vosk模型
RUN mkdir -p /vosk_cache && \
if [ "$VOSK_MODEL_SIZE" = "small" ]; then \
if [ ! -d "/vosk_cache/vosk-model-small-cn-0.22" ]; then \
echo "Downloading small Vosk model..." && \
cd /vosk_cache && \
wget https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip && \
unzip vosk-model-small-cn-0.22.zip && \
rm vosk-model-small-cn-0.22.zip; \
else \
echo "Using cached small Vosk model"; \
fi && \
cp -r /vosk_cache/vosk-model-small-cn-0.22 /build/models/vosk-model; \
else \
if [ ! -d "/vosk_cache/vosk-model-cn-0.22" ]; then \
echo "Downloading standard Vosk model..." && \
cd /vosk_cache && \
wget https://alphacephei.com/vosk/models/vosk-model-cn-0.22.zip && \
unzip vosk-model-cn-0.22.zip && \
rm vosk-model-cn-0.22.zip; \
else \
echo "Using cached standard Vosk model"; \
fi && \
cp -r /vosk_cache/vosk-model-cn-0.22 /build/models/vosk-model; \
fi
# 使用更小的JRE镜像作为运行时环境
FROM eclipse-temurin:21-jre
# =====================================
# RUNTIME STAGE (Temurin JRE)
# =====================================
# 安装必要的运行时依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
FROM eclipse-temurin:21-jre-jammy
# ===== 使用国内 apt 源(阿里云) =====
RUN sed -i 's@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g' /etc/apt/sources.list && \
sed -i 's@http://security.ubuntu.com@http://mirrors.aliyun.com@g' /etc/apt/sources.list
# 安装 ffmpeg带自动重试
RUN apt-get update -o Acquire::Retries=5 && \
apt-get install -y --no-install-recommends \
ffmpeg \
-o Acquire::Retries=5 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 复制构建阶段的JAR文件和版本信息
# 复制运行文件
COPY --from=builder /build/target/xiaozhi.server-*.jar /app/
COPY --from=builder /build/app_version.env /app/
# 复制模型文件夹
COPY --from=builder /build/models /app/models
# 设置启动脚本 - 使用 . 代替 source并确保使用 bash
# 启动脚本
RUN echo '#!/bin/bash\n\
if [ -f /app/app_version.env ]; then\n\
. /app/app_version.env\n\
fi\n\
echo "Starting application version: ${APP_VERSION}"\n\
echo "Starting Xiaozhi server version: ${APP_VERSION}"\n\
java -Xms512m -Xmx1024m -jar /app/xiaozhi.server-${APP_VERSION}.jar\n\
' > /app/start.sh && chmod +x /app/start.sh
# 使用 bash 执行启动脚本
CMD ["/bin/bash", "/app/start.sh"]
CMD ["/bin/bash", "/app/start.sh"]