diff --git a/.gitignore b/.gitignore index 48e4ceb..b0577cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ __pycache__/ -.venv \ No newline at end of file +.venv +wiki_backend.tar diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8205cc6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# 1. 使用官方 uv 镜像 +FROM ghcr.io/astral-sh/uv:latest AS uv_setup + +# 2. 运行环境 +FROM python:3.12-slim + +WORKDIR /app + +# 复制 uv 命令 +COPY --from=uv_setup /uv /uvx /bin/ + +# 安装系统依赖 +RUN apt-get update && apt-get install -y --no-install-recommends \ + libpq-dev \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# 复制依赖描述文件 +COPY pyproject.toml uv.lock ./ + +# 【核心修复】使用 uv sync +# --frozen: 强制要求 uv.lock 必须是最新的 +# --no-dev: 不安装开发依赖(如 pytest 等),减小体积 +# --no-install-project: 先不安装当前项目代码,只装依赖(优化缓存) +RUN uv sync --frozen --no-dev --no-install-project + +# 复制项目代码 +COPY . . + +# 【关键点】将虚拟环境的 bin 目录加入系统路径 +# 这样你运行 python 或 uvicorn 时,系统会自动使用 uv 准备好的那个环境 +ENV PATH="/app/.venv/bin:$PATH" +ENV PYTHONPATH=/app + +# 暴露端口 +EXPOSE 8000 + +# 启动命令 +# 现在直接调用 uvicorn 即可,它会自动找到 .venv 里的版本 +CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b2c361e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.8' + +services: + api: + build: . # 自动寻找当前目录下的 Dockerfile + image: wiki-backend:latest + container_name: wiki_backend + ports: + - "8000:8000" + environment: + - DB_USER=postgres + - DB_PASS=DXC_welcome001 + - DB_HOST=8.155.144.6 + - DB_PORT=25432 + - DB_NAME=wiki_crawler + restart: always \ No newline at end of file