Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
9e87a02
feat: 新增音色设计功能,支持音色创建、管理与语音合成。
Jan 29, 2026
88ee457
Merge pull request #1 from zhiheng-yu/feature/offlice-voice
Zerone-Agent Jan 29, 2026
39385f9
feat: 添加实时语音合成 (TTS) 功能,支持阿里云和本地千问3模型,并包含音色创造、克隆及官方音色视图。
Jan 30, 2026
8ad932c
feat: Add local voice cloning and design services with `ref_text` sup…
Jan 31, 2026
9487400
feat: 在 VoiceClone 页面中根据克隆模式条件显示录音时长输入框,并移除未使用的 `settingsVisible` 变量。
Zerone-Agent Jan 31, 2026
fc3bcf2
Merge pull request #2 from zhiheng-yu/feature/local-model
Zerone-Agent Jan 31, 2026
5f8a940
feat: 统一环境配置变量并引入 Docker 容器化部署。
Zerone-Agent Jan 31, 2026
1ba6df6
build: 添加 .dockerignore 文件,以在 Docker 构建过程中排除 Python 虚拟环境和缓存文件。
Jan 31, 2026
443459e
refactor: 更新Docker Compose以使用带有上传量和增强的预构建映像。Dockerignore '来排除数据和媒体文件。
Jan 31, 2026
dd27bbc
feat: 为克隆的声音添加音频预览和播放功能,包括UI更新和代理配置。
Jan 31, 2026
9e096d0
build: 更新本地Dockerfile以反映开发环境设置的变化。
Feb 1, 2026
96f8c0b
Merge pull request #3 from zhiheng-yu/feature/docker
Zerone-Agent Feb 1, 2026
9942447
chore: 更新 Aliyun Dockerfile 配置。
Zerone-Agent Feb 1, 2026
dfaae88
Merge pull request #4 from zhiheng-yu/feature/docker
Zerone-Agent Feb 1, 2026
40f604c
feat: 更改 pytorch 版本为 2.8.0,支持 flash-attn
Feb 2, 2026
7a5554c
Merge pull request #5 from zhiheng-yu/feature/docker
Zerone-Agent Feb 2, 2026
c7a9572
refactor: 在 Dockerfile.local 中添加 uv 超时环境变量,防止 uv 安装超时
Zerone-Agent Feb 5, 2026
45fce10
Merge pull request #6 from zhiheng-yu/feature/docker
Zerone-Agent Feb 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
backend/.venv
.venv
__pycache__
*.pyc

# Data
backend/data/
backend/uploads/
backend/previews/
**/*.wav
**/*.mp3
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# DashScope API Key (环境为 aliyun 时必填)
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxx

# Huggingface 镜像站
# HF_ENDPOINT=https://hf-mirror.com
57 changes: 57 additions & 0 deletions Dockerfile.aliyun
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# ==========================================
# 第一阶段:构建前端
# ==========================================
FROM node:20-slim AS frontend-builder

WORKDIR /app/frontend

# 复制依赖文件并安装 (利用 Docker 缓存)
COPY frontend/package*.json ./
RUN npm install

# 复制源码并构建
COPY frontend/ ./
RUN cp .env.example .env
RUN npm run build

# ==========================================
# 第二阶段:最终运行环境
# ==========================================
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 安装必要的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
&& rm -rf /var/lib/apt/lists/*

# 从官方 uv 镜像中安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uv/bin/
ENV PATH="/uv/bin:${PATH}"

# 复制后端依赖文件并安装 (使用 uv)
COPY backend/requirements.txt ./
RUN uv pip install --no-cache -r requirements.txt --system

# 复制后端代码
COPY backend/ ./

# 确保 previews 目录存在 (虽然 main.py 也会检查,但在这里创建更规范)
RUN mkdir -p previews

# 从第一阶段复制构建好的前端静态文件到后端 static 目录下
# 注意:我们在 backend/main.py 中配置了从 static 目录服务静态文件
COPY --from=frontend-builder /app/frontend/dist /app/static

# 设置环境变量默认值 (可以在运行时通过 -e 覆盖)
ENV QWEN3_TTS_ENV=aliyun
ENV PORT=8000
# 如果使用阿里云 DashScope,需要在运行容器时传入 DASHSCOPE_API_KEY

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
96 changes: 96 additions & 0 deletions Dockerfile.local
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# ==========================================
# 第一阶段:构建前端
# ==========================================
FROM node:20-slim AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm install
COPY frontend/ ./
RUN npm run build

# ==========================================
# 第二阶段:最终运行环境 (支持 GPU)
# ==========================================
# 使用 NVIDIA CUDA 开发版作为基础镜像 (支持编译 flash-attn)
# RTX 5090 需要 CUDA 12.8+ 才能完整支持其 Blackwell 架构 (SM 10.0)
FROM nvidia/cuda:12.8.0-devel-ubuntu22.04

# 设置工作目录
WORKDIR /app

# 设置环境变量,避免交互式安装提示
ENV DEBIAN_FRONTEND=noninteractive

# 安装 Python 3.11 以及必要的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
python3.11 \
python3-pip \
python3.11-dev \
curl \
git \
ffmpeg \
sox \
libsox-fmt-all \
libsndfile1 \
build-essential \
&& rm -rf /var/lib/apt/lists/*

# 将 python3.11 设置为默认 python
RUN ln -sf /usr/bin/python3.11 /usr/bin/python \
&& ln -sf /usr/bin/pip3 /usr/bin/pip

# 安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uv/bin/
ENV PATH="/uv/bin:${PATH}"
ENV UV_HTTP_TIMEOUT=600

# 复制后端依赖文件
COPY backend/requirements.txt ./

# 1. 安装基础依赖
RUN uv pip install --no-cache -r requirements.txt --system

# 2. 安装本地模型运行所需的深度学习依赖 (针对 CUDA 12.8, 支持 RTX 5090)
RUN uv pip install --no-cache \
torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0+cu128 \
--index-url https://download.pytorch.org/whl/cu128 --system

# 3. 安装 Qwen3-TTS 核心库
# 注意:如果 pypi 版本未发布,可能需要从 git 安装,这里先尝试 pypi
RUN uv pip install --no-cache qwen-tts --system

# 4. 可选:安装 FlashAttention 2 以优化性能 (构建时间较长,如不需要可注释掉)
# 8.0 (A100), 8.6 (RTX 30), 8.9 (RTX 40), 9.0 (H100), 10.0 (RTX 50)
# ENV TORCH_CUDA_ARCH_LIST="8.0;8.6;8.9;9.0;10.0"
# RUN uv pip install --no-cache flash-attn --no-build-isolation --system

# 复制后端代码
COPY backend/ ./

# 确保必要的目录存在
RUN mkdir -p previews data uploads

# 从第一阶段复制构建好的前端静态文件
COPY --from=frontend-builder /app/frontend/dist /app/static

# 设置 Hugging Face 缓存目录
ENV HF_HOME=/app/models_cache

# 安装 huggingface_hub 和 hf_transfer 用于加速在构建阶段下载模型
RUN uv pip install --no-cache huggingface_hub[hf_transfer] --system
ENV HF_HUB_ENABLE_HF_TRANSFER=1

# 在构建期间下载模型,避免运行时下载
RUN huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-Base
RUN huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
RUN huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign

# 设置本地运行相关的环境变量
ENV QWEN3_TTS_ENV=local
ENV PORT=8000

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Loading