# 云服务器与域名相关密钥运维文档

更新时间：2026-06-11 13:22（本机现场检查）

> 安全原则：本文只记录密钥/证书/配置**存放位置、变量名、权限和检查命令**，不记录任何密钥值、token、私钥正文、证书私钥内容。需要查看值时只在对应机器上本地查看，禁止复制到聊天、README、Git、共享文档或长期记忆。

## 1. 总览

| 项 | 当前值 / 入口 |
| --- | --- |
| 云服务器 SSH alias | `wwyl-cloud` |
| 云服务器公网 IP | `175.27.229.243` |
| SSH 用户 | `ubuntu` |
| 公网域名 | `wwyl.yipeng.online` |
| 默认公网 HTTPS | `https://wwyl.yipeng.online/` |
| 本机 SSH 配置 | `/Users/bot1/.ssh/config` |
| 本机云服务器 SSH 私钥 | `/Users/bot1/.ssh/id_ed25519_wwyl_cloud`，权限 `600` |
| 云端 Hermes home | `/home/ubuntu/.hermes` |
| 云端公共中转服务 | `/opt/studio-cloud-bridge/current`，PM2 进程名 `studio-cloud-bridge` |
| 云端 Nginx 站点配置 | `/etc/nginx/sites-available/wwyl.yipeng.online-ssl` |

快速连接：

```bash
ssh wwyl-cloud
# 等价底层配置：ubuntu@175.27.229.243 + /Users/bot1/.ssh/id_ed25519_wwyl_cloud
```

## 2. 本机密钥与配置位置（bot1）

### 2.1 SSH

| 文件 | 用途 | 权限 |
| --- | --- | --- |
| `/Users/bot1/.ssh/config` | SSH alias 和 IdentityFile 配置 | `600` |
| `/Users/bot1/.ssh/id_ed25519_wwyl_cloud` | 连接云服务器 `wwyl-cloud` 的私钥 | `600` |
| `/Users/bot1/.ssh/id_ed25519_wwyl_cloud.pub` | 对应公钥 | `644` |
| `/Users/bot1/.ssh/known_hosts` | SSH 主机指纹 | `600` |

当前 `~/.ssh/config` 中云服务器段：

```sshconfig
Host wwyl-cloud 175.27.229.243 wwyl.yipeng.online
  HostName 175.27.229.243
  User ubuntu
  IdentityFile /Users/bot1/.ssh/id_ed25519_wwyl_cloud
```

其他本机 SSH key：

- `/Users/bot1/.ssh/id_ed25519_gitee_bot1`：Gitee 访问。
- `/Users/bot1/.ssh/id_ed25519_gitea_lumi_soul`：NAS Gitea SSH，`192.168.1.4:2222`。
- `/Users/bot1/.ssh/id_ed25519_bot2`、`id_ed25519_qianliyun_mbpro`、`id_ed25519_win_19216818`：内网机器访问。

### 2.2 Hermes / Feishu / Git / NAS / 云端 URL 配置

| 文件 | 说明 | 权限 |
| --- | --- | --- |
| `/Users/bot1/.hermes/.env` | bot1 Hermes 全局环境变量 | `600` |
| `/Users/bot1/.hermes/profiles/it/.env` | 当前 IT profile 环境变量 | `600` |
| `/Users/bot1/.hermes/profiles/it/secrets/tencent-cloud-cos.env` | 本机保存的腾讯云 COS 专用凭证与 bucket 配置 | `600` |

本机全局 `.env` 里与云/域名/发布相关的变量名包括：

```text
CLOUD_PUBLIC_BASE_URL
CLOUD_SSH_ALIAS
CLOUD_SSH_HOST
CLOUD_SSH_USER
DETAIL_PAGE_API_BASE_URL
DETAIL_PAGE_PUBLIC_BASE_URL
DETAIL_PAGE_REMOTE_ROOT
AGENT_MEDIA_BASE_URL
AGENT_MEDIA_PUBLIC_ROOT
GITEA_API_URL
GITEA_BASE_URL
GITEA_TOKEN
GITEA_USERNAME
GITEE_ACCESS_TOKEN
GITEE_TOKEN
GIT_HOST_DEFAULT
GIT_HTTP_URL_PREFIX
GIT_REMOTE_DEFAULT
GIT_REPO_OWNER
GIT_SSH_URL_PREFIX
```

本机 COS secrets 文件变量名：

```text
TENCENT_APPID
TENCENT_SECRET_ID
TENCENT_SECRET_KEY
COS_BUCKET
COS_REGION
COS_ALLOW_PREFIXES
COS_TEST_PREFIX
```

注意：云服务器 SSH 私钥不是腾讯云 CAM/API 密钥。COS 调用必须使用 `TENCENT_SECRET_ID` / `TENCENT_SECRET_KEY` 这类腾讯云凭证。

## 3. 云服务器上的密钥与配置位置

以下为云服务器 `wwyl-cloud` 上现场检查到的位置。

### 3.1 云端 SSH

| 文件 | 用途 | 权限 |
| --- | --- | --- |
| `/home/ubuntu/.ssh/authorized_keys` | 允许登录云服务器的公钥列表 | `600` |
| `/home/ubuntu/.ssh/config` | 云端 SSH alias 配置 | `600` |
| `/home/ubuntu/.ssh/id_ed25519_gitee_agent_registry` | 云端访问 agent skill registry/Gitee 用私钥 | `600` |
| `/home/ubuntu/.ssh/id_ed25519_gitee_agent_registry.pub` | 对应公钥 | `644` |
| `/home/ubuntu/.ssh/known_hosts` | 云端 SSH 主机指纹 | `664` |

### 3.2 studio-cloud-bridge / COS

| 项 | 路径 / 名称 |
| --- | --- |
| 服务目录 | `/opt/studio-cloud-bridge/current` |
| 环境变量文件 | `/opt/studio-cloud-bridge/current/.env`，权限 `600` |
| PM2 进程名 | `studio-cloud-bridge` |
| 本地端口 | `127.0.0.1:8788` |
| 公网路径 | `https://wwyl.yipeng.online/studio-cloud-bridge/` |
| 健康检查 | `https://wwyl.yipeng.online/studio-cloud-bridge/healthz` |

`.env` 里变量名：

```text
SERVICE_NAME
NODE_ENV
PORT
PUBLIC_BASE_URL
CORS_ORIGINS
API_TOKEN
TENCENT_APPID
TENCENT_SECRET_ID
TENCENT_SECRET_KEY
COS_BUCKET
COS_REGION
COS_ALLOW_PREFIXES
COS_TEST_PREFIX
```

用途：统一放置腾讯云 COS 凭证和受保护的服务端 token，业务系统通过 bridge 调用 COS，不把腾讯云密钥分散到多个业务服务。

### 3.3 微信 JSSDK 签名服务

| 项 | 路径 / 名称 |
| --- | --- |
| systemd 服务 | `wechat-jssdk.service` |
| 环境变量文件 | `/etc/wechat-jssdk.env`，权限 `600` |
| 缓存文件 | `/var/lib/wechat-jssdk/cache.json` |
| 本地端口 | `127.0.0.1:8777` |
| 公网健康检查 | `https://wwyl.yipeng.online/wechat-jssdk/healthz` |
| 公网签名接口 | `https://wwyl.yipeng.online/wechat-jssdk/signature?url=<encoded-url>` |
| 测试页 | `https://wwyl.yipeng.online/wechat-share-test/` |

`/etc/wechat-jssdk.env` 变量名：

```text
WECHAT_APP_ID
WECHAT_APP_SECRET
WECHAT_JSSDK_CACHE
WECHAT_JSSDK_HOST
WECHAT_JSSDK_PORT
```

### 3.4 Hermes / 微信机器人 profile

| 文件 | 说明 | 权限 |
| --- | --- | --- |
| `/home/ubuntu/.hermes/.env` | 云端 Hermes 全局环境变量 | `600` |
| `/home/ubuntu/.hermes/profiles/inspirationqian/.env` | 钱丽云微信 profile | `600` |
| `/home/ubuntu/.hermes/profiles/inspirationa/.env` | 苏薇微信 profile | `600` |
| `/home/ubuntu/.hermes/profiles/inspirationb/.env` | 木雨微信 profile | `600` |

常见变量名包括：

```text
FEISHU_APP_ID / FEISHU_APP_SECRET
WEIXIN_ACCOUNT_ID / WEIXIN_TOKEN / WEIXIN_BASE_URL / WEIXIN_CDN_BASE_URL
OPENAI_API_KEY
MINIMAX_API_KEY / MINIMAX_CN_API_KEY
MXAI_MCP_API_KEY
RUNNINGHUB_API_KEY
SHARED_KNOWLEDGE_EMBEDDING_API_KEY
SHARED_KNOWLEDGE_ROOT / SHARED_KNOWLEDGE_RAG_DB
AGENT_SKILL_REGISTRY_DIR / AGENT_SKILL_REGISTRY_URL / AGENT_SKILL_NAMES
```

## 4. 域名、证书和 Nginx

| 文件 | 用途 | 权限 |
| --- | --- | --- |
| `/etc/nginx/ssl/wwyl.yipeng.online/fullchain.pem` | 域名证书链 | `644` |
| `/etc/nginx/ssl/wwyl.yipeng.online/privkey.key` | 域名证书私钥，严禁打印/复制 | `600` |
| `/etc/nginx/sites-available/wwyl.yipeng.online-ssl` | HTTPS 站点配置 | `644` |
| `/etc/nginx/sites-available/ecommerce-pricing` | 旧/兼容站点配置 | `664` |

当前域名需要保留的主要路径：

```text
/
/agent-media/
/detail-page-api/
/detail-pages/
/studio-cloud-bridge/
/wechat-jssdk/
/wechat-share-test/
/open-webui/   # 如启用本地 WebUI 反向 SSH tunnel 时使用
```

修改 Nginx 后必须先检查再重载：

```bash
ssh wwyl-cloud
sudo nginx -t
sudo systemctl reload nginx
```

## 5. 当前服务状态（2026-06-11 现场检查）

```text
nginx: active
wechat-jssdk.service: active
hermes-gateway.service: active
hermes-gateway-inspirationqian.service: active
hermes-gateway-inspirationa.service: active
hermes-gateway-inspirationb.service: active
PM2 studio-cloud-bridge: online
https://wwyl.yipeng.online/: 200
https://wwyl.yipeng.online/studio-cloud-bridge/healthz: 200
https://wwyl.yipeng.online/wechat-jssdk/healthz: 200
```

## 6. 常用只读检查命令

### 6.1 本机检查 SSH 和 env 文件存在性

```bash
stat -f '%N mode=%Lp size=%z' \
  /Users/bot1/.ssh/config \
  /Users/bot1/.ssh/id_ed25519_wwyl_cloud \
  /Users/bot1/.hermes/.env \
  /Users/bot1/.hermes/profiles/it/.env \
  /Users/bot1/.hermes/profiles/it/secrets/tencent-cloud-cos.env
```

只看变量名，不打印值：

```bash
python3 - <<'PY'
from pathlib import Path
import re
for p in [
    Path('/Users/bot1/.hermes/.env'),
    Path('/Users/bot1/.hermes/profiles/it/.env'),
    Path('/Users/bot1/.hermes/profiles/it/secrets/tencent-cloud-cos.env'),
]:
    print('\n' + str(p))
    names=[]
    for line in p.read_text(errors='replace').splitlines():
        s=line.strip()
        if not s or s.startswith('#') or '=' not in s:
            continue
        k=s.split('=',1)[0].replace('export ','').strip()
        if re.match(r'^[A-Za-z_][A-Za-z0-9_]*$', k):
            names.append(k)
    print('\n'.join(sorted(set(names))))
PY
```

### 6.2 云端服务健康检查

```bash
ssh wwyl-cloud '
set +e
for s in nginx wechat-jssdk.service hermes-gateway.service hermes-gateway-inspirationqian.service hermes-gateway-inspirationa.service hermes-gateway-inspirationb.service; do
  printf "%s=" "$s"; systemctl is-active "$s" 2>/dev/null
done
pm2 status studio-cloud-bridge --no-color
curl -sS -o /dev/null -w "root_https=%{http_code}\n" https://wwyl.yipeng.online/ --max-time 8
curl -sS -o /dev/null -w "studio_bridge=%{http_code}\n" https://wwyl.yipeng.online/studio-cloud-bridge/healthz --max-time 8
curl -sS -o /dev/null -w "wechat_jssdk=%{http_code}\n" https://wwyl.yipeng.online/wechat-jssdk/healthz --max-time 8
'
```

### 6.3 云端密钥位置存在性检查

```bash
ssh wwyl-cloud '
for f in \
  /opt/studio-cloud-bridge/current/.env \
  /etc/wechat-jssdk.env \
  /home/ubuntu/.hermes/.env \
  /home/ubuntu/.hermes/profiles/inspirationqian/.env \
  /home/ubuntu/.hermes/profiles/inspirationa/.env \
  /home/ubuntu/.hermes/profiles/inspirationb/.env \
  /etc/nginx/ssl/wwyl.yipeng.online/fullchain.pem \
  /etc/nginx/ssl/wwyl.yipeng.online/privkey.key; do
    if [ -e "$f" ]; then sudo stat -c "%n mode=%a size=%s" "$f"; else echo "$f missing"; fi
done
'
```

## 7. 常用变更命令和风险边界

### 7.1 Nginx / 证书

- 改证书或站点配置前先备份目标文件。
- `privkey.key` 只能在云端保存，权限保持 `600`。
- 改完必须执行：

```bash
sudo nginx -t
sudo systemctl reload nginx
curl -I https://wwyl.yipeng.online/
```

### 7.2 studio-cloud-bridge / COS

- 改 `/opt/studio-cloud-bridge/current/.env` 后：

```bash
pm2 restart studio-cloud-bridge --update-env
pm2 save
curl https://wwyl.yipeng.online/studio-cloud-bridge/healthz
```

- 真实 COS 写入/删除烟测属于有副作用操作，必须先确认 bucket、region、prefix 和是否允许写删。

### 7.3 WeChat JSSDK

- 改 `/etc/wechat-jssdk.env` 或服务代码后：

```bash
sudo systemctl restart wechat-jssdk.service
curl https://wwyl.yipeng.online/wechat-jssdk/healthz
journalctl -u wechat-jssdk.service -n 80 --no-pager
```

查看日志时要脱敏：不要输出 `secret=`、`access_token`、`jsapi_ticket`。

### 7.4 Hermes / 微信网关

- 不要无差别重启所有 profile。
- 只重启受影响服务，例如：

```bash
sudo systemctl restart hermes-gateway-inspirationqian.service
```

- 变更 profile `.env` 后，通常需要重启对应 gateway 才会生效。

## 8. 密钥安全和轮换规则

1. 私钥、token、`.env`、`privkey.key` 不进 Git、不进 README、不进聊天、不进长期记忆。
2. 权限建议：私钥和 `.env` 一律 `600`；脚本按需 `700`；证书链可 `644`。
3. 发现密钥疑似泄漏：立即停止使用、在对应平台轮换、更新云端/本机 `.env`、重启受影响服务，再做健康检查。
4. 不把 SSH key 与云厂商 API key 混用：
   - SSH key：登录服务器或 Git。
   - 腾讯云 CAM key：调用 COS 等 API。
   - 微信 AppSecret：JSSDK/公众号接口。
5. 对外文档只记录路径和变量名，不记录值。

## 9. 交接摘要

新人只需要记住：

- 登录云服务器：`ssh wwyl-cloud`。
- 云服务器 SSH 私钥在本机：`/Users/bot1/.ssh/id_ed25519_wwyl_cloud`。
- 本机腾讯 COS 凭证：`/Users/bot1/.hermes/profiles/it/secrets/tencent-cloud-cos.env`。
- 云端 COS/bridge 凭证：`/opt/studio-cloud-bridge/current/.env`。
- 云端微信 JSSDK 凭证：`/etc/wechat-jssdk.env`。
- 云端 Hermes/微信机器人凭证：`/home/ubuntu/.hermes/.env` 和 `/home/ubuntu/.hermes/profiles/*/.env`。
- 域名证书私钥：`/etc/nginx/ssl/wwyl.yipeng.online/privkey.key`。
- 改 Nginx 先 `sudo nginx -t`，改 PM2 服务后查 `pm2 status`，改 systemd 服务后查 `systemctl is-active`。
