feat: Docker 容器化、Cookie 鉴权、Coordinator 编排、FTS5 搜索与 P1-P3 全面收尾
Docker 容器化部署
- 提供 Mode A (Alpine musl, ~23MB) 和 Mode B (Distroless glibc, ~87MB)
两种镜像,Docker Compose 一键启动
- build.rs 支持 SKIP_DASHBOARD_BUILD 跳过前端构建
- 国内镜像加速 (npm/apt/apk) 通过 USE_MIRRORS build-arg 控制
安全:Cookie-Based 鉴权系统
- HttpOnly/SameSite=Strict Cookie 会话管理(24h 过期自动清理)
- 登录/登出/验证接口 + 中间件注入
- 前端登录页面 + 退出按钮
- 三层 CORS:localhost 鉴权 / 全放通 bookmarklet / 受保护路由
- 书签脚本 fetch 添加 credentials:'include'
Coordinator 模式 (P2)
- 4 个 meta-tool (delegate_task/check_task/task_stop/synthesize)
- WorkerPool + Semaphore 并发控制 + 超时保护
- 前端协调者模式开关
Hook 系统:UserPromptSubmit 事件 (P2)
- 第 13 个生命周期事件,fire-and-forget 审计
FTS5 全文搜索 (P3)
- agent_sessions_fts + agent_messages_fts 虚拟表
- search_history Agent 工具 + /api/search/history HTTP 接口
- 前端防抖搜索框 + 仅当前会话筛选
工具加载优化 (P3)
- defer_loading 延迟加载 (7 个重型工具)
- is_readonly 只读标记 (9 个查询工具)
- classifier_summary 工具目录供 LLM 按需判断
模型回退策略 (P3)
- LLM_FALLBACK_MODEL 优先回退 + LLM_FALLBACK_CHAIN 链式轮换
- LlmClient model 改为 Arc<RwLock> 支持运行时切换
- 连续 3 次过载后自动切换
压缩记忆桥接 (P3)
- 压缩丢弃消息 → 子代理提取持久记忆 (extract_memories_from_compaction)
git2 依赖修复
- 切换到 vendored-libgit2,消除 OpenSSL 系统依赖
This commit is contained in:
+242
-124
@@ -1,10 +1,152 @@
|
||||
# AstroResearch Deployment Guide / 部署指南
|
||||
|
||||
AstroResearch 的后端服务是由 Rust 编译出的单执行文件,它内置托管了前端 React 的静态构建资源,因此生产部署十分简单。
|
||||
AstroResearch 支持两种部署方式:**Docker 容器化部署**(推荐,零依赖)和**传统源码编译部署**。
|
||||
|
||||
---
|
||||
|
||||
## 1. 系统要求与环境依赖 (Requirements)
|
||||
## 1. Docker 部署(推荐)
|
||||
|
||||
Docker 部署无需安装 Rust/Node.js 工具链,一键启动。提供两种镜像模式。
|
||||
|
||||
### 快速开始
|
||||
|
||||
```bash
|
||||
# 1. 配置环境变量
|
||||
cp .env.example .env
|
||||
# 编辑 .env 填入 API Key
|
||||
|
||||
# 2. 启动 (Mode A — 推荐日常使用)
|
||||
docker compose up -d
|
||||
|
||||
# 3. 访问
|
||||
open http://localhost:8000
|
||||
```
|
||||
|
||||
### 两种镜像模式对比
|
||||
|
||||
| | Mode A (`Dockerfile`) | Mode B (`Dockerfile.modeB`) |
|
||||
|---|---|---|
|
||||
| **镜像大小** | ~23 MB | ~87 MB |
|
||||
| **基础镜像** | `alpine:3.21` | `distroless/cc-debian12:nonroot` |
|
||||
| **libc** | musl (静态链接) | glibc (动态链接) |
|
||||
| **二进制体积** | ~12 MB | ~59 MB |
|
||||
| **二进制包含** | Rust + C 依赖 | Rust + C + V8 + BoringSSL |
|
||||
| **运行时依赖** | 无 (静态链接) | `libc` + `libstdc++` + `libgcc_s` (已内置) |
|
||||
| **空闲内存** | ~8.6 MiB | ~8.7 MiB |
|
||||
| **Obscura** | 外部 `bin/` bind mount | 编译在二进制内 |
|
||||
| **容器 Shell** | 有 (`/bin/sh`) | 无 (distroless) |
|
||||
| **Healthcheck** | `wget` TCP probe | 编排层替代 |
|
||||
|
||||
---
|
||||
|
||||
### Mode A:Alpine 外部 Obscura(推荐日常使用)
|
||||
|
||||
镜像最小(23 MB),Obscura 作为外部二进制通过 bind mount 注入,可独立更新。
|
||||
|
||||
**构建:**
|
||||
```bash
|
||||
docker build -t astroresearch:latest .
|
||||
```
|
||||
|
||||
**运行:**
|
||||
```bash
|
||||
docker run -d --name astro -p 8000:8000 --env-file .env \
|
||||
-v ./library:/app/library \
|
||||
-v ./logs:/app/logs \
|
||||
-v ./skills:/app/skills:ro \
|
||||
-v ./bin:/app/bin:ro \
|
||||
astroresearch:latest
|
||||
```
|
||||
|
||||
> `bin/` 目录需包含编译好的 Obscura 二进制文件(`obscura` 和 `obscura-worker`)。
|
||||
|
||||
**docker-compose.yml(已内置):**
|
||||
```yaml
|
||||
services:
|
||||
astroresearch:
|
||||
build:
|
||||
context: .
|
||||
image: astroresearch:latest
|
||||
container_name: astroresearch
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- “${PORT:-8000}:8000”
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- LOG_FORMAT=json
|
||||
- LOG_OUTPUTS=stdout
|
||||
volumes:
|
||||
- ./library:/app/library
|
||||
- ./logs:/app/logs
|
||||
- ./skills:/app/skills:ro
|
||||
- ./bin:/app/bin:ro
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Mode B:Distroless 进程内 Obscura(全功能单体)
|
||||
|
||||
Obscura (V8 + BoringSSL) 编译在二进制内,单容器零外部二进制依赖。适合对外交付的一键部署包。
|
||||
|
||||
**前置条件:**
|
||||
```bash
|
||||
mkdir -p libs
|
||||
git clone https://github.com/h4ckf0r0day/obscura libs/obscura
|
||||
```
|
||||
|
||||
**构建:**
|
||||
```bash
|
||||
docker build -f Dockerfile.modeB -t astroresearch-all:latest .
|
||||
```
|
||||
|
||||
**运行:**
|
||||
```bash
|
||||
docker run -d --name astro -p 8000:8000 --env-file .env \
|
||||
-v ./library:/app/library \
|
||||
-v ./logs:/app/logs \
|
||||
-v ./skills:/app/skills:ro \
|
||||
astroresearch-all:latest
|
||||
```
|
||||
|
||||
> Mode B 基于 [Distroless](https://github.com/GoogleContainerTools/distroless) 构建,无 Shell/包管理器,安全性更高但无法 `docker exec` 进入调试。
|
||||
|
||||
---
|
||||
|
||||
### 国内网络加速
|
||||
|
||||
默认启用镜像加速(`USE_MIRRORS=1`),海外构建可通过 build-arg 禁用:
|
||||
|
||||
```bash
|
||||
docker build --build-arg USE_MIRRORS=0 -t astroresearch:latest .
|
||||
```
|
||||
|
||||
**加速源:**
|
||||
|
||||
| 工具 | 镜像 |
|
||||
|------|------|
|
||||
| npm | `registry.npmmirror.com` |
|
||||
| Alpine apk | `mirrors.aliyun.com` |
|
||||
| Debian apt | `mirrors.ustc.edu.cn` |
|
||||
|
||||
---
|
||||
|
||||
### 持久化数据卷
|
||||
|
||||
| 容器路径 | 说明 | 推荐权限 |
|
||||
|----------|------|---------|
|
||||
| `/app/library` | SQLite 数据库 + PDF/HTML 全文 | 读写 |
|
||||
| `/app/logs` | 应用日志(仅 `LOG_OUTPUTS=file` 时写入) | 读写 |
|
||||
| `/app/skills` | Agent 技能文件 (SKILL.md) | 只读 (`:ro`) |
|
||||
| `/app/bin` | Obscura 外部二进制(仅 Mode A) | 只读 (`:ro`) |
|
||||
|
||||
> **注意**:bind mount 目录的宿主权限必须允许容器内用户(uid 65532)写入。如遇 `Permission denied`,在宿主执行 `chown -R 65532 ./library ./logs`。
|
||||
|
||||
---
|
||||
|
||||
## 2. 传统源码编译部署
|
||||
|
||||
### 系统要求
|
||||
|
||||
- **操作系统**:Linux / macOS / Windows
|
||||
- **运行环境**:
|
||||
@@ -12,170 +154,146 @@ AstroResearch 的后端服务是由 Rust 编译出的单执行文件,它内置
|
||||
- Rust (1.75+) 用以编译后端 Axum 进程
|
||||
- SQLite (自动内置,无需单独部署)
|
||||
|
||||
---
|
||||
### 构建步骤
|
||||
|
||||
## 2. 生产构建步骤 (Production Build Steps)
|
||||
|
||||
### 步骤 1:构建 React 前端静态资源
|
||||
进入 `dashboard` 文件夹,安装依赖并执行编译命令。编译产物会自动输出在 `dashboard/dist` 目录下:
|
||||
**步骤 1:构建前端**
|
||||
```bash
|
||||
cd dashboard
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
产物位于 `dashboard/dist/`。
|
||||
|
||||
### 步骤 2:编译 Rust 后端二进制文件
|
||||
返回项目根目录,通过 Cargo 构建 Release 版本的执行文件。编译后的程序会内置链接 `dashboard/dist` 下的全部静态资源:
|
||||
**步骤 2:编译后端**
|
||||
```bash
|
||||
cd ..
|
||||
cargo build --release
|
||||
```
|
||||
编译产物位于 `target/release/astroresearch`。
|
||||
产物位于 `target/release/astroresearch`。
|
||||
|
||||
### 步骤 3(可选):编译健康检查工具
|
||||
如需在目标服务器上运行馆藏健康度诊断与修复:
|
||||
**步骤 3(可选):健康检查工具**
|
||||
```bash
|
||||
cargo build --release --bin health_check
|
||||
```
|
||||
编译产物位于 `target/release/health_check`。
|
||||
|
||||
### 启动
|
||||
|
||||
```bash
|
||||
cp .env.example .env # 编辑填入 API Key
|
||||
./target/release/astroresearch
|
||||
# 监听 http://localhost:8000
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 服务部署与启动 (Running in Production)
|
||||
## 3. Obscura 两种部署模式
|
||||
|
||||
1. 将编译出来的 `target/release/astroresearch` 二进制文件部署到目标服务器。
|
||||
2. 在二进制文件同一目录下,创建并填写 `.env` 环境变量配置文件(可从根目录的 `.env.example` 复制模板)。
|
||||
3. 确保本地相对路径下拥有天文对照词典文件 `dictionary.txt`。
|
||||
4. 运行后端服务:
|
||||
```bash
|
||||
./astroresearch
|
||||
```
|
||||
5. 进程将默认在后台启动并监听 `http://localhost:8000` 端口。你可以通过 Nginx 将此端口反向代理到公网 80/443 端口。
|
||||
系统集成 `Obscura` 无头浏览器框架,用于绕过 WAF/Cloudflare 反爬。支持两种模式:
|
||||
|
||||
### 模式 A:外部命令行 (默认)
|
||||
|
||||
Obscura 作为独立二进制运行,与主进程隔离。适合常规生产环境。
|
||||
|
||||
| 部署方式 | 步骤 |
|
||||
|----------|------|
|
||||
| **Docker** | `docker compose up -d`(自动 bind mount `./bin`) |
|
||||
| **源码** | 下载 obscura 到 `bin/`,赋予执行权限后启动 |
|
||||
|
||||
二进制安装(源码部署时):
|
||||
```bash
|
||||
mkdir -p bin/
|
||||
# 下载 obscura 和 obscura-worker 到 bin/,赋予执行权限
|
||||
chmod +x bin/obscura bin/obscura-worker
|
||||
```
|
||||
|
||||
### 模式 B:进程内集成
|
||||
|
||||
Obscura (V8 + BoringSSL) 编译进二进制,单文件零外部依赖。
|
||||
|
||||
| 部署方式 | 构建命令 |
|
||||
|----------|---------|
|
||||
| **Docker** | `docker build -f Dockerfile.modeB -t astroresearch-all:latest .` |
|
||||
| **源码** | `cargo build --release --features obscura-inprocess` |
|
||||
|
||||
> 源码编译 Mode B 需先克隆 [Obscura 源码](https://github.com/h4ckf0r0day/obscura) 到 `libs/obscura/`。同时需要 `binutils`(`nm` + `objcopy`)和 `libclang-dev` 作为构建依赖。
|
||||
|
||||
---
|
||||
|
||||
## 4. Obscura 两种抓取后备部署模式选择 (Obscura Deployment Modes)
|
||||
## 4. 极致内存与体积优化
|
||||
|
||||
系统集成了 `Obscura` 无头浏览器框架来作为遭遇 WAF/Cloudflare 反爬时的自动后备抓取通道。系统支持以下两种编译与部署模式:
|
||||
对于低配服务器(如 1核512M),系统提供 `release-min` 编译配置。
|
||||
|
||||
### 模式 A:外部命令行模式 (默认,推荐)
|
||||
该模式将主 Web 服务与 V8 浏览器运行引擎相隔离,最适合常规生产环境。它拥有最快的编译时间,且进程隔离确保无头浏览器内核异常(如 OOM 或 Panic)不会拖垮主服务器。
|
||||
> `release-min` 与 Mode B 可共同启用,但效果有限——V8/BoringSSL 静态库占用的 ~50MB 无法被 LTO 消除。追求极致轻量建议用 **Mode A + release-min** 组合。
|
||||
|
||||
1. **编译主服务**:
|
||||
```bash
|
||||
cargo build --release
|
||||
```
|
||||
2. **下载/配置外部二进制**:
|
||||
从 GitHub Releases 下载编译好的 `obscura-x86_64-linux.tar.gz` 压缩包,解压后将 `obscura` 和 `obscura-worker` 两个二进制文件放到项目根目录的 `bin/` 目录下:
|
||||
```bash
|
||||
mkdir -p bin/
|
||||
# 放入 bin/obscura 和 bin/obscura-worker,并赋予执行权限
|
||||
chmod +x bin/obscura bin/obscura-worker
|
||||
```
|
||||
3. **运行**:
|
||||
```bash
|
||||
./target/release/astroresearch
|
||||
```
|
||||
当遭遇 WAF 拦截时,主进程将自动通过异步子进程调用 `./bin/obscura` 进行抓取。
|
||||
**优化指标 (Mode A, release-min):**
|
||||
|
||||
### 模式 B:进程内集成模式 (In-Process Feature)
|
||||
该模式将整个无头浏览器及 V8 运行引擎直接静态链接编译进单个二进制文件中。这免去了在服务器分发和配置外部可执行程序的步骤,提供了”零配置”的部署体验。
|
||||
| 指标 | release | release-min | 降幅 |
|
||||
|------|---------|-------------|------|
|
||||
| 二进制大小 | 17.0 MB | 8.3 MB | 51% |
|
||||
| 启动 RSS | 34.8 MB | 32.9 MB | 5% |
|
||||
| 虚拟内存 (VSZ) | 1.27 GB | 302 MB | 76% |
|
||||
| 数据段 (VmData) | 60.1 MB | 26.5 MB | 55% |
|
||||
|
||||
> [!WARNING]
|
||||
> 由于需要静态链接 C++ 编写的 V8 引擎,**首次编译会额外多耗时 1 到 3 分钟**,且最终编译生成的**单体可执行文件体积会膨胀约 80MB**。
|
||||
```bash
|
||||
# 源码编译
|
||||
cargo build --profile release-min
|
||||
|
||||
0. **获取 Obscura 依赖源码**(仅首次):
|
||||
`libs/` 目录未被 Git 跟踪(已列入 `.gitignore`),`git clone` 后需要单独拉取 Obscura 浏览器内核源码:
|
||||
```bash
|
||||
mkdir -p libs
|
||||
git clone https://github.com/h4ckf0r0day/obscura libs/obscura
|
||||
```
|
||||
# Docker(已默认使用 release-min)
|
||||
docker build -t astroresearch:latest .
|
||||
```
|
||||
|
||||
1. **启用 Feature 编译**:
|
||||
在构建时指定 `--features obscura-inprocess` 特性标记:
|
||||
```bash
|
||||
cargo build --release --features obscura-inprocess
|
||||
```
|
||||
2. **运行**:
|
||||
```bash
|
||||
./target/release/astroresearch
|
||||
```
|
||||
主服务运行期间,无需在磁盘中放置任何 `bin/obscura` 二进制。当触发反爬时,系统会在后台的专有阻塞线程池上通过独立包装的单线程 runtime 驱动进程内 V8 浏览器内核直接抓取。
|
||||
**限制 Tokio 线程数:**
|
||||
```bash
|
||||
PORT=8000 TOKIO_WORKER_THREADS=1 ./astroresearch
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 极致内存与体积优化部署 (Ultra-Low Memory & Size Optimization)
|
||||
|
||||
对于运行在低配/低内存服务器(如 1核512M 或 1核1G 实例)的环境,系统内置了可选的编译与运行时优化策略。
|
||||
|
||||
> [!NOTE]
|
||||
> 极致内存与体积优化编译配置(`release-min`)和“进程内集成模式 (In-Process Feature)”在**技术上可以完全兼容并共同启用**,但它们在**优化目标(指标)上是相互抵消(矛盾)的**。
|
||||
> 如果启用了进程内 V8 特性,C++ 静态链接库本身占用的 80MB+ 空间将无法被剔除,导致无法达成极致轻量化(~8.3MB)的体积指标;且 V8 运行时堆内存也会带来额外的物理内存开销。因此,为追求极致低资源消耗,建议在低配服务器上采用**“模式 A:外部命令行模式”**。
|
||||
>
|
||||
> 如果你执意要在**进程内浏览器集成下尽可能对其体积和依赖进行优化**,可以组合使用 `--profile` 与 `--features` 参数进行编译和运行:
|
||||
> ```bash
|
||||
> # 编译并打包优化后的进程内单二进制文件:
|
||||
> cargo build --profile release-min --features obscura-inprocess
|
||||
>
|
||||
> # 编译并直接运行:
|
||||
> cargo run --profile release-min --features obscura-inprocess
|
||||
> ```
|
||||
|
||||
### 优化指标对比:
|
||||
* **二进制执行文件大小**:由 `17.0 MB` 压缩至 **`8.3 MB`**(缩减约 51%)。
|
||||
* **启动物理常驻内存 (RSS)**:由 `34.8 MB` 降至 **`32.9 MB`**(得益于词典加载后的容量自动收缩)。
|
||||
* **虚拟内存 (VSZ)**:由 `1.27 GB` 降至 **`302 MB`**(缩减约 76%)。
|
||||
* **数据段内存 (VmData)**:由 `60.1 MB` 降至 **`26.5 MB`**(缩减约 55%)。
|
||||
|
||||
### 部署优化步骤:
|
||||
|
||||
1. **使用优化 Profile 进行编译**:
|
||||
在项目根目录下,使用内置的 `release-min` 编译配置:
|
||||
```bash
|
||||
cargo build --profile release-min
|
||||
```
|
||||
编译完成后的执行文件位于 `target/release-min/astroresearch`。该配置开启了 LTO(链接时优化)、剥离了调试符号,并在生成时进行了大小优化。
|
||||
|
||||
2. **限制运行时异步线程数**:
|
||||
默认情况下,异步运行时 Tokio 会根据系统的 CPU 核心数(例如 16 核)创建对应数量的 Worker 线程,这会带来很多虚拟/物理内存浪费。启动服务时,可通过注入 `TOKIO_WORKER_THREADS=1` 环境变量限制线程池大小:
|
||||
```bash
|
||||
PORT=8000 TOKIO_WORKER_THREADS=1 ./astroresearch
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 环境变量配置 (Environment Variables)
|
||||
## 5. 环境变量
|
||||
|
||||
| 变量名 | 必需 | 默认值 | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `DATABASE_URL` | 否 | `sqlite://library/astro_research.db` | SQLite 数据库连接 URL |
|
||||
| `ADS_API_KEY` | 是 | - | NASA ADS API 访问 Token |
|
||||
| `LLM_API_KEY` | 是 | - | 大语言模型 API Key |
|
||||
| `LLM_API_BASE` | 否 | `https://api.openai.com/v1` | 大语言模型 API 基础地址 |
|
||||
| `LLM_MODEL` | 否 | `gpt-4o-mini` | 翻译大模型名称 |
|
||||
| `EMBEDDING_API_KEY` | 否 | 默认与 `LLM_API_KEY` 一致 | 向量模型 API Key |
|
||||
| `EMBEDDING_API_BASE`| 否 | 默认与 `LLM_API_BASE` 一致 | 向量模型 API 基础地址 |
|
||||
| `EMBEDDING_MODEL` | 否 | `text-embedding-3-small` | 向量模型名称 |
|
||||
| `QINIU_AK` | 否 | - | 七牛云 Access Key |
|
||||
| `QINIU_SK` | 否 | - | 七牛云 Secret Key |
|
||||
| `QINIU_BUCKET` | 否 | - | 七牛云存储空间名 |
|
||||
| `QINIU_DOMAIN` | 否 | - | 七牛云外链 CDN 域名 |
|
||||
| `MINERU_API_URL` | 否 | - | MinerU PDF 解析远程 API 地址 |
|
||||
| `MINERU_API_KEY` | 否 | - | MinerU API Token |
|
||||
| `LIBRARY_DIR` | 否 | `./library` | 本地文献馆藏根目录 |
|
||||
| `PORT` | 否 | `8000` | 后端服务监听端口 |
|
||||
| `DATABASE_URL` | 否 | `sqlite:///app/library/astro_research.db` | SQLite 连接 URL |
|
||||
| `ADS_API_KEY` | 是 | - | NASA ADS API Token |
|
||||
| `LLM_API_KEY` | 是 | - | LLM API Key |
|
||||
| `LLM_API_BASE` | 否 | `https://api.openai.com/v1` | LLM API 地址 |
|
||||
| `LLM_MODEL` | 否 | `gpt-4o-mini` | 对话模型 |
|
||||
| `EMBEDDING_API_KEY` | 否 | 同 `LLM_API_KEY` | Embedding API Key |
|
||||
| `EMBEDDING_API_BASE` | 否 | 同 `LLM_API_BASE` | Embedding API 地址 |
|
||||
| `EMBEDDING_MODEL` | 否 | `text-embedding-3-small` | Embedding 模型 |
|
||||
| `LIBRARY_DIR` | 否 | `/app/library` | 文献馆藏根目录 |
|
||||
| `SKILLS_DIR` | 否 | `/app/skills` | Agent 技能目录 |
|
||||
| `LOG_DIR` | 否 | `/app/logs` | 日志目录 |
|
||||
| `LOG_FORMAT` | 否 | `json` | 日志格式 (`plain` / `json`) |
|
||||
| `LOG_OUTPUTS` | 否 | `stdout` | 日志输出 (`stdout` / `file`) |
|
||||
| `PORT` | 否 | `8000` | 监听端口 |
|
||||
| `AGENT_MAX_STEPS` | 否 | `8` | Agent 最大步数 |
|
||||
| `AGENT_TOOL_TIMEOUT_SECS` | 否 | `120` | 工具超时 (秒) |
|
||||
| `QINIU_AK` / `QINIU_SK` | 否 | - | 七牛云存储凭证 |
|
||||
| `MINERU_API_URL` | 否 | - | MinerU PDF 解析 API |
|
||||
|
||||
---
|
||||
|
||||
## 7. 健康检查与维护 (Health Check)
|
||||
|
||||
部署后可定期运行健康检查工具排查馆藏一致性问题:
|
||||
## 6. 健康检查与维护
|
||||
|
||||
**Docker 健康检查(Mode A):**
|
||||
```bash
|
||||
# 只读扫描(不修改任何数据)
|
||||
docker ps --filter “health=healthy” --filter “name=astroresearch”
|
||||
```
|
||||
|
||||
Mode B (distroless) 无内置 healthcheck,可在编排层配置:
|
||||
```yaml
|
||||
# docker-compose 或 k8s
|
||||
healthcheck:
|
||||
test: [“CMD”, “curl”, “-f”, “http://localhost:8000/”]
|
||||
```
|
||||
|
||||
**源码部署健康检查:**
|
||||
```bash
|
||||
# 只读扫描
|
||||
./health_check
|
||||
|
||||
# 自动修复(清理损坏文件、重置无效路径)
|
||||
# 自动修复
|
||||
./health_check -- --fix
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user