diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bda4b36 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.env +__pycache__/ +*.pyc +.git +.gitignore +.github +.script +.venv +tests +.pre-commit-config.yaml \ No newline at end of file diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml new file mode 100644 index 0000000..d5491b1 --- /dev/null +++ b/.github/workflows/docker.yaml @@ -0,0 +1,31 @@ +name: Docker Build + +on: + push: + branches: + - main # 你可以改成需要触发的分支,比如 master/dev + - dev + - actions + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: "flycash" + password: ${{ secrets.DOCKER_TOKEN }} + + - name: Build Docker image with Make + run: make docker_build + + - name: Push Docker image + run: docker push flycash/kbase:latest diff --git a/.run/main start.run.xml b/.run/main start.run.xml new file mode 100644 index 0000000..23f042a --- /dev/null +++ b/.run/main start.run.xml @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a4836b2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# 使用官方 Python 镜像 +FROM python:3.12-slim + +# 设置环境变量 +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 + +# 安装 uv(高性能依赖管理器) +RUN pip install --no-cache-dir uv + +# 设置工作目录 +WORKDIR /app + +# 先复制依赖文件(利用缓存) +COPY pyproject.toml uv.lock ./ + +# 安装依赖到虚拟环境 +RUN uv sync --frozen --no-cache --no-install-project + +# 再复制源码 +COPY . . + +# 安装项目本身(可选,如果 pyproject.toml 里定义了 [project]) +RUN uv sync --frozen --no-cache + +# 暴露端口(如果是 web 服务,比如 FastAPI/Flask) +EXPOSE 8000 + +# 启动命令(根据实际情况修改) +# 如果是 Web 服务 +CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"] + +# 如果是 CLI 程序 +# CMD ["uv", "run", "python", "kbase/main.py"] diff --git a/Makefile b/Makefile index d79419a..ee2d633 100644 --- a/Makefile +++ b/Makefile @@ -117,4 +117,11 @@ _check_python: exit 1; \ fi; \ echo "✅ Python ${PYTHON_VERSION_TARGET} 安装成功。"; \ - fi \ No newline at end of file + fi + +.PHONY: docker_build +docker_build: + docker build -t flycash/kbase:latest . + +.PHONY: docker_run + docker rm kbase && docker run --name kbase -p 8082:8082 --env-file .env flycash/kbase:latest \ No newline at end of file diff --git a/README.md b/README.md index c4d09c4..8989393 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,8 @@ make run | `make type` | 🔍 类型检查 | | `make audit` | 🛡️ 扫描安全漏洞 | | `make clean` | 🧹 清理临时文件 | +| `make docker_build` | docker打包 | +| `make docker_run` | 运行 docker 镜像 | ## 🔧 API 接口 @@ -285,3 +287,10 @@ make check # 自动格式化和修复大部分问题 --- 💡 **提示**: 使用 `make help` 查看所有可用命令 + +## Docker 镜像和部署 +Docker 打包的时候,忽略掉了很多文件,具体可以参考项目下的 .dockerignore 文件。 + +因此在使用 docker 来部署的时候,必须挂载: +- .env 文件 +- config.yaml 文件 \ No newline at end of file diff --git a/app/web/document.py b/app/web/document.py index dd8f559..66a18fa 100644 --- a/app/web/document.py +++ b/app/web/document.py @@ -86,6 +86,9 @@ def __init__( self._task_status: dict[str, str] = {} def register_routes(self) -> None: + self._router.get("/hello", summary="健康检查接口")( + lambda: {"message": "Hello, KBase RAG!"} + ) """将本处理器中的所有API端点注册到构造时传入的路由器上。""" self._router.get("/health", summary="健康检查")(DocumentHandler.health)