Skip to content

Commit 83fc37e

Browse files
authored
打包部署 actions (#4)
2 parents 9348b72 + 1f1dba7 commit 83fc37e

File tree

7 files changed

+121
-1
lines changed

7 files changed

+121
-1
lines changed

.dockerignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.env
2+
__pycache__/
3+
*.pyc
4+
.git
5+
.gitignore
6+
.github
7+
.script
8+
.venv
9+
tests
10+
.pre-commit-config.yaml

.github/workflows/docker.yaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Docker Build
2+
3+
on:
4+
push:
5+
branches:
6+
- main # 你可以改成需要触发的分支,比如 master/dev
7+
- dev
8+
- actions
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- name: Checkout source
16+
uses: actions/checkout@v4
17+
18+
- name: Set up Docker Buildx
19+
uses: docker/setup-buildx-action@v3
20+
21+
- name: Log in to Docker Hub
22+
uses: docker/login-action@v3
23+
with:
24+
username: "flycash"
25+
password: ${{ secrets.DOCKER_TOKEN }}
26+
27+
- name: Build Docker image with Make
28+
run: make docker_build
29+
30+
- name: Push Docker image
31+
run: docker push flycash/kbase:latest

.run/main start.run.xml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="main start" type="PythonConfigurationType" factoryName="Python">
3+
<module name="kbase" />
4+
<option name="ENV_FILES" value="" />
5+
<option name="INTERPRETER_OPTIONS" value="" />
6+
<option name="PARENT_ENVS" value="true" />
7+
<envs>
8+
<env name="PYTHONUNBUFFERED" value="1" />
9+
</envs>
10+
<option name="SDK_HOME" value="" />
11+
<option name="SDK_NAME" value="Python 3.12 (kbase)" />
12+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13+
<option name="IS_MODULE_SDK" value="false" />
14+
<option name="ADD_CONTENT_ROOTS" value="true" />
15+
<option name="ADD_SOURCE_ROOTS" value="true" />
16+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17+
<option name="SCRIPT_NAME" value="uvicorn" />
18+
<option name="PARAMETERS" value="app.main:app --host 0.0.0.0 --port 8080" />
19+
<option name="SHOW_COMMAND_LINE" value="false" />
20+
<option name="EMULATE_TERMINAL" value="false" />
21+
<option name="MODULE_MODE" value="true" />
22+
<option name="REDIRECT_INPUT" value="false" />
23+
<option name="INPUT_FILE" value="" />
24+
<method v="2" />
25+
</configuration>
26+
</component>

Dockerfile

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 使用官方 Python 镜像
2+
FROM python:3.12-slim
3+
4+
# 设置环境变量
5+
ENV PYTHONUNBUFFERED=1 \
6+
PYTHONDONTWRITEBYTECODE=1
7+
8+
# 安装 uv(高性能依赖管理器)
9+
RUN pip install --no-cache-dir uv
10+
11+
# 设置工作目录
12+
WORKDIR /app
13+
14+
# 先复制依赖文件(利用缓存)
15+
COPY pyproject.toml uv.lock ./
16+
17+
# 安装依赖到虚拟环境
18+
RUN uv sync --frozen --no-cache --no-install-project
19+
20+
# 再复制源码
21+
COPY . .
22+
23+
# 安装项目本身(可选,如果 pyproject.toml 里定义了 [project])
24+
RUN uv sync --frozen --no-cache
25+
26+
# 暴露端口(如果是 web 服务,比如 FastAPI/Flask)
27+
EXPOSE 8000
28+
29+
# 启动命令(根据实际情况修改)
30+
# 如果是 Web 服务
31+
CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]
32+
33+
# 如果是 CLI 程序
34+
# CMD ["uv", "run", "python", "kbase/main.py"]

Makefile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,11 @@ _check_python:
117117
exit 1; \
118118
fi; \
119119
echo "✅ Python ${PYTHON_VERSION_TARGET} 安装成功。"; \
120-
fi
120+
fi
121+
122+
.PHONY: docker_build
123+
docker_build:
124+
docker build -t flycash/kbase:latest .
125+
126+
.PHONY: docker_run
127+
docker rm kbase && docker run --name kbase -p 8082:8082 --env-file .env flycash/kbase:latest

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ make run
9292
| `make type` | 🔍 类型检查 |
9393
| `make audit` | 🛡️ 扫描安全漏洞 |
9494
| `make clean` | 🧹 清理临时文件 |
95+
| `make docker_build` | docker打包 |
96+
| `make docker_run` | 运行 docker 镜像 |
9597

9698
## 🔧 API 接口
9799

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

287289
💡 **提示**: 使用 `make help` 查看所有可用命令
290+
291+
## Docker 镜像和部署
292+
Docker 打包的时候,忽略掉了很多文件,具体可以参考项目下的 .dockerignore 文件。
293+
294+
因此在使用 docker 来部署的时候,必须挂载:
295+
- .env 文件
296+
- config.yaml 文件

app/web/document.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ def __init__(
8686
self._task_status: dict[str, str] = {}
8787

8888
def register_routes(self) -> None:
89+
self._router.get("/hello", summary="健康检查接口")(
90+
lambda: {"message": "Hello, KBase RAG!"}
91+
)
8992
"""将本处理器中的所有API端点注册到构造时传入的路由器上。"""
9093

9194
self._router.get("/health", summary="健康检查")(DocumentHandler.health)

0 commit comments

Comments
 (0)