mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-05-06 14:04:32 +08:00
- 修复Redis连接地址硬编码问题,使用环境变量REDIS_URL - 添加缺失的Python依赖:pysrt和psutil - 修复Docker构建中的Rollup兼容性问题,使用node:18-slim - 修复容器启动脚本的node环境检查问题 - 修复data目录权限问题 - 修复docker-compose.yml版本警告 - 创建专门的Docker启动脚本和开发环境配置 - 优化Dockerfile构建流程和错误处理 解决的主要问题: 1. 构建阶段失败 - Rollup模块兼容性 2. 依赖缺失 - pysrt和psutil 3. 运行时失败 - Redis硬编码和权限问题 4. 开发环境vite命令找不到问题 现在Docker部署应该可以正常工作。
107 lines
2.4 KiB
Docker
107 lines
2.4 KiB
Docker
# AutoClip Dockerfile
|
||
# 多阶段构建,优化镜像大小
|
||
|
||
# 第一阶段:构建前端
|
||
FROM node:18-slim AS frontend-builder
|
||
|
||
WORKDIR /app/frontend
|
||
|
||
# 安装必要的系统依赖
|
||
RUN apt-get update && apt-get install -y \
|
||
python3 \
|
||
make \
|
||
g++ \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# 复制前端依赖文件
|
||
COPY frontend/package*.json ./
|
||
|
||
# 安装前端依赖(使用完整安装,包括devDependencies)
|
||
RUN npm ci
|
||
|
||
# 复制前端源代码
|
||
COPY frontend/ ./
|
||
|
||
# 构建前端
|
||
RUN npm run build
|
||
|
||
# 第二阶段:构建后端
|
||
FROM python:3.9-slim AS backend-builder
|
||
|
||
# 设置环境变量
|
||
ENV PYTHONUNBUFFERED=1
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
ENV PIP_NO_CACHE_DIR=1
|
||
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
|
||
|
||
WORKDIR /app
|
||
|
||
# 安装系统依赖
|
||
RUN apt-get update && apt-get install -y \
|
||
build-essential \
|
||
curl \
|
||
ffmpeg \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# 复制Python依赖文件
|
||
COPY requirements.txt ./
|
||
|
||
# 安装Python依赖
|
||
RUN pip install --no-cache-dir -r requirements.txt
|
||
|
||
# 第三阶段:最终镜像
|
||
FROM python:3.9-slim
|
||
|
||
# 设置环境变量
|
||
ENV PYTHONUNBUFFERED=1
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
ENV PYTHONPATH=/app
|
||
|
||
# 创建非root用户
|
||
RUN groupadd -r autoclip && useradd -r -g autoclip autoclip
|
||
|
||
# 安装运行时依赖
|
||
RUN apt-get update && apt-get install -y \
|
||
ffmpeg \
|
||
curl \
|
||
&& rm -rf /var/lib/apt/lists/* \
|
||
&& apt-get clean
|
||
|
||
# 设置工作目录
|
||
WORKDIR /app
|
||
|
||
# 从构建阶段复制文件
|
||
COPY --from=backend-builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
|
||
COPY --from=backend-builder /usr/local/bin /usr/local/bin
|
||
COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist
|
||
|
||
# 复制项目文件
|
||
COPY backend/ ./backend/
|
||
COPY scripts/ ./scripts/
|
||
COPY *.sh ./
|
||
COPY env.example .env
|
||
COPY docker-entrypoint.sh ./
|
||
|
||
# 创建必要的目录
|
||
RUN mkdir -p data/projects data/uploads data/temp data/output logs
|
||
|
||
# 设置权限
|
||
RUN chown -R autoclip:autoclip /app
|
||
RUN chmod +x *.sh
|
||
RUN chmod +x docker-entrypoint.sh
|
||
RUN chmod -R 755 data logs
|
||
|
||
# 切换到非root用户
|
||
USER autoclip
|
||
|
||
# 暴露端口
|
||
EXPOSE 8000 3000
|
||
|
||
# 健康检查
|
||
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
||
CMD curl -f http://localhost:8000/api/v1/health/ || exit 1
|
||
|
||
# 启动命令
|
||
ENTRYPOINT ["./docker-entrypoint.sh"]
|
||
CMD ["python", "-m", "uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
|