# zhctprompt 开发环境部署

## 部署目标

- 服务器：`101.200.165.56`
- 目录：`/workspace/developSite/zhctprompt`
- 方式：无构建，直接同步仓库文件
- 访问：`http://zhctpmt.yyangpt.cn/`
- 宝塔站点配置：`deploy/baota-nginx-zhctpmt.yyangpt.cn.conf`
- IP 站点配置：`deploy/baota-nginx-101.200.165.56.conf`

## 在线访问入口

| 类型 | 地址 | 说明 |
| --- | --- | --- |
| IP 项目根目录 | `http://101.200.165.56/zhctprompt/` | 可浏览 `zhctprompt` 目录结构 |
| IP Markdown 文件 | `http://101.200.165.56/zhctprompt/README.md` | Markdown 文件按统一样式渲染 |
| IP HTML 文件 | `http://101.200.165.56/zhctprompt/operation-manuals/index.html` | HTML 文件直接由 Nginx 静态访问 |
| 域名项目根目录 | `https://zhctpmt.yyangpt.cn/` | 可浏览 `zhctprompt` 目录结构 |
| 域名 Markdown 文件 | `https://zhctpmt.yyangpt.cn/README.md` | Markdown 文件按统一样式渲染 |
| 域名 HTML 文件 | `https://zhctpmt.yyangpt.cn/operation-manuals/index.html` | HTML 文件直接由 Nginx 静态访问 |

## 文件访问链接拼接规则

后续查询 `zhctprompt` 内文件的在线访问链接时，默认返回域名访问地址：

```text
https://zhctpmt.yyangpt.cn/<仓库内相对路径>
```

需要 IP 地址时，使用：

```text
http://101.200.165.56/zhctprompt/<仓库内相对路径>
```

示例：

| 仓库内路径 | 域名访问链接 |
| --- | --- |
| `README.md` | `https://zhctpmt.yyangpt.cn/README.md` |
| `operation-manuals/index.html` | `https://zhctpmt.yyangpt.cn/operation-manuals/index.html` |
| `operation-manuals/` | `https://zhctpmt.yyangpt.cn/operation-manuals/` |

对应 skill：`standards-stack/agent-skills/skills/zhctprompt-online-file-link/SKILL.md`。当用户说“查询文件连接 / 文件链接 / 线上地址 / 查看 MD 或 HTML 文件”时，直接按上面的规则返回拼接好的域名访问链接。

注意：域名站点的 Nginx `root` 已指向 `/workspace/developSite/zhctprompt`，因此域名外链不加 `/zhctprompt/`；IP 站点 root 指向 `/workspace/developSite`，因此 IP 外链才加 `/zhctprompt/`。带图片、CSS、JS 等相对资源的 HTML 外发前，必须用公网 URL 验证 HTML 200 且所有资源 200。

## 宝塔 Nginx 配置

### 域名站点

在宝塔站点 `zhctpmt.yyangpt.cn` 的 Nginx 配置中，使用本仓库维护的配置：

```text
deploy/baota-nginx-zhctpmt.yyangpt.cn.conf
```

关键约定：

- `root` 指向 `/workspace/developSite/zhctprompt`，独立域名从根路径访问文档站。
- 同时保留 `/zhctprompt/` alias，兼容旧 IP 站点路径。
- `README.md` 不加入宝塔默认禁止项，否则 Markdown 文档无法访问。
- `/raw-files/zhctprompt/` 用于给 Markdown 渲染器读取原文。
- `/__mdview/index.html` 指向仓库内 `docker/config/nginx/conf/mdview/index.html`。
- `/operation-manuals/` 目录开启目录浏览，并禁用自动打开 `index.html`。
- `/` 和 `/zhctprompt/` 也要使用 `index __disable_index__; autoindex on;`，否则宝塔默认生成的 `index.html` 会覆盖目录列表。

### IP 站点

在宝塔站点 `101.200.165.56` 的 Nginx 配置中，使用本仓库维护的配置：

```text
deploy/baota-nginx-101.200.165.56.conf
```

关键约定：

- `root` 指向 `/workspace/developSite`，不要指到 `/workspace/developSite/zhctprompt`。
- `/zhctprompt/` 使用 `alias /workspace/developSite/zhctprompt/;`。
- `/zhctprompt/` 必须使用 `index __disable_index__; autoindex on;`，否则宝塔默认生成的 `/workspace/developSite/zhctprompt/index.html` 会覆盖目录列表。
- `/zhctprompt/operation-manuals/` 也使用 `index __disable_index__; autoindex on;`，保持目录展示。
- `README.md` 不加入宝塔默认禁止项，否则 `http://101.200.165.56/zhctprompt/README.md` 无法访问。

IP 站点最容易漏改的是这一段：

```nginx
location /zhctprompt/ {
    alias /workspace/developSite/zhctprompt/;
    index __disable_index__;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    charset utf-8;
    default_type application/octet-stream;
}
```

保存后执行：

```bash
nginx -t
nginx -s reload
```

## 云效流水线命令

在云效流水线「命令行」步骤执行：

```bash
bash deploy/aliyun-flow-deploy-zhctprompt.sh
```

## 可配置变量

| 变量 | 默认值 | 说明 |
| --- | --- | --- |
| `DEPLOY_HOST` | `101.200.165.56` | 开发服务器 IP |
| `DEPLOY_USER` | `root` | SSH 用户 |
| `DEPLOY_PORT` | `22` | SSH 端口 |
| `DEPLOY_PATH` | `/workspace/developSite/zhctprompt` | 远端部署目录 |
| `SSH_KEY` | 空 | SSH 私钥路径；不填则使用流水线默认 SSH 环境 |
| `DEPLOY_DELETE` | `1` | 是否删除远端多余文件，`1=删除`，`0=保留` |
| `PUBLIC_BASE_URL` | `http://zhctpmt.yyangpt.cn` | 部署完成后输出的公开访问入口 |

## 依赖

流水线运行环境需要有：

- `ssh`
- `rsync`

如果云效基础镜像没有 `rsync`，先在流水线中安装，或更换带 `rsync` 的执行环境。
