Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 10 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
.env
__pycache__/
*.pyc
.git
.gitignore
.github
.script
.venv
tests
.pre-commit-config.yaml
31 changes: 31 additions & 0 deletions .github/workflows/docker.yaml
Original file line number Diff line number Diff line change
@@ -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
26 changes: 26 additions & 0 deletions .run/main start.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="main start" type="PythonConfigurationType" factoryName="Python">
<module name="kbase" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.12 (kbase)" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="uvicorn" />
<option name="PARAMETERS" value="app.main:app --host 0.0.0.0 --port 8080" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="true" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>
34 changes: 34 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -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"]
9 changes: 8 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,11 @@ _check_python:
exit 1; \
fi; \
echo "✅ Python ${PYTHON_VERSION_TARGET} 安装成功。"; \
fi
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
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ make run
| `make type` | 🔍 类型检查 |
| `make audit` | 🛡️ 扫描安全漏洞 |
| `make clean` | 🧹 清理临时文件 |
| `make docker_build` | docker打包 |
| `make docker_run` | 运行 docker 镜像 |

## 🔧 API 接口

Expand Down Expand Up @@ -285,3 +287,10 @@ make check # 自动格式化和修复大部分问题
---

💡 **提示**: 使用 `make help` 查看所有可用命令

## Docker 镜像和部署
Docker 打包的时候,忽略掉了很多文件,具体可以参考项目下的 .dockerignore 文件。

因此在使用 docker 来部署的时候,必须挂载:
- .env 文件
- config.yaml 文件
3 changes: 3 additions & 0 deletions app/web/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down