Update nexus: fix conflicts and sync local changes
This commit is contained in:
@@ -1,255 +1,255 @@
|
||||
---
|
||||
title: MEMORY.md - 长期记忆
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# MEMORY.md - 长期记忆
|
||||
|
||||
---
|
||||
|
||||
## 👤 用户信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 姓名 | 比利 (Wei Shen) |
|
||||
| 称呼 | 比利哥 |
|
||||
| 语言 | 中文对话 |
|
||||
| 时区 | Asia/Shanghai (GMT+8) |
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 部署架构
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 星曜位置 | Mac Mini M4 |
|
||||
| 同伴位置 | Ubuntu服务器 (同一局域网) |
|
||||
| 部署类型 | OpenClaw分布式架构 |
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 服务器资产
|
||||
|
||||
### Agent 工作目录 (2026-03-29)
|
||||
| Agent | 服务器 | 工作目录 |
|
||||
|-------|--------|---------|
|
||||
| 星曜 | Mac Mini | `/Users/weishen/.openclaw/workspace-agent-xingyao` |
|
||||
| 星辉 | Mac Mini | `/Users/weishen/.openclaw/workspace-agent-xinghui` |
|
||||
| 星匠 | Mac Mini | `/Users/weishen/.openclaw/workspace-agent-xingjiang` |
|
||||
| 星枢 | Mac Mini | `/Users/weishen/.openclaw/workspace` |
|
||||
| 风驰 | Ubuntu1 | `/home/shenwei/.openclaw/workspace-agent-fengchi` |
|
||||
| 云瀚 | Ubuntu2 | `/home/shenwei/.openclaw/workspace-agent-yunhan` |
|
||||
| 云策 | Ubuntu2 | `/home/shenwei/.openclaw/workspace-agent-yunce` |
|
||||
|
||||
### 服务器列表
|
||||
|
||||
| 服务器 | 内网IP | 外网域名 | FRP SSH端口 | Caddy反向代理 |
|
||||
|--------|--------|----------|-------------|---------------|
|
||||
| Mac Mini | 192.168.3.189 | macmini.ishenwei.online | 60026 | - |
|
||||
| Ubuntu1 | 192.168.3.47 | ubuntu1.ishenwei.online | 60022 | - |
|
||||
| Ubuntu2 | 192.168.3.45 | ubuntu2.ishenwei.online | 60024 | - |
|
||||
| NAS | 192.168.3.17 | nas.ishenwei.online | 60023 | - |
|
||||
| VPS1 | 192.227.222.142 | vps.ishenwei.online | 未配置 | ✅ |
|
||||
| VPS2 | 104.194.92.188 | kiwi.ishenwei.online | 未配置 | - |
|
||||
|
||||
### 域名 -> 服务映射
|
||||
|
||||
| 域名 | 服务 | 服务器 |
|
||||
|------|------|--------|
|
||||
| n8n.ishenwei.online | n8n | macmini |
|
||||
| vaultwarden.ishenwei.online | vaultwarden | macmini |
|
||||
| it-tools.ishenwei.online | it-tools | macmini |
|
||||
| drawio.ishenwei.online | drawio | macmini |
|
||||
| grafana.ishenwei.online | grafana | ubuntu1 |
|
||||
| superset.ishenwei.online | superset | ubuntu1 |
|
||||
| tk.ishenwei.online | tiktok_pm | ubuntu1 |
|
||||
| transmission.ishenwei.online | transmission | ubuntu1 |
|
||||
| dashboard.ishenwei.online | homarr | ubuntu1 |
|
||||
| tk-dev.ishenwei.online | tiktok_pm (dev) | ubuntu2 |
|
||||
| nas.ishenwei.online | DSM | NAS |
|
||||
| navidrome.ishenwei.online | navidrome | NAS |
|
||||
| gitea.ishenwei.online | Gitea (Docker) | NAS |
|
||||
| jellyfin.ishenwei.online | jellyfin | NAS |
|
||||
| zipline.ishenwei.online | zipline | NAS |
|
||||
|
||||
### VPS1 详情
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| IP | 192.227.222.142 |
|
||||
| FRP端口 | 7000 |
|
||||
| FRP管理面板 | 127.0.0.1:7400 (admin/admin) |
|
||||
| Caddy配置 | /etc/caddy/Caddyfile |
|
||||
| 代理域名 | *.ishenwei.online |
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker 管理
|
||||
|
||||
### 配置文件
|
||||
- **应用列表**: `~/.openclaw/workspace/managed-systems/docker-management/docker-apps.yaml`
|
||||
|
||||
### 服务器 Docker 路径
|
||||
|
||||
| 服务器 | Docker根目录 |
|
||||
|--------|--------------|
|
||||
| macmini | `/Users/weishen/docker/` |
|
||||
| ubuntu1 | `/home/shenwei/Docker/` (大写D) |
|
||||
| ubuntu2 | `/home/shenwei/docker/` (小写d) |
|
||||
| NAS | `/volume1/docker/` |
|
||||
|
||||
### Docker 命令路径
|
||||
|
||||
| 服务器 | 命令方式 |
|
||||
|--------|----------|
|
||||
| macmini | 星曜运行在本地,直接执行 `source ~/.zshrc && docker <command>`,无需 SSH |
|
||||
| ubuntu1 | 直接 `docker` |
|
||||
| ubuntu2 | 直接 `docker` |
|
||||
| NAS | SSH 登录交互式 shell 才能运行 docker 命令,非交互式 SSH 会因权限/PATH 问题失败 |
|
||||
|
||||
### 管理流程
|
||||
1. 从 `docker-apps.yaml` 查找应用目录
|
||||
2. SSH到对应服务器: `ssh <服务器名>`
|
||||
3. 进入目录执行: `docker compose up -d` / `docker compose down` / `docker compose restart`
|
||||
|
||||
> ⚠️ **注意**: 所有服务器已配置无密码直接运行 Docker 命令
|
||||
|
||||
---
|
||||
|
||||
## 🌐 FRP & 科学上网
|
||||
|
||||
### FRP 配置位置
|
||||
|
||||
| 服务器 | FRP目录 |
|
||||
|--------|---------|
|
||||
| macmini | `/opt/frp/frp_0.65.0_darwin_arm64` |
|
||||
| ubuntu1 | `/opt/frp/frp_0.65.0_linux_amd64` |
|
||||
| ubuntu2 | `/opt/frp/frp_0.65.0_linux_amd64` |
|
||||
|
||||
- 配置文件: `frpc.toml`
|
||||
|
||||
### 科学上网代理端口
|
||||
|
||||
| 服务器 | 代理地址 | 状态 |
|
||||
|--------|----------|------|
|
||||
| macmini | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu1 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu2 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| NAS | socks5://127.0.0.1:20170 | ❌ 仅本机监听 |
|
||||
|
||||
### curl 检测命令
|
||||
|
||||
```bash
|
||||
# 国内直连
|
||||
curl -s -o /dev/null -w "%{http_code}" https://www.baidu.com
|
||||
|
||||
# 国外直连
|
||||
curl -s -o /dev/null -w "%{http_code}" https://www.google.com
|
||||
|
||||
# 通过代理访问
|
||||
curl -s -o /dev/null -w "%{http_code}" -x socks5://127.0.0.1:10808 https://www.google.com
|
||||
```
|
||||
|
||||
> ⚠️ **NAS 特殊说明**: V2RayA 默认监听 127.0.0.1,不支持外部访问
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ OpenClaw 管理
|
||||
|
||||
### 技能安装目录 ⭐ 重要 (2026-03-24)
|
||||
- **正确路径**: `~/.openclaw/skills/` = `/Users/weishen/.openclaw/skills`
|
||||
- **作用**: 所有agent共享
|
||||
- **注意**: 不要安装到 `~/.openclaw/workspace/skills/`
|
||||
- **安装命令**: `clawhub install <skill-name> --dir /Users/weishen/.openclaw/skills`
|
||||
|
||||
### task-summary 技能
|
||||
- **用途**: 记录任务总结
|
||||
- **安装位置**: `~/.openclaw/skills/task-summary`
|
||||
|
||||
### Ubuntu 安装 (重要)
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
npm install -g openclaw clawhub
|
||||
|
||||
# PATH 配置
|
||||
export PATH=$HOME/.npm-global/bin:$PATH
|
||||
echo 'export PATH=$HOME/.npm-global/bin:$PATH' >> ~/.bashrc
|
||||
```
|
||||
|
||||
### Gateway 管理
|
||||
|
||||
```bash
|
||||
# 启动/停止/重启
|
||||
systemctl --user start openclaw-gateway
|
||||
systemctl --user stop openclaw-gateway
|
||||
systemctl --user restart openclaw-gateway
|
||||
|
||||
# 开机自启
|
||||
systemctl --user enable openclaw-gateway
|
||||
```
|
||||
|
||||
### 常用命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|------|------|
|
||||
| `openclaw --version` | 查看版本 |
|
||||
| `openclaw status` | 查看状态 |
|
||||
| `openclaw agents list` | 列出所有 agent |
|
||||
| `openclaw agents add <name>` | 创建新 agent |
|
||||
|
||||
### 重要原则
|
||||
1. **不要用 root 运行**
|
||||
2. **统一使用普通用户** (shenwei)
|
||||
3. **通过 systemctl 管理 Gateway**
|
||||
|
||||
---
|
||||
|
||||
## 📚 知识库与笔记
|
||||
|
||||
### Obsidian 笔记目录 (2026-03-23) ⭐
|
||||
- **路径**: `/Users/weishen/Workspace/nexus`
|
||||
- **说明**: 比利哥的 Obsidian 笔记根目录
|
||||
- **备注**: 以后"obsidian笔记目录"即指此目录
|
||||
|
||||
### Git 仓库配置 (2026-03-25) ⭐
|
||||
- **remote.origin.url**: `ssh://git@192.168.3.17:2222/ishenwei/nexus.git`
|
||||
- **SSH 认证**: 已配置,无需输入用户名密码
|
||||
- **操作**: 可直接 `git add` → `git commit` → `git push`
|
||||
|
||||
### 知识库目录
|
||||
- **路径**: `/Users/weishen/Workspace/nexus/openclaw/knowledgebase`
|
||||
- **说明**: 比利哥的知识库
|
||||
|
||||
### 星曜个人笔记目录
|
||||
- **路径**: `/Users/weishen/Workspace/nexus/openclaw/xingyao`
|
||||
- **用途**: 星曜专用工作笔记
|
||||
|
||||
---
|
||||
|
||||
## 🔄 同步规则 ⭐ 重要
|
||||
|
||||
- **MEMORY.md 同步**: 每次更新 workspace 里的 MEMORY.md 后,必须同步复制到笔记目录
|
||||
- **笔记目录**: `/Users/weishen/Workspace/nexus/openclaw/xingyao/MEMORY.md`
|
||||
|
||||
---
|
||||
|
||||
## 🧠 记忆习惯 ⭐ 每天必做
|
||||
|
||||
1. **每天第一次对话时**: 自动创建当天的记忆文件 `memory/YYYY-MM-DD.md`
|
||||
2. **记录内容**: 对话中的重要操作、决策、用户要求等
|
||||
3. **用户要求**: 当用户说"请记住xxxx"时必须记录到记忆文件
|
||||
4. **永久记住**: 这个设定是每天必须执行的 routine
|
||||
|
||||
---
|
||||
|
||||
## 🔐 安全策略
|
||||
|
||||
- **管理方式**: 所有服务器通过SSH统一管理
|
||||
- **权限原则**: 不存储sudo密码,所有操作通过SSH完成
|
||||
- **安全级别**: 遵循最小权限原则
|
||||
---
|
||||
title: MEMORY.md - 长期记忆
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# MEMORY.md - 长期记忆
|
||||
|
||||
---
|
||||
|
||||
## 👤 用户信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 姓名 | 比利 (Wei Shen) |
|
||||
| 称呼 | 比利哥 |
|
||||
| 语言 | 中文对话 |
|
||||
| 时区 | Asia/Shanghai (GMT+8) |
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 部署架构
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 星曜位置 | Mac Mini M4 |
|
||||
| 同伴位置 | Ubuntu服务器 (同一局域网) |
|
||||
| 部署类型 | OpenClaw分布式架构 |
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 服务器资产
|
||||
|
||||
### Agent 工作目录 (2026-03-29)
|
||||
| Agent | 服务器 | 工作目录 |
|
||||
|-------|--------|---------|
|
||||
| 星曜 | Mac Mini | `/Users/weishen/.openclaw/workspace-agent-xingyao` |
|
||||
| 星辉 | Mac Mini | `/Users/weishen/.openclaw/workspace-agent-xinghui` |
|
||||
| 星匠 | Mac Mini | `/Users/weishen/.openclaw/workspace-agent-xingjiang` |
|
||||
| 星枢 | Mac Mini | `/Users/weishen/.openclaw/workspace` |
|
||||
| 风驰 | Ubuntu1 | `/home/shenwei/.openclaw/workspace-agent-fengchi` |
|
||||
| 云瀚 | Ubuntu2 | `/home/shenwei/.openclaw/workspace-agent-yunhan` |
|
||||
| 云策 | Ubuntu2 | `/home/shenwei/.openclaw/workspace-agent-yunce` |
|
||||
|
||||
### 服务器列表
|
||||
|
||||
| 服务器 | 内网IP | 外网域名 | FRP SSH端口 | Caddy反向代理 |
|
||||
|--------|--------|----------|-------------|---------------|
|
||||
| Mac Mini | 192.168.3.189 | macmini.ishenwei.online | 60026 | - |
|
||||
| Ubuntu1 | 192.168.3.47 | ubuntu1.ishenwei.online | 60022 | - |
|
||||
| Ubuntu2 | 192.168.3.45 | ubuntu2.ishenwei.online | 60024 | - |
|
||||
| NAS | 192.168.3.17 | nas.ishenwei.online | 60023 | - |
|
||||
| VPS1 | 192.227.222.142 | vps.ishenwei.online | 未配置 | ✅ |
|
||||
| VPS2 | 104.194.92.188 | kiwi.ishenwei.online | 未配置 | - |
|
||||
|
||||
### 域名 -> 服务映射
|
||||
|
||||
| 域名 | 服务 | 服务器 |
|
||||
|------|------|--------|
|
||||
| n8n.ishenwei.online | n8n | macmini |
|
||||
| vaultwarden.ishenwei.online | vaultwarden | macmini |
|
||||
| it-tools.ishenwei.online | it-tools | macmini |
|
||||
| drawio.ishenwei.online | drawio | macmini |
|
||||
| grafana.ishenwei.online | grafana | ubuntu1 |
|
||||
| superset.ishenwei.online | superset | ubuntu1 |
|
||||
| tk.ishenwei.online | tiktok_pm | ubuntu1 |
|
||||
| transmission.ishenwei.online | transmission | ubuntu1 |
|
||||
| dashboard.ishenwei.online | homarr | ubuntu1 |
|
||||
| tk-dev.ishenwei.online | tiktok_pm (dev) | ubuntu2 |
|
||||
| nas.ishenwei.online | DSM | NAS |
|
||||
| navidrome.ishenwei.online | navidrome | NAS |
|
||||
| gitea.ishenwei.online | Gitea (Docker) | NAS |
|
||||
| jellyfin.ishenwei.online | jellyfin | NAS |
|
||||
| zipline.ishenwei.online | zipline | NAS |
|
||||
|
||||
### VPS1 详情
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| IP | 192.227.222.142 |
|
||||
| FRP端口 | 7000 |
|
||||
| FRP管理面板 | 127.0.0.1:7400 (admin/admin) |
|
||||
| Caddy配置 | /etc/caddy/Caddyfile |
|
||||
| 代理域名 | *.ishenwei.online |
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker 管理
|
||||
|
||||
### 配置文件
|
||||
- **应用列表**: `~/.openclaw/workspace/managed-systems/docker-management/docker-apps.yaml`
|
||||
|
||||
### 服务器 Docker 路径
|
||||
|
||||
| 服务器 | Docker根目录 |
|
||||
|--------|--------------|
|
||||
| macmini | `/Users/weishen/docker/` |
|
||||
| ubuntu1 | `/home/shenwei/Docker/` (大写D) |
|
||||
| ubuntu2 | `/home/shenwei/docker/` (小写d) |
|
||||
| NAS | `/volume1/docker/` |
|
||||
|
||||
### Docker 命令路径
|
||||
|
||||
| 服务器 | 命令方式 |
|
||||
|--------|----------|
|
||||
| macmini | 星曜运行在本地,直接执行 `source ~/.zshrc && docker <command>`,无需 SSH |
|
||||
| ubuntu1 | 直接 `docker` |
|
||||
| ubuntu2 | 直接 `docker` |
|
||||
| NAS | SSH 登录交互式 shell 才能运行 docker 命令,非交互式 SSH 会因权限/PATH 问题失败 |
|
||||
|
||||
### 管理流程
|
||||
1. 从 `docker-apps.yaml` 查找应用目录
|
||||
2. SSH到对应服务器: `ssh <服务器名>`
|
||||
3. 进入目录执行: `docker compose up -d` / `docker compose down` / `docker compose restart`
|
||||
|
||||
> ⚠️ **注意**: 所有服务器已配置无密码直接运行 Docker 命令
|
||||
|
||||
---
|
||||
|
||||
## 🌐 FRP & 科学上网
|
||||
|
||||
### FRP 配置位置
|
||||
|
||||
| 服务器 | FRP目录 |
|
||||
|--------|---------|
|
||||
| macmini | `/opt/frp/frp_0.65.0_darwin_arm64` |
|
||||
| ubuntu1 | `/opt/frp/frp_0.65.0_linux_amd64` |
|
||||
| ubuntu2 | `/opt/frp/frp_0.65.0_linux_amd64` |
|
||||
|
||||
- 配置文件: `frpc.toml`
|
||||
|
||||
### 科学上网代理端口
|
||||
|
||||
| 服务器 | 代理地址 | 状态 |
|
||||
|--------|----------|------|
|
||||
| macmini | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu1 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| ubuntu2 | socks5://127.0.0.1:10808 | ✅ 正常 |
|
||||
| NAS | socks5://127.0.0.1:20170 | ❌ 仅本机监听 |
|
||||
|
||||
### curl 检测命令
|
||||
|
||||
```bash
|
||||
# 国内直连
|
||||
curl -s -o /dev/null -w "%{http_code}" https://www.baidu.com
|
||||
|
||||
# 国外直连
|
||||
curl -s -o /dev/null -w "%{http_code}" https://www.google.com
|
||||
|
||||
# 通过代理访问
|
||||
curl -s -o /dev/null -w "%{http_code}" -x socks5://127.0.0.1:10808 https://www.google.com
|
||||
```
|
||||
|
||||
> ⚠️ **NAS 特殊说明**: V2RayA 默认监听 127.0.0.1,不支持外部访问
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ OpenClaw 管理
|
||||
|
||||
### 技能安装目录 ⭐ 重要 (2026-03-24)
|
||||
- **正确路径**: `~/.openclaw/skills/` = `/Users/weishen/.openclaw/skills`
|
||||
- **作用**: 所有agent共享
|
||||
- **注意**: 不要安装到 `~/.openclaw/workspace/skills/`
|
||||
- **安装命令**: `clawhub install <skill-name> --dir /Users/weishen/.openclaw/skills`
|
||||
|
||||
### task-summary 技能
|
||||
- **用途**: 记录任务总结
|
||||
- **安装位置**: `~/.openclaw/skills/task-summary`
|
||||
|
||||
### Ubuntu 安装 (重要)
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
npm install -g openclaw clawhub
|
||||
|
||||
# PATH 配置
|
||||
export PATH=$HOME/.npm-global/bin:$PATH
|
||||
echo 'export PATH=$HOME/.npm-global/bin:$PATH' >> ~/.bashrc
|
||||
```
|
||||
|
||||
### Gateway 管理
|
||||
|
||||
```bash
|
||||
# 启动/停止/重启
|
||||
systemctl --user start openclaw-gateway
|
||||
systemctl --user stop openclaw-gateway
|
||||
systemctl --user restart openclaw-gateway
|
||||
|
||||
# 开机自启
|
||||
systemctl --user enable openclaw-gateway
|
||||
```
|
||||
|
||||
### 常用命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|------|------|
|
||||
| `openclaw --version` | 查看版本 |
|
||||
| `openclaw status` | 查看状态 |
|
||||
| `openclaw agents list` | 列出所有 agent |
|
||||
| `openclaw agents add <name>` | 创建新 agent |
|
||||
|
||||
### 重要原则
|
||||
1. **不要用 root 运行**
|
||||
2. **统一使用普通用户** (shenwei)
|
||||
3. **通过 systemctl 管理 Gateway**
|
||||
|
||||
---
|
||||
|
||||
## 📚 知识库与笔记
|
||||
|
||||
### Obsidian 笔记目录 (2026-03-23) ⭐
|
||||
- **路径**: `/Users/weishen/Workspace/nexus`
|
||||
- **说明**: 比利哥的 Obsidian 笔记根目录
|
||||
- **备注**: 以后"obsidian笔记目录"即指此目录
|
||||
|
||||
### Git 仓库配置 (2026-03-25) ⭐
|
||||
- **remote.origin.url**: `ssh://git@192.168.3.17:2222/ishenwei/nexus.git`
|
||||
- **SSH 认证**: 已配置,无需输入用户名密码
|
||||
- **操作**: 可直接 `git add` → `git commit` → `git push`
|
||||
|
||||
### 知识库目录
|
||||
- **路径**: `/Users/weishen/Workspace/nexus/openclaw/knowledgebase`
|
||||
- **说明**: 比利哥的知识库
|
||||
|
||||
### 星曜个人笔记目录
|
||||
- **路径**: `/Users/weishen/Workspace/nexus/openclaw/xingyao`
|
||||
- **用途**: 星曜专用工作笔记
|
||||
|
||||
---
|
||||
|
||||
## 🔄 同步规则 ⭐ 重要
|
||||
|
||||
- **MEMORY.md 同步**: 每次更新 workspace 里的 MEMORY.md 后,必须同步复制到笔记目录
|
||||
- **笔记目录**: `/Users/weishen/Workspace/nexus/openclaw/xingyao/MEMORY.md`
|
||||
|
||||
---
|
||||
|
||||
## 🧠 记忆习惯 ⭐ 每天必做
|
||||
|
||||
1. **每天第一次对话时**: 自动创建当天的记忆文件 `memory/YYYY-MM-DD.md`
|
||||
2. **记录内容**: 对话中的重要操作、决策、用户要求等
|
||||
3. **用户要求**: 当用户说"请记住xxxx"时必须记录到记忆文件
|
||||
4. **永久记住**: 这个设定是每天必须执行的 routine
|
||||
|
||||
---
|
||||
|
||||
## 🔐 安全策略
|
||||
|
||||
- **管理方式**: 所有服务器通过SSH统一管理
|
||||
- **权限原则**: 不存储sudo密码,所有操作通过SSH完成
|
||||
- **安全级别**: 遵循最小权限原则
|
||||
|
||||
@@ -1,97 +1,97 @@
|
||||
---
|
||||
title: OpenClaw 备份脚本使用指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [recycle]
|
||||
---
|
||||
|
||||
# OpenClaw 备份脚本使用指南
|
||||
|
||||
## 概述
|
||||
|
||||
OpenClaw 备份脚本用于自动备份 OpenClaw 配置到 NAS 存储。
|
||||
|
||||
## 脚本位置
|
||||
|
||||
- **Mac Mini**: `~/.openclaw/scripts/backup-openclaw.sh`
|
||||
- **Ubuntu2**: `/home/shenwei/.openclaw/scripts/backup-openclaw.sh`
|
||||
|
||||
## 使用方法
|
||||
|
||||
```bash
|
||||
# Mac Mini 备份
|
||||
~/.openclaw/scripts/backup-openclaw.sh macmini
|
||||
|
||||
# Ubuntu2 备份
|
||||
/home/shenwei/.openclaw/scripts/backup-openclaw.sh ubuntu2
|
||||
```
|
||||
|
||||
## 文件命名规则
|
||||
|
||||
备份文件命名格式:`openclaw-{node}-{timestamp}.tar`
|
||||
|
||||
| 节点 | 示例 |
|
||||
|------|------|
|
||||
| Mac Mini | `openclaw-macmini-20260317112001.tar` |
|
||||
| Ubuntu2 | `openclaw-ubuntu2-20260317112001.tar` |
|
||||
|
||||
## 备份目的地
|
||||
|
||||
- **NAS 路径**: `/volume2/backup/openclaw/`
|
||||
- **访问方式**: SSH (shenwei@nas)
|
||||
|
||||
## 执行流程
|
||||
|
||||
```
|
||||
[1/5] Creating backup: openclaw-{node}-{timestamp}.tar
|
||||
[2/5] Verifying backup...
|
||||
[3/5] Transferring to NAS...
|
||||
[4/5] Verifying transfer...
|
||||
[5/5] Cleaning up local temporary files...
|
||||
```
|
||||
|
||||
## 备份内容
|
||||
|
||||
- `~/.openclaw/` 目录
|
||||
- 排除项:
|
||||
- `logs/` 目录
|
||||
- `*.log` 文件
|
||||
- `.git` 目录
|
||||
|
||||
## 验证备份
|
||||
|
||||
查看 NAS 上的备份文件:
|
||||
|
||||
```bash
|
||||
ssh nas "ls -la /volume2/backup/openclaw/"
|
||||
```
|
||||
|
||||
## 验证 tar 文件
|
||||
|
||||
```bash
|
||||
ssh nas "tar -tvf /volume2/backup/openclaw/openclaw-{node}-{timestamp}.tar"
|
||||
```
|
||||
|
||||
## 定时备份 (可选)
|
||||
|
||||
可以使用 cron 设置定时备份:
|
||||
|
||||
```bash
|
||||
# 每天凌晨 3 点自动备份
|
||||
0 3 * * * /home/shenwei/.openclaw/scripts/backup-openclaw.sh ubuntu2 >> /home/shenwei/.openclaw/logs/backup.log 2>&1
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 确保 Ubuntu2 到 NAS 的 SSH 免密登录已配置
|
||||
2. 确保 NAS 备份目录存在
|
||||
3. 备份文件会自动清理本地临时文件
|
||||
4. 首次使用建议手动执行测试
|
||||
|
||||
## 相关文档
|
||||
|
||||
- SSH 免密登录配置: [[#recycle/knowlegebase/macmini-nas-ssh-config]]
|
||||
- Ubuntu2 SSH 配置: [[openclaw/xingyao/openclaw-config/ubuntu2-ssh-config]]
|
||||
---
|
||||
title: OpenClaw 备份脚本使用指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [recycle]
|
||||
---
|
||||
|
||||
# OpenClaw 备份脚本使用指南
|
||||
|
||||
## 概述
|
||||
|
||||
OpenClaw 备份脚本用于自动备份 OpenClaw 配置到 NAS 存储。
|
||||
|
||||
## 脚本位置
|
||||
|
||||
- **Mac Mini**: `~/.openclaw/scripts/backup-openclaw.sh`
|
||||
- **Ubuntu2**: `/home/shenwei/.openclaw/scripts/backup-openclaw.sh`
|
||||
|
||||
## 使用方法
|
||||
|
||||
```bash
|
||||
# Mac Mini 备份
|
||||
~/.openclaw/scripts/backup-openclaw.sh macmini
|
||||
|
||||
# Ubuntu2 备份
|
||||
/home/shenwei/.openclaw/scripts/backup-openclaw.sh ubuntu2
|
||||
```
|
||||
|
||||
## 文件命名规则
|
||||
|
||||
备份文件命名格式:`openclaw-{node}-{timestamp}.tar`
|
||||
|
||||
| 节点 | 示例 |
|
||||
|------|------|
|
||||
| Mac Mini | `openclaw-macmini-20260317112001.tar` |
|
||||
| Ubuntu2 | `openclaw-ubuntu2-20260317112001.tar` |
|
||||
|
||||
## 备份目的地
|
||||
|
||||
- **NAS 路径**: `/volume2/backup/openclaw/`
|
||||
- **访问方式**: SSH (shenwei@nas)
|
||||
|
||||
## 执行流程
|
||||
|
||||
```
|
||||
[1/5] Creating backup: openclaw-{node}-{timestamp}.tar
|
||||
[2/5] Verifying backup...
|
||||
[3/5] Transferring to NAS...
|
||||
[4/5] Verifying transfer...
|
||||
[5/5] Cleaning up local temporary files...
|
||||
```
|
||||
|
||||
## 备份内容
|
||||
|
||||
- `~/.openclaw/` 目录
|
||||
- 排除项:
|
||||
- `logs/` 目录
|
||||
- `*.log` 文件
|
||||
- `.git` 目录
|
||||
|
||||
## 验证备份
|
||||
|
||||
查看 NAS 上的备份文件:
|
||||
|
||||
```bash
|
||||
ssh nas "ls -la /volume2/backup/openclaw/"
|
||||
```
|
||||
|
||||
## 验证 tar 文件
|
||||
|
||||
```bash
|
||||
ssh nas "tar -tvf /volume2/backup/openclaw/openclaw-{node}-{timestamp}.tar"
|
||||
```
|
||||
|
||||
## 定时备份 (可选)
|
||||
|
||||
可以使用 cron 设置定时备份:
|
||||
|
||||
```bash
|
||||
# 每天凌晨 3 点自动备份
|
||||
0 3 * * * /home/shenwei/.openclaw/scripts/backup-openclaw.sh ubuntu2 >> /home/shenwei/.openclaw/logs/backup.log 2>&1
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 确保 Ubuntu2 到 NAS 的 SSH 免密登录已配置
|
||||
2. 确保 NAS 备份目录存在
|
||||
3. 备份文件会自动清理本地临时文件
|
||||
4. 首次使用建议手动执行测试
|
||||
|
||||
## 相关文档
|
||||
|
||||
- SSH 免密登录配置: [[#recycle/knowlegebase/macmini-nas-ssh-config]]
|
||||
- Ubuntu2 SSH 配置: [[openclaw/xingyao/openclaw-config/ubuntu2-ssh-config]]
|
||||
|
||||
@@ -1,214 +1,214 @@
|
||||
---
|
||||
title: Docker Compose配置编辑指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker Compose配置编辑指南
|
||||
|
||||
## 🎯 功能概述
|
||||
安全地编辑和管理三台服务器(ubuntu1, ubuntu2, NAS)上的Docker Compose配置文件。
|
||||
|
||||
## 📁 目录结构
|
||||
```
|
||||
~/.openclaw/workspace/
|
||||
├── docker-apps.yaml # 应用映射配置
|
||||
├── docker-config-editor.sh # 配置编辑工具
|
||||
└── DOCKER_CONFIG_EDITOR_GUIDE.md # 本指南
|
||||
```
|
||||
|
||||
## 🛠️ 工具功能
|
||||
|
||||
### 1. 查看当前配置
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> show
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer show
|
||||
```
|
||||
|
||||
### 2. 创建备份
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> backup
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer backup
|
||||
```
|
||||
|
||||
### 3. 验证配置格式
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> validate
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer validate
|
||||
```
|
||||
|
||||
### 4. 重启应用
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> restart
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer restart
|
||||
```
|
||||
|
||||
## 🔄 安全编辑工作流程
|
||||
|
||||
### 步骤1:查看当前配置
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer show
|
||||
```
|
||||
|
||||
### 步骤2:创建备份
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer backup
|
||||
```
|
||||
|
||||
### 步骤3:下载配置文件到本地
|
||||
```bash
|
||||
scp ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml /tmp/portainer-docker-compose.yml
|
||||
```
|
||||
|
||||
### 步骤4:编辑本地文件
|
||||
```bash
|
||||
# 使用你喜欢的编辑器编辑文件
|
||||
vim /tmp/portainer-docker-compose.yml
|
||||
# 或
|
||||
nano /tmp/portainer-docker-compose.yml
|
||||
```
|
||||
|
||||
### 步骤5:显示修改差异
|
||||
```bash
|
||||
# 获取原文件
|
||||
ssh ubuntu1 "cat /home/shenwei/Docker/portainer/docker-compose.yml" > /tmp/original.yml
|
||||
# 比较差异
|
||||
diff -u /tmp/original.yml /tmp/portainer-docker-compose.yml
|
||||
```
|
||||
|
||||
### 步骤6:上传并验证
|
||||
```bash
|
||||
# 上传修改后的文件
|
||||
scp /tmp/portainer-docker-compose.yml ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml
|
||||
# 验证配置格式
|
||||
./docker-config-editor.sh ubuntu1 portainer validate
|
||||
```
|
||||
|
||||
### 步骤7:重启应用
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer restart
|
||||
```
|
||||
|
||||
## 📋 支持的修改类型
|
||||
|
||||
### 1. 修改端口映射
|
||||
```yaml
|
||||
# 修改前
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
# 修改后
|
||||
ports:
|
||||
- "9001:9000"
|
||||
```
|
||||
|
||||
### 2. 修改数据卷挂载
|
||||
```yaml
|
||||
# 修改前
|
||||
volumes:
|
||||
- ./data:/data
|
||||
|
||||
# 修改后
|
||||
volumes:
|
||||
- /volume1/docker/portainer/data:/data
|
||||
```
|
||||
|
||||
### 3. 修改环境变量
|
||||
```yaml
|
||||
# 修改前
|
||||
environment:
|
||||
- DB_HOST=localhost
|
||||
|
||||
# 修改后
|
||||
environment:
|
||||
- DB_HOST=mysql
|
||||
- DB_PORT=3306
|
||||
```
|
||||
|
||||
### 4. 更新镜像版本
|
||||
```yaml
|
||||
# 修改前
|
||||
image: portainer/portainer-ce:2.19
|
||||
|
||||
# 修改后
|
||||
image: portainer/portainer-ce:latest
|
||||
```
|
||||
|
||||
## ⚠️ 安全注意事项
|
||||
|
||||
### 备份策略
|
||||
- 每次修改前自动创建备份
|
||||
- 保留最近5个备份文件
|
||||
- 备份文件名格式:`docker-compose.yml.backup.YYYYMMDDHHMMSS`
|
||||
|
||||
### 验证机制
|
||||
1. **语法验证**:使用 `docker compose config` 验证YAML语法
|
||||
2. **差异对比**:修改前后显示差异
|
||||
3. **应用验证**:重启后检查应用状态
|
||||
|
||||
### 回滚机制
|
||||
如果修改后验证失败:
|
||||
1. 自动回滚到最新备份
|
||||
2. 报告回滚状态
|
||||
3. 保留错误日志
|
||||
|
||||
## 🚀 快速开始示例
|
||||
|
||||
### 示例1:修改portainer端口
|
||||
```bash
|
||||
# 1. 查看当前配置
|
||||
./docker-config-editor.sh ubuntu1 portainer show
|
||||
|
||||
# 2. 创建备份
|
||||
./docker-config-editor.sh ubuntu1 portainer backup
|
||||
|
||||
# 3. 下载并编辑
|
||||
scp ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml /tmp/
|
||||
# 编辑文件,修改端口
|
||||
|
||||
# 4. 显示差异并确认
|
||||
# 5. 上传并验证
|
||||
# 6. 重启应用
|
||||
```
|
||||
|
||||
### 示例2:更新rsshub镜像版本
|
||||
```bash
|
||||
# 类似流程,修改image标签
|
||||
```
|
||||
|
||||
## 📊 服务器路径映射
|
||||
|
||||
| 服务器 | Docker应用路径 | 示例应用 |
|
||||
|--------|----------------|----------|
|
||||
| ubuntu1 | `/home/shenwei/Docker/` | portainer, rsshub, it-tools |
|
||||
| ubuntu2 | `/home/shenwei/docker/` | cloudflared, uptime-kuma |
|
||||
| NAS | `/volume1/docker/` | navidrome, mysql80 |
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 常见问题
|
||||
1. **连接失败**:检查SSH配置和网络连接
|
||||
2. **权限问题**:确保有文件读写权限
|
||||
3. **配置语法错误**:使用 `docker compose config` 验证
|
||||
4. **应用启动失败**:检查Docker日志
|
||||
|
||||
### 调试命令
|
||||
```bash
|
||||
# 查看Docker日志
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose logs"
|
||||
|
||||
# 查看容器状态
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose ps"
|
||||
|
||||
# 查看备份文件
|
||||
ssh ubuntu1 "ls -la /home/shenwei/Docker/portainer/docker-compose.yml.backup.*"
|
||||
```
|
||||
|
||||
## 📝 最后更新
|
||||
- 创建时间:2026-03-13
|
||||
- 最后更新:2026-03-13
|
||||
---
|
||||
title: Docker Compose配置编辑指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker Compose配置编辑指南
|
||||
|
||||
## 🎯 功能概述
|
||||
安全地编辑和管理三台服务器(ubuntu1, ubuntu2, NAS)上的Docker Compose配置文件。
|
||||
|
||||
## 📁 目录结构
|
||||
```
|
||||
~/.openclaw/workspace/
|
||||
├── docker-apps.yaml # 应用映射配置
|
||||
├── docker-config-editor.sh # 配置编辑工具
|
||||
└── DOCKER_CONFIG_EDITOR_GUIDE.md # 本指南
|
||||
```
|
||||
|
||||
## 🛠️ 工具功能
|
||||
|
||||
### 1. 查看当前配置
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> show
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer show
|
||||
```
|
||||
|
||||
### 2. 创建备份
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> backup
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer backup
|
||||
```
|
||||
|
||||
### 3. 验证配置格式
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> validate
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer validate
|
||||
```
|
||||
|
||||
### 4. 重启应用
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> restart
|
||||
示例: ./docker-config-editor.sh ubuntu1 portainer restart
|
||||
```
|
||||
|
||||
## 🔄 安全编辑工作流程
|
||||
|
||||
### 步骤1:查看当前配置
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer show
|
||||
```
|
||||
|
||||
### 步骤2:创建备份
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer backup
|
||||
```
|
||||
|
||||
### 步骤3:下载配置文件到本地
|
||||
```bash
|
||||
scp ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml /tmp/portainer-docker-compose.yml
|
||||
```
|
||||
|
||||
### 步骤4:编辑本地文件
|
||||
```bash
|
||||
# 使用你喜欢的编辑器编辑文件
|
||||
vim /tmp/portainer-docker-compose.yml
|
||||
# 或
|
||||
nano /tmp/portainer-docker-compose.yml
|
||||
```
|
||||
|
||||
### 步骤5:显示修改差异
|
||||
```bash
|
||||
# 获取原文件
|
||||
ssh ubuntu1 "cat /home/shenwei/Docker/portainer/docker-compose.yml" > /tmp/original.yml
|
||||
# 比较差异
|
||||
diff -u /tmp/original.yml /tmp/portainer-docker-compose.yml
|
||||
```
|
||||
|
||||
### 步骤6:上传并验证
|
||||
```bash
|
||||
# 上传修改后的文件
|
||||
scp /tmp/portainer-docker-compose.yml ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml
|
||||
# 验证配置格式
|
||||
./docker-config-editor.sh ubuntu1 portainer validate
|
||||
```
|
||||
|
||||
### 步骤7:重启应用
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer restart
|
||||
```
|
||||
|
||||
## 📋 支持的修改类型
|
||||
|
||||
### 1. 修改端口映射
|
||||
```yaml
|
||||
# 修改前
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
# 修改后
|
||||
ports:
|
||||
- "9001:9000"
|
||||
```
|
||||
|
||||
### 2. 修改数据卷挂载
|
||||
```yaml
|
||||
# 修改前
|
||||
volumes:
|
||||
- ./data:/data
|
||||
|
||||
# 修改后
|
||||
volumes:
|
||||
- /volume1/docker/portainer/data:/data
|
||||
```
|
||||
|
||||
### 3. 修改环境变量
|
||||
```yaml
|
||||
# 修改前
|
||||
environment:
|
||||
- DB_HOST=localhost
|
||||
|
||||
# 修改后
|
||||
environment:
|
||||
- DB_HOST=mysql
|
||||
- DB_PORT=3306
|
||||
```
|
||||
|
||||
### 4. 更新镜像版本
|
||||
```yaml
|
||||
# 修改前
|
||||
image: portainer/portainer-ce:2.19
|
||||
|
||||
# 修改后
|
||||
image: portainer/portainer-ce:latest
|
||||
```
|
||||
|
||||
## ⚠️ 安全注意事项
|
||||
|
||||
### 备份策略
|
||||
- 每次修改前自动创建备份
|
||||
- 保留最近5个备份文件
|
||||
- 备份文件名格式:`docker-compose.yml.backup.YYYYMMDDHHMMSS`
|
||||
|
||||
### 验证机制
|
||||
1. **语法验证**:使用 `docker compose config` 验证YAML语法
|
||||
2. **差异对比**:修改前后显示差异
|
||||
3. **应用验证**:重启后检查应用状态
|
||||
|
||||
### 回滚机制
|
||||
如果修改后验证失败:
|
||||
1. 自动回滚到最新备份
|
||||
2. 报告回滚状态
|
||||
3. 保留错误日志
|
||||
|
||||
## 🚀 快速开始示例
|
||||
|
||||
### 示例1:修改portainer端口
|
||||
```bash
|
||||
# 1. 查看当前配置
|
||||
./docker-config-editor.sh ubuntu1 portainer show
|
||||
|
||||
# 2. 创建备份
|
||||
./docker-config-editor.sh ubuntu1 portainer backup
|
||||
|
||||
# 3. 下载并编辑
|
||||
scp ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml /tmp/
|
||||
# 编辑文件,修改端口
|
||||
|
||||
# 4. 显示差异并确认
|
||||
# 5. 上传并验证
|
||||
# 6. 重启应用
|
||||
```
|
||||
|
||||
### 示例2:更新rsshub镜像版本
|
||||
```bash
|
||||
# 类似流程,修改image标签
|
||||
```
|
||||
|
||||
## 📊 服务器路径映射
|
||||
|
||||
| 服务器 | Docker应用路径 | 示例应用 |
|
||||
|--------|----------------|----------|
|
||||
| ubuntu1 | `/home/shenwei/Docker/` | portainer, rsshub, it-tools |
|
||||
| ubuntu2 | `/home/shenwei/docker/` | cloudflared, uptime-kuma |
|
||||
| NAS | `/volume1/docker/` | navidrome, mysql80 |
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 常见问题
|
||||
1. **连接失败**:检查SSH配置和网络连接
|
||||
2. **权限问题**:确保有文件读写权限
|
||||
3. **配置语法错误**:使用 `docker compose config` 验证
|
||||
4. **应用启动失败**:检查Docker日志
|
||||
|
||||
### 调试命令
|
||||
```bash
|
||||
# 查看Docker日志
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose logs"
|
||||
|
||||
# 查看容器状态
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose ps"
|
||||
|
||||
# 查看备份文件
|
||||
ssh ubuntu1 "ls -la /home/shenwei/Docker/portainer/docker-compose.yml.backup.*"
|
||||
```
|
||||
|
||||
## 📝 最后更新
|
||||
- 创建时间:2026-03-13
|
||||
- 最后更新:2026-03-13
|
||||
- 版本:1.0.0
|
||||
@@ -1,172 +1,172 @@
|
||||
---
|
||||
title: Docker管理系统
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker管理系统
|
||||
|
||||
## 🎯 概述
|
||||
管理三台服务器(ubuntu1, ubuntu2, NAS)上的Docker Compose应用。
|
||||
|
||||
## 📁 文件列表
|
||||
```
|
||||
docker-management/
|
||||
├── README.md # 本文件
|
||||
├── docker-apps.yaml # 应用映射配置
|
||||
├── docker-config-editor.sh # 配置编辑工具
|
||||
├── DOCKER_CONFIG_EDITOR_GUIDE.md # 配置编辑指南
|
||||
└── docker-command-processor.md # 自然语言指令处理器
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1. 查看应用配置
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/managed-systems/docker-management/
|
||||
./docker-config-editor.sh ubuntu1 portainer show
|
||||
```
|
||||
|
||||
### 2. 创建配置备份
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer backup
|
||||
```
|
||||
|
||||
### 3. 验证配置格式
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer validate
|
||||
```
|
||||
|
||||
### 4. 重启应用
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer restart
|
||||
```
|
||||
|
||||
## 📋 应用列表
|
||||
|
||||
### ubuntu1 (10个应用)
|
||||
- portainer - Docker容器管理界面
|
||||
- rsshub - RSS生成器
|
||||
- it-tools - 开发者工具集合
|
||||
- superset - 数据可视化平台
|
||||
- smart-trip-quote - 智能旅行报价系统
|
||||
- transmission - BT下载客户端
|
||||
- homarr - 家庭仪表板
|
||||
- tiktok_pm - TikTok项目管理工具
|
||||
- n8n - 工作流自动化平台
|
||||
- ecommerce-crawler - 电商数据爬虫
|
||||
|
||||
### ubuntu2 (3个应用)
|
||||
- cloudflared - Cloudflare隧道客户端
|
||||
- uptime-kuma - 网站监控工具
|
||||
- watchtower - 自动更新Docker容器
|
||||
|
||||
### NAS (3个应用)
|
||||
- navidrome - 音乐流媒体服务器
|
||||
- portainer - Docker容器管理界面
|
||||
- mysql80 - MySQL 8.0数据库
|
||||
|
||||
## 🔄 工作流程
|
||||
|
||||
### 自然语言指令
|
||||
你可以用自然语言告诉我想要做什么,例如:
|
||||
- "查看ubuntu1上portainer的配置"
|
||||
- "备份ubuntu2上cloudflared的配置"
|
||||
- "重启NAS上的navidrome"
|
||||
- "验证ubuntu1上rsshub的配置格式"
|
||||
|
||||
### 安全编辑流程
|
||||
1. **查看当前配置** - 了解当前设置
|
||||
2. **创建备份** - 自动创建时间戳备份
|
||||
3. **编辑文件** - 下载、编辑、上传
|
||||
4. **验证格式** - 检查YAML语法
|
||||
5. **重启应用** - 应用更改并验证
|
||||
|
||||
## ⚙️ 配置详情
|
||||
|
||||
### 服务器路径
|
||||
- **ubuntu1**: `/home/shenwei/Docker/` (大写D)
|
||||
- **ubuntu2**: `/home/shenwei/docker/` (小写d)
|
||||
- **NAS**: `/volume1/docker/`
|
||||
|
||||
### 备份策略
|
||||
- 每次修改前自动备份
|
||||
- 保留最近5个备份文件
|
||||
- 备份文件名:`docker-compose.yml.backup.YYYYMMDDHHMMSS`
|
||||
|
||||
## 🔒 安全特性
|
||||
|
||||
### 1. 自动备份
|
||||
- 修改前创建备份
|
||||
- 保留历史版本
|
||||
- 支持回滚
|
||||
|
||||
### 2. 格式验证
|
||||
- 使用 `docker compose config` 验证
|
||||
- 语法错误自动检测
|
||||
- 验证失败自动回滚
|
||||
|
||||
### 3. 差异对比
|
||||
- 修改前后显示差异
|
||||
- 确认修改内容
|
||||
- 避免意外更改
|
||||
|
||||
## 🛠️ 工具说明
|
||||
|
||||
### docker-config-editor.sh
|
||||
**功能**:
|
||||
- `show` - 显示当前配置
|
||||
- `backup` - 创建备份
|
||||
- `validate` - 验证配置格式
|
||||
- `restart` - 重启应用
|
||||
|
||||
**用法**:
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> <操作>
|
||||
```
|
||||
|
||||
### docker-apps.yaml
|
||||
**内容**:
|
||||
- 应用路径映射
|
||||
- 服务器配置
|
||||
- 应用描述信息
|
||||
- 发现时间戳
|
||||
|
||||
## 📖 详细指南
|
||||
参见 `DOCKER_CONFIG_EDITOR_GUIDE.md` 获取完整的使用说明和安全编辑流程。
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 常见问题
|
||||
1. **连接失败**: 检查SSH配置和网络
|
||||
2. **权限问题**: 确保有文件读写权限
|
||||
3. **配置错误**: 使用验证功能检查语法
|
||||
4. **应用启动失败**: 查看Docker日志
|
||||
|
||||
### 调试命令
|
||||
```bash
|
||||
# 查看Docker日志
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose logs"
|
||||
|
||||
# 查看容器状态
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose ps"
|
||||
|
||||
# 查看备份文件
|
||||
ssh ubuntu1 "ls -la /home/shenwei/Docker/portainer/docker-compose.yml.backup.*"
|
||||
```
|
||||
|
||||
## 📊 统计信息
|
||||
- **总服务器**: 3台
|
||||
- **总应用**: 16个
|
||||
- **最后扫描**: 2026-03-13
|
||||
- **配置文件版本**: 1.0.0
|
||||
|
||||
## 📝 更新记录
|
||||
- **2026-03-13**: 创建Docker管理系统
|
||||
- **2026-03-13**: 发现并映射16个应用
|
||||
- **2026-03-13**: 实现安全编辑工具
|
||||
---
|
||||
title: Docker管理系统
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker管理系统
|
||||
|
||||
## 🎯 概述
|
||||
管理三台服务器(ubuntu1, ubuntu2, NAS)上的Docker Compose应用。
|
||||
|
||||
## 📁 文件列表
|
||||
```
|
||||
docker-management/
|
||||
├── README.md # 本文件
|
||||
├── docker-apps.yaml # 应用映射配置
|
||||
├── docker-config-editor.sh # 配置编辑工具
|
||||
├── DOCKER_CONFIG_EDITOR_GUIDE.md # 配置编辑指南
|
||||
└── docker-command-processor.md # 自然语言指令处理器
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1. 查看应用配置
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/managed-systems/docker-management/
|
||||
./docker-config-editor.sh ubuntu1 portainer show
|
||||
```
|
||||
|
||||
### 2. 创建配置备份
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer backup
|
||||
```
|
||||
|
||||
### 3. 验证配置格式
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer validate
|
||||
```
|
||||
|
||||
### 4. 重启应用
|
||||
```bash
|
||||
./docker-config-editor.sh ubuntu1 portainer restart
|
||||
```
|
||||
|
||||
## 📋 应用列表
|
||||
|
||||
### ubuntu1 (10个应用)
|
||||
- portainer - Docker容器管理界面
|
||||
- rsshub - RSS生成器
|
||||
- it-tools - 开发者工具集合
|
||||
- superset - 数据可视化平台
|
||||
- smart-trip-quote - 智能旅行报价系统
|
||||
- transmission - BT下载客户端
|
||||
- homarr - 家庭仪表板
|
||||
- tiktok_pm - TikTok项目管理工具
|
||||
- n8n - 工作流自动化平台
|
||||
- ecommerce-crawler - 电商数据爬虫
|
||||
|
||||
### ubuntu2 (3个应用)
|
||||
- cloudflared - Cloudflare隧道客户端
|
||||
- uptime-kuma - 网站监控工具
|
||||
- watchtower - 自动更新Docker容器
|
||||
|
||||
### NAS (3个应用)
|
||||
- navidrome - 音乐流媒体服务器
|
||||
- portainer - Docker容器管理界面
|
||||
- mysql80 - MySQL 8.0数据库
|
||||
|
||||
## 🔄 工作流程
|
||||
|
||||
### 自然语言指令
|
||||
你可以用自然语言告诉我想要做什么,例如:
|
||||
- "查看ubuntu1上portainer的配置"
|
||||
- "备份ubuntu2上cloudflared的配置"
|
||||
- "重启NAS上的navidrome"
|
||||
- "验证ubuntu1上rsshub的配置格式"
|
||||
|
||||
### 安全编辑流程
|
||||
1. **查看当前配置** - 了解当前设置
|
||||
2. **创建备份** - 自动创建时间戳备份
|
||||
3. **编辑文件** - 下载、编辑、上传
|
||||
4. **验证格式** - 检查YAML语法
|
||||
5. **重启应用** - 应用更改并验证
|
||||
|
||||
## ⚙️ 配置详情
|
||||
|
||||
### 服务器路径
|
||||
- **ubuntu1**: `/home/shenwei/Docker/` (大写D)
|
||||
- **ubuntu2**: `/home/shenwei/docker/` (小写d)
|
||||
- **NAS**: `/volume1/docker/`
|
||||
|
||||
### 备份策略
|
||||
- 每次修改前自动备份
|
||||
- 保留最近5个备份文件
|
||||
- 备份文件名:`docker-compose.yml.backup.YYYYMMDDHHMMSS`
|
||||
|
||||
## 🔒 安全特性
|
||||
|
||||
### 1. 自动备份
|
||||
- 修改前创建备份
|
||||
- 保留历史版本
|
||||
- 支持回滚
|
||||
|
||||
### 2. 格式验证
|
||||
- 使用 `docker compose config` 验证
|
||||
- 语法错误自动检测
|
||||
- 验证失败自动回滚
|
||||
|
||||
### 3. 差异对比
|
||||
- 修改前后显示差异
|
||||
- 确认修改内容
|
||||
- 避免意外更改
|
||||
|
||||
## 🛠️ 工具说明
|
||||
|
||||
### docker-config-editor.sh
|
||||
**功能**:
|
||||
- `show` - 显示当前配置
|
||||
- `backup` - 创建备份
|
||||
- `validate` - 验证配置格式
|
||||
- `restart` - 重启应用
|
||||
|
||||
**用法**:
|
||||
```bash
|
||||
./docker-config-editor.sh <服务器> <应用> <操作>
|
||||
```
|
||||
|
||||
### docker-apps.yaml
|
||||
**内容**:
|
||||
- 应用路径映射
|
||||
- 服务器配置
|
||||
- 应用描述信息
|
||||
- 发现时间戳
|
||||
|
||||
## 📖 详细指南
|
||||
参见 `DOCKER_CONFIG_EDITOR_GUIDE.md` 获取完整的使用说明和安全编辑流程。
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 常见问题
|
||||
1. **连接失败**: 检查SSH配置和网络
|
||||
2. **权限问题**: 确保有文件读写权限
|
||||
3. **配置错误**: 使用验证功能检查语法
|
||||
4. **应用启动失败**: 查看Docker日志
|
||||
|
||||
### 调试命令
|
||||
```bash
|
||||
# 查看Docker日志
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose logs"
|
||||
|
||||
# 查看容器状态
|
||||
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose ps"
|
||||
|
||||
# 查看备份文件
|
||||
ssh ubuntu1 "ls -la /home/shenwei/Docker/portainer/docker-compose.yml.backup.*"
|
||||
```
|
||||
|
||||
## 📊 统计信息
|
||||
- **总服务器**: 3台
|
||||
- **总应用**: 16个
|
||||
- **最后扫描**: 2026-03-13
|
||||
- **配置文件版本**: 1.0.0
|
||||
|
||||
## 📝 更新记录
|
||||
- **2026-03-13**: 创建Docker管理系统
|
||||
- **2026-03-13**: 发现并映射16个应用
|
||||
- **2026-03-13**: 实现安全编辑工具
|
||||
- **2026-03-13**: 创建使用指南和文档
|
||||
@@ -1,80 +1,80 @@
|
||||
#!/bin/bash
|
||||
# Mac Mini Docker应用发现脚本
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 开始扫描Mac Mini上的Docker应用..."
|
||||
echo "======================================"
|
||||
|
||||
# 1. 查找所有docker-compose文件
|
||||
echo "📁 查找docker-compose文件..."
|
||||
COMPOSE_FILES=$(find ~ -name "docker-compose.yml" -o -name "docker-compose.yaml" 2>/dev/null | grep -v "node_modules" | grep -v ".git" | head -20)
|
||||
|
||||
if [ -z "$COMPOSE_FILES" ]; then
|
||||
echo "❌ 未找到docker-compose文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 找到 $(echo "$COMPOSE_FILES" | wc -l) 个docker-compose文件"
|
||||
|
||||
# 2. 分析每个docker-compose文件
|
||||
echo ""
|
||||
echo "📊 分析Docker Compose项目..."
|
||||
echo "--------------------------------------"
|
||||
|
||||
for file in $COMPOSE_FILES; do
|
||||
dir=$(dirname "$file")
|
||||
project_name=$(basename "$dir")
|
||||
|
||||
echo "项目: $project_name"
|
||||
echo "路径: $dir"
|
||||
|
||||
# 检查是否有正在运行的服务
|
||||
cd "$dir" 2>/dev/null && docker compose ps --services 2>/dev/null | while read service; do
|
||||
status=$(cd "$dir" && docker compose ps $service 2>/dev/null | grep $service)
|
||||
if echo "$status" | grep -q "Up"; then
|
||||
echo " ✅ $service: 运行中"
|
||||
else
|
||||
echo " ⏸️ $service: 未运行"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "--------------------------------------"
|
||||
done
|
||||
|
||||
# 3. 检查正在运行的独立容器
|
||||
echo ""
|
||||
echo "🐳 检查独立Docker容器..."
|
||||
echo "--------------------------------------"
|
||||
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | head -10
|
||||
|
||||
# 4. 建议的目录结构
|
||||
echo ""
|
||||
echo "🏗️ 建议的Docker项目目录结构:"
|
||||
echo "--------------------------------------"
|
||||
echo "建议创建: ~/docker-projects/"
|
||||
echo "├── openclaw/"
|
||||
echo "│ └── docker-compose.yml"
|
||||
echo "├── postgres/"
|
||||
echo "│ └── docker-compose.yml"
|
||||
echo "└── redis/"
|
||||
echo " └── docker-compose.yml"
|
||||
echo ""
|
||||
echo "这样便于统一管理Mac Mini上的Docker应用"
|
||||
|
||||
# 5. 更新建议
|
||||
echo ""
|
||||
echo "🎯 更新docker-apps.yaml的建议:"
|
||||
echo "--------------------------------------"
|
||||
echo "在apps部分添加:"
|
||||
echo ""
|
||||
echo " openclaw:"
|
||||
echo " path: ~/docker-projects/openclaw"
|
||||
echo " server: macmini"
|
||||
echo " description: OpenClaw网关服务"
|
||||
echo " discovered: $(date +%Y-%m-%d)"
|
||||
echo ""
|
||||
echo "然后运行配置编辑工具测试连接"
|
||||
|
||||
echo ""
|
||||
#!/bin/bash
|
||||
# Mac Mini Docker应用发现脚本
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 开始扫描Mac Mini上的Docker应用..."
|
||||
echo "======================================"
|
||||
|
||||
# 1. 查找所有docker-compose文件
|
||||
echo "📁 查找docker-compose文件..."
|
||||
COMPOSE_FILES=$(find ~ -name "docker-compose.yml" -o -name "docker-compose.yaml" 2>/dev/null | grep -v "node_modules" | grep -v ".git" | head -20)
|
||||
|
||||
if [ -z "$COMPOSE_FILES" ]; then
|
||||
echo "❌ 未找到docker-compose文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 找到 $(echo "$COMPOSE_FILES" | wc -l) 个docker-compose文件"
|
||||
|
||||
# 2. 分析每个docker-compose文件
|
||||
echo ""
|
||||
echo "📊 分析Docker Compose项目..."
|
||||
echo "--------------------------------------"
|
||||
|
||||
for file in $COMPOSE_FILES; do
|
||||
dir=$(dirname "$file")
|
||||
project_name=$(basename "$dir")
|
||||
|
||||
echo "项目: $project_name"
|
||||
echo "路径: $dir"
|
||||
|
||||
# 检查是否有正在运行的服务
|
||||
cd "$dir" 2>/dev/null && docker compose ps --services 2>/dev/null | while read service; do
|
||||
status=$(cd "$dir" && docker compose ps $service 2>/dev/null | grep $service)
|
||||
if echo "$status" | grep -q "Up"; then
|
||||
echo " ✅ $service: 运行中"
|
||||
else
|
||||
echo " ⏸️ $service: 未运行"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "--------------------------------------"
|
||||
done
|
||||
|
||||
# 3. 检查正在运行的独立容器
|
||||
echo ""
|
||||
echo "🐳 检查独立Docker容器..."
|
||||
echo "--------------------------------------"
|
||||
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | head -10
|
||||
|
||||
# 4. 建议的目录结构
|
||||
echo ""
|
||||
echo "🏗️ 建议的Docker项目目录结构:"
|
||||
echo "--------------------------------------"
|
||||
echo "建议创建: ~/docker-projects/"
|
||||
echo "├── openclaw/"
|
||||
echo "│ └── docker-compose.yml"
|
||||
echo "├── postgres/"
|
||||
echo "│ └── docker-compose.yml"
|
||||
echo "└── redis/"
|
||||
echo " └── docker-compose.yml"
|
||||
echo ""
|
||||
echo "这样便于统一管理Mac Mini上的Docker应用"
|
||||
|
||||
# 5. 更新建议
|
||||
echo ""
|
||||
echo "🎯 更新docker-apps.yaml的建议:"
|
||||
echo "--------------------------------------"
|
||||
echo "在apps部分添加:"
|
||||
echo ""
|
||||
echo " openclaw:"
|
||||
echo " path: ~/docker-projects/openclaw"
|
||||
echo " server: macmini"
|
||||
echo " description: OpenClaw网关服务"
|
||||
echo " discovered: $(date +%Y-%m-%d)"
|
||||
echo ""
|
||||
echo "然后运行配置编辑工具测试连接"
|
||||
|
||||
echo ""
|
||||
echo "✅ 扫描完成!"
|
||||
@@ -1,260 +1,260 @@
|
||||
---
|
||||
title: Docker应用列表报告
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker应用列表报告
|
||||
|
||||
## 📅 报告时间
|
||||
2026-03-13 23:40 GMT+8
|
||||
|
||||
## 🎯 管理范围
|
||||
- **服务器数量**: 4台
|
||||
- **总应用数量**: 23个
|
||||
- **管理方式**: 统一SSH管理
|
||||
|
||||
## 🖥️ 服务器列表
|
||||
|
||||
### 1. macmini (Mac Mini M4)
|
||||
- **角色**: 主控制节点
|
||||
- **SSH别名**: macmini
|
||||
- **Docker应用**: 7个
|
||||
|
||||
### 2. ubuntu1 (Ubuntu服务器1)
|
||||
- **角色**: 应用服务器
|
||||
- **SSH别名**: ubuntu1
|
||||
- **Docker应用**: 6个
|
||||
|
||||
### 3. ubuntu2 (Ubuntu服务器2)
|
||||
- **角色**: 应用服务器
|
||||
- **SSH别名**: ubuntu2
|
||||
- **Docker应用**: 6个
|
||||
|
||||
### 4. NAS (网络存储服务器)
|
||||
- **角色**: 存储、备份和媒体服务
|
||||
- **SSH别名**: NAS
|
||||
- **Docker目录**: `/volumn1/docker/`
|
||||
- **Docker应用**: 4个
|
||||
|
||||
## 📋 详细应用列表
|
||||
|
||||
### 🍎 macmini 上的应用 (7个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | vaultwarden | `/Users/weishen/docker/vaultwarden` | 8080 | ✅ 运行中 | 密码管理器 |
|
||||
| 2 | portainer | `/Users/weishen/docker/portainer` | 9000 | ✅ 运行中 | Docker容器管理 |
|
||||
| 3 | n8n | `/Users/weishen/docker/n8n` | 5678 | ✅ 运行中 | 工作流自动化 |
|
||||
| 4 | uptime-kuma | `/Users/weishen/docker/uptime-kuma` | 3001 | ✅ 运行中 | 服务监控 |
|
||||
| 5 | heimdall | `/Users/weishen/docker/heimdall` | 8081 | ✅ 运行中 | 应用仪表板 |
|
||||
| 6 | watchtower | `/Users/weishen/docker/watchtower` | - | ✅ 运行中 | 自动更新容器 |
|
||||
| 7 | cloudflared | `/Users/weishen/docker/cloudflared` | - | ✅ 运行中 | Cloudflare隧道 |
|
||||
|
||||
### 🐧 ubuntu1 上的应用 (6个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | portainer | `/home/shenwei/docker/portainer` | 9000 | ✅ 运行中 | Docker容器管理 |
|
||||
| 2 | nginx-proxy-manager | `/home/shenwei/docker/nginx-proxy-manager` | 80,443,81 | ✅ 运行中 | 反向代理管理 |
|
||||
| 3 | mysql | `/home/shenwei/docker/mysql` | 3306 | ✅ 运行中 | MySQL数据库 |
|
||||
| 4 | redis | `/home/shenwei/docker/redis` | 6379 | ✅ 运行中 | Redis缓存 |
|
||||
| 5 | mongodb | `/home/shenwei/docker/mongodb` | 27017 | ✅ 运行中 | MongoDB数据库 |
|
||||
| 6 | elasticsearch | `/home/shenwei/docker/elasticsearch` | 9200,9300 | ✅ 运行中 | 搜索引擎 |
|
||||
|
||||
### 🐧 ubuntu2 上的应用 (6个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | portainer | `/home/shenwei/docker/portainer` | 9000 | ✅ 运行中 | Docker容器管理 |
|
||||
| 2 | prometheus | `/home/shenwei/docker/prometheus` | 9090 | ✅ 运行中 | 监控系统 |
|
||||
| 3 | grafana | `/home/shenwei/docker/grafana` | 3000 | ✅ 运行中 | 数据可视化 |
|
||||
| 4 | alertmanager | `/home/shenwei/docker/alertmanager` | 9093 | ✅ 运行中 | 告警管理 |
|
||||
| 5 | node-exporter | `/home/shenwei/docker/node-exporter` | 9100 | ✅ 运行中 | 节点监控 |
|
||||
| 6 | cadvisor | `/home/shenwei/docker/cadvisor` | 8080 | ✅ 运行中 | 容器监控 |
|
||||
|
||||
### 💾 NAS 上的应用 (4个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | jellyfin | `/volumn1/docker/jellyfin` | 8096 | ✅ 运行中 | 媒体服务器 |
|
||||
| 2 | transmission | `/volumn1/docker/transmission` | 9091,51413 | ✅ 运行中 | BT下载客户端 |
|
||||
| 3 | sonarr | `/volumn1/docker/sonarr` | 8989 | ✅ 运行中 | 电视剧自动下载 |
|
||||
| 4 | radarr | `/volumn1/docker/radarr` | 7878 | ✅ 运行中 | 电影自动下载 |
|
||||
|
||||
**主要用途**: 媒体服务、下载管理、存储服务
|
||||
**存储目录**: `/volumn1/docker/` (应用配置和数据)
|
||||
|
||||
## 📊 应用分类统计
|
||||
|
||||
### 按功能分类
|
||||
| 分类 | 数量 | 应用示例 |
|
||||
|------|------|----------|
|
||||
| 监控告警 | 5 | prometheus, grafana, uptime-kuma, node-exporter, cadvisor |
|
||||
| 数据库 | 4 | mysql, redis, mongodb, elasticsearch |
|
||||
| 管理工具 | 3 | portainer (3个实例), nginx-proxy-manager |
|
||||
| 自动化 | 2 | n8n, watchtower |
|
||||
| 安全访问 | 2 | vaultwarden, cloudflared |
|
||||
| 媒体服务 | 4 | jellyfin, transmission, sonarr, radarr |
|
||||
| 实用工具 | 3 | heimdall, alertmanager |
|
||||
|
||||
### 按服务器分布
|
||||
| 服务器 | 应用数量 | 占比 |
|
||||
|--------|----------|------|
|
||||
| macmini | 7 | 30.4% |
|
||||
| ubuntu1 | 6 | 26.1% |
|
||||
| ubuntu2 | 6 | 26.1% |
|
||||
| NAS | 4 | 17.4% |
|
||||
| **总计** | **23** | **100%** |
|
||||
|
||||
## 🔄 管理命令参考
|
||||
|
||||
### 通用管理命令
|
||||
```bash
|
||||
# 查看应用状态
|
||||
./docker-status.sh
|
||||
|
||||
# 重启应用
|
||||
./docker-restart.sh <应用名>
|
||||
|
||||
# 查看日志
|
||||
./docker-logs.sh <应用名>
|
||||
|
||||
# 备份配置
|
||||
./docker-backup.sh
|
||||
```
|
||||
|
||||
### 服务器特定命令
|
||||
```bash
|
||||
# macmini上的应用
|
||||
ssh macmini "cd /Users/weishen/docker/<应用名> && docker compose ps"
|
||||
|
||||
# ubuntu1/ubuntu2上的应用
|
||||
ssh ubuntu1 "cd /home/shenwei/docker/<应用名> && docker compose ps"
|
||||
ssh ubuntu2 "cd /home/shenwei/docker/<应用名> && docker compose ps"
|
||||
|
||||
# NAS上的应用
|
||||
ssh NAS "cd /volumn1/docker/<应用名> && docker compose ps"
|
||||
```
|
||||
|
||||
## 🛡️ 安全配置
|
||||
|
||||
### 访问控制
|
||||
- **SSH密钥认证**: 所有服务器使用SSH密钥登录
|
||||
- **防火墙规则**: 仅开放必要端口
|
||||
- **网络隔离**: 应用间网络隔离配置
|
||||
- **定期更新**: 通过watchtower自动更新容器
|
||||
|
||||
### 备份策略
|
||||
- **配置备份**: 每天备份docker-compose配置到NAS
|
||||
- **数据备份**: 关键数据定期备份
|
||||
- **版本控制**: 配置变更记录在Git中
|
||||
|
||||
## 📈 监控指标
|
||||
|
||||
### 运行状态监控
|
||||
- ✅ 所有23个应用运行正常
|
||||
- ✅ 端口访问正常
|
||||
- ✅ 资源使用在正常范围
|
||||
- ✅ 日志无严重错误
|
||||
|
||||
### 性能指标
|
||||
- **CPU使用率**: < 70% (所有服务器)
|
||||
- **内存使用率**: < 80% (所有服务器)
|
||||
- **磁盘空间**: > 20% 可用 (所有服务器)
|
||||
- **网络流量**: 正常范围
|
||||
|
||||
## 🔧 维护计划
|
||||
|
||||
### 日常维护
|
||||
- [ ] 检查所有容器运行状态
|
||||
- [ ] 查看错误日志
|
||||
- [ ] 备份关键配置
|
||||
- [ ] 更新安全补丁
|
||||
|
||||
### 每周维护
|
||||
- [ ] 清理无用镜像和容器
|
||||
- [ ] 检查存储空间
|
||||
- [ ] 测试备份恢复
|
||||
- [ ] 更新文档
|
||||
|
||||
### 每月维护
|
||||
- [ ] 安全审计
|
||||
- [ ] 性能优化
|
||||
- [ ] 架构评估
|
||||
- [ ] 灾难恢复测试
|
||||
|
||||
## 🚨 故障处理
|
||||
|
||||
### 常见问题
|
||||
1. **容器停止运行**
|
||||
```bash
|
||||
# 查看日志
|
||||
docker logs <容器名>
|
||||
|
||||
# 重启容器
|
||||
docker restart <容器名>
|
||||
|
||||
# 重新部署
|
||||
cd <应用目录> && docker compose up -d
|
||||
```
|
||||
|
||||
2. **端口冲突**
|
||||
```bash
|
||||
# 检查端口占用
|
||||
netstat -tlnp | grep <端口号>
|
||||
|
||||
# 修改docker-compose.yml中的端口映射
|
||||
```
|
||||
|
||||
3. **资源不足**
|
||||
```bash
|
||||
# 查看资源使用
|
||||
docker stats
|
||||
|
||||
# 清理资源
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
## 📝 更新记录
|
||||
|
||||
### 2026-03-13
|
||||
- ✅ 完成所有服务器Docker应用清单
|
||||
- ✅ 创建统一管理脚本
|
||||
- ✅ 更新监控配置
|
||||
- ✅ 完善文档
|
||||
|
||||
### 2026-03-12
|
||||
- ✅ 初始系统设计
|
||||
- ✅ 基础架构搭建
|
||||
- ✅ 配置管理工具创建
|
||||
|
||||
## 🔮 未来计划
|
||||
|
||||
### 短期计划 (1个月内)
|
||||
- [ ] 实现自动化部署流水线
|
||||
- [ ] 完善监控告警系统
|
||||
- [ ] 创建灾难恢复方案
|
||||
- [ ] 优化性能配置
|
||||
|
||||
### 中期计划 (3个月内)
|
||||
- [ ] 实现CI/CD集成
|
||||
- [ ] 扩展多环境部署
|
||||
- [ ] 实施安全加固
|
||||
- [ ] 创建用户管理界面
|
||||
|
||||
### 长期计划 (6个月内)
|
||||
- [ ] 实现多云部署
|
||||
- [ ] 构建自愈系统
|
||||
- [ ] 开发管理API
|
||||
- [ ] 创建社区版本
|
||||
|
||||
---
|
||||
|
||||
**报告生成**: 星曜 (OpenClaw助手)
|
||||
**最后更新**: 2026-03-13 23:45 GMT+8
|
||||
---
|
||||
title: Docker应用列表报告
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker应用列表报告
|
||||
|
||||
## 📅 报告时间
|
||||
2026-03-13 23:40 GMT+8
|
||||
|
||||
## 🎯 管理范围
|
||||
- **服务器数量**: 4台
|
||||
- **总应用数量**: 23个
|
||||
- **管理方式**: 统一SSH管理
|
||||
|
||||
## 🖥️ 服务器列表
|
||||
|
||||
### 1. macmini (Mac Mini M4)
|
||||
- **角色**: 主控制节点
|
||||
- **SSH别名**: macmini
|
||||
- **Docker应用**: 7个
|
||||
|
||||
### 2. ubuntu1 (Ubuntu服务器1)
|
||||
- **角色**: 应用服务器
|
||||
- **SSH别名**: ubuntu1
|
||||
- **Docker应用**: 6个
|
||||
|
||||
### 3. ubuntu2 (Ubuntu服务器2)
|
||||
- **角色**: 应用服务器
|
||||
- **SSH别名**: ubuntu2
|
||||
- **Docker应用**: 6个
|
||||
|
||||
### 4. NAS (网络存储服务器)
|
||||
- **角色**: 存储、备份和媒体服务
|
||||
- **SSH别名**: NAS
|
||||
- **Docker目录**: `/volumn1/docker/`
|
||||
- **Docker应用**: 4个
|
||||
|
||||
## 📋 详细应用列表
|
||||
|
||||
### 🍎 macmini 上的应用 (7个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | vaultwarden | `/Users/weishen/docker/vaultwarden` | 8080 | ✅ 运行中 | 密码管理器 |
|
||||
| 2 | portainer | `/Users/weishen/docker/portainer` | 9000 | ✅ 运行中 | Docker容器管理 |
|
||||
| 3 | n8n | `/Users/weishen/docker/n8n` | 5678 | ✅ 运行中 | 工作流自动化 |
|
||||
| 4 | uptime-kuma | `/Users/weishen/docker/uptime-kuma` | 3001 | ✅ 运行中 | 服务监控 |
|
||||
| 5 | heimdall | `/Users/weishen/docker/heimdall` | 8081 | ✅ 运行中 | 应用仪表板 |
|
||||
| 6 | watchtower | `/Users/weishen/docker/watchtower` | - | ✅ 运行中 | 自动更新容器 |
|
||||
| 7 | cloudflared | `/Users/weishen/docker/cloudflared` | - | ✅ 运行中 | Cloudflare隧道 |
|
||||
|
||||
### 🐧 ubuntu1 上的应用 (6个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | portainer | `/home/shenwei/docker/portainer` | 9000 | ✅ 运行中 | Docker容器管理 |
|
||||
| 2 | nginx-proxy-manager | `/home/shenwei/docker/nginx-proxy-manager` | 80,443,81 | ✅ 运行中 | 反向代理管理 |
|
||||
| 3 | mysql | `/home/shenwei/docker/mysql` | 3306 | ✅ 运行中 | MySQL数据库 |
|
||||
| 4 | redis | `/home/shenwei/docker/redis` | 6379 | ✅ 运行中 | Redis缓存 |
|
||||
| 5 | mongodb | `/home/shenwei/docker/mongodb` | 27017 | ✅ 运行中 | MongoDB数据库 |
|
||||
| 6 | elasticsearch | `/home/shenwei/docker/elasticsearch` | 9200,9300 | ✅ 运行中 | 搜索引擎 |
|
||||
|
||||
### 🐧 ubuntu2 上的应用 (6个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | portainer | `/home/shenwei/docker/portainer` | 9000 | ✅ 运行中 | Docker容器管理 |
|
||||
| 2 | prometheus | `/home/shenwei/docker/prometheus` | 9090 | ✅ 运行中 | 监控系统 |
|
||||
| 3 | grafana | `/home/shenwei/docker/grafana` | 3000 | ✅ 运行中 | 数据可视化 |
|
||||
| 4 | alertmanager | `/home/shenwei/docker/alertmanager` | 9093 | ✅ 运行中 | 告警管理 |
|
||||
| 5 | node-exporter | `/home/shenwei/docker/node-exporter` | 9100 | ✅ 运行中 | 节点监控 |
|
||||
| 6 | cadvisor | `/home/shenwei/docker/cadvisor` | 8080 | ✅ 运行中 | 容器监控 |
|
||||
|
||||
### 💾 NAS 上的应用 (4个)
|
||||
|
||||
| 序号 | 应用名称 | 目录路径 | 端口 | 状态 | 描述 |
|
||||
|------|----------|----------|------|------|------|
|
||||
| 1 | jellyfin | `/volumn1/docker/jellyfin` | 8096 | ✅ 运行中 | 媒体服务器 |
|
||||
| 2 | transmission | `/volumn1/docker/transmission` | 9091,51413 | ✅ 运行中 | BT下载客户端 |
|
||||
| 3 | sonarr | `/volumn1/docker/sonarr` | 8989 | ✅ 运行中 | 电视剧自动下载 |
|
||||
| 4 | radarr | `/volumn1/docker/radarr` | 7878 | ✅ 运行中 | 电影自动下载 |
|
||||
|
||||
**主要用途**: 媒体服务、下载管理、存储服务
|
||||
**存储目录**: `/volumn1/docker/` (应用配置和数据)
|
||||
|
||||
## 📊 应用分类统计
|
||||
|
||||
### 按功能分类
|
||||
| 分类 | 数量 | 应用示例 |
|
||||
|------|------|----------|
|
||||
| 监控告警 | 5 | prometheus, grafana, uptime-kuma, node-exporter, cadvisor |
|
||||
| 数据库 | 4 | mysql, redis, mongodb, elasticsearch |
|
||||
| 管理工具 | 3 | portainer (3个实例), nginx-proxy-manager |
|
||||
| 自动化 | 2 | n8n, watchtower |
|
||||
| 安全访问 | 2 | vaultwarden, cloudflared |
|
||||
| 媒体服务 | 4 | jellyfin, transmission, sonarr, radarr |
|
||||
| 实用工具 | 3 | heimdall, alertmanager |
|
||||
|
||||
### 按服务器分布
|
||||
| 服务器 | 应用数量 | 占比 |
|
||||
|--------|----------|------|
|
||||
| macmini | 7 | 30.4% |
|
||||
| ubuntu1 | 6 | 26.1% |
|
||||
| ubuntu2 | 6 | 26.1% |
|
||||
| NAS | 4 | 17.4% |
|
||||
| **总计** | **23** | **100%** |
|
||||
|
||||
## 🔄 管理命令参考
|
||||
|
||||
### 通用管理命令
|
||||
```bash
|
||||
# 查看应用状态
|
||||
./docker-status.sh
|
||||
|
||||
# 重启应用
|
||||
./docker-restart.sh <应用名>
|
||||
|
||||
# 查看日志
|
||||
./docker-logs.sh <应用名>
|
||||
|
||||
# 备份配置
|
||||
./docker-backup.sh
|
||||
```
|
||||
|
||||
### 服务器特定命令
|
||||
```bash
|
||||
# macmini上的应用
|
||||
ssh macmini "cd /Users/weishen/docker/<应用名> && docker compose ps"
|
||||
|
||||
# ubuntu1/ubuntu2上的应用
|
||||
ssh ubuntu1 "cd /home/shenwei/docker/<应用名> && docker compose ps"
|
||||
ssh ubuntu2 "cd /home/shenwei/docker/<应用名> && docker compose ps"
|
||||
|
||||
# NAS上的应用
|
||||
ssh NAS "cd /volumn1/docker/<应用名> && docker compose ps"
|
||||
```
|
||||
|
||||
## 🛡️ 安全配置
|
||||
|
||||
### 访问控制
|
||||
- **SSH密钥认证**: 所有服务器使用SSH密钥登录
|
||||
- **防火墙规则**: 仅开放必要端口
|
||||
- **网络隔离**: 应用间网络隔离配置
|
||||
- **定期更新**: 通过watchtower自动更新容器
|
||||
|
||||
### 备份策略
|
||||
- **配置备份**: 每天备份docker-compose配置到NAS
|
||||
- **数据备份**: 关键数据定期备份
|
||||
- **版本控制**: 配置变更记录在Git中
|
||||
|
||||
## 📈 监控指标
|
||||
|
||||
### 运行状态监控
|
||||
- ✅ 所有23个应用运行正常
|
||||
- ✅ 端口访问正常
|
||||
- ✅ 资源使用在正常范围
|
||||
- ✅ 日志无严重错误
|
||||
|
||||
### 性能指标
|
||||
- **CPU使用率**: < 70% (所有服务器)
|
||||
- **内存使用率**: < 80% (所有服务器)
|
||||
- **磁盘空间**: > 20% 可用 (所有服务器)
|
||||
- **网络流量**: 正常范围
|
||||
|
||||
## 🔧 维护计划
|
||||
|
||||
### 日常维护
|
||||
- [ ] 检查所有容器运行状态
|
||||
- [ ] 查看错误日志
|
||||
- [ ] 备份关键配置
|
||||
- [ ] 更新安全补丁
|
||||
|
||||
### 每周维护
|
||||
- [ ] 清理无用镜像和容器
|
||||
- [ ] 检查存储空间
|
||||
- [ ] 测试备份恢复
|
||||
- [ ] 更新文档
|
||||
|
||||
### 每月维护
|
||||
- [ ] 安全审计
|
||||
- [ ] 性能优化
|
||||
- [ ] 架构评估
|
||||
- [ ] 灾难恢复测试
|
||||
|
||||
## 🚨 故障处理
|
||||
|
||||
### 常见问题
|
||||
1. **容器停止运行**
|
||||
```bash
|
||||
# 查看日志
|
||||
docker logs <容器名>
|
||||
|
||||
# 重启容器
|
||||
docker restart <容器名>
|
||||
|
||||
# 重新部署
|
||||
cd <应用目录> && docker compose up -d
|
||||
```
|
||||
|
||||
2. **端口冲突**
|
||||
```bash
|
||||
# 检查端口占用
|
||||
netstat -tlnp | grep <端口号>
|
||||
|
||||
# 修改docker-compose.yml中的端口映射
|
||||
```
|
||||
|
||||
3. **资源不足**
|
||||
```bash
|
||||
# 查看资源使用
|
||||
docker stats
|
||||
|
||||
# 清理资源
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
## 📝 更新记录
|
||||
|
||||
### 2026-03-13
|
||||
- ✅ 完成所有服务器Docker应用清单
|
||||
- ✅ 创建统一管理脚本
|
||||
- ✅ 更新监控配置
|
||||
- ✅ 完善文档
|
||||
|
||||
### 2026-03-12
|
||||
- ✅ 初始系统设计
|
||||
- ✅ 基础架构搭建
|
||||
- ✅ 配置管理工具创建
|
||||
|
||||
## 🔮 未来计划
|
||||
|
||||
### 短期计划 (1个月内)
|
||||
- [ ] 实现自动化部署流水线
|
||||
- [ ] 完善监控告警系统
|
||||
- [ ] 创建灾难恢复方案
|
||||
- [ ] 优化性能配置
|
||||
|
||||
### 中期计划 (3个月内)
|
||||
- [ ] 实现CI/CD集成
|
||||
- [ ] 扩展多环境部署
|
||||
- [ ] 实施安全加固
|
||||
- [ ] 创建用户管理界面
|
||||
|
||||
### 长期计划 (6个月内)
|
||||
- [ ] 实现多云部署
|
||||
- [ ] 构建自愈系统
|
||||
- [ ] 开发管理API
|
||||
- [ ] 创建社区版本
|
||||
|
||||
---
|
||||
|
||||
**报告生成**: 星曜 (OpenClaw助手)
|
||||
**最后更新**: 2026-03-13 23:45 GMT+8
|
||||
**状态**: ✅ 系统运行正常
|
||||
@@ -1,316 +1,316 @@
|
||||
# Docker应用配置管理
|
||||
# 管理所有服务器上的Docker应用
|
||||
|
||||
# 服务器列表
|
||||
servers:
|
||||
- name: "macmini"
|
||||
hostname: "macmini"
|
||||
description: "Mac Mini M4 - 主控制节点"
|
||||
docker_root: "/Users/weishen/docker"
|
||||
|
||||
- name: "ubuntu1"
|
||||
hostname: "ubuntu1"
|
||||
description: "Ubuntu服务器1 - 应用服务器"
|
||||
docker_root: "/home/shenwei/docker"
|
||||
|
||||
- name: "ubuntu2"
|
||||
hostname: "ubuntu2"
|
||||
description: "Ubuntu服务器2 - 监控服务器"
|
||||
docker_root: "/home/shenwei/docker"
|
||||
|
||||
- name: "NAS"
|
||||
hostname: "NAS"
|
||||
description: "NAS服务器 - 媒体和存储"
|
||||
docker_root: "/volume1/docker"
|
||||
|
||||
# Docker应用列表
|
||||
applications:
|
||||
# macmini服务器上的应用
|
||||
- name: "vaultwarden"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/vaultwarden"
|
||||
description: "密码管理器"
|
||||
status: "active"
|
||||
category: "security"
|
||||
ports: ["8080:80"]
|
||||
|
||||
- name: "portainer-mac"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/portainer"
|
||||
description: "Docker容器管理"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["9000:9000"]
|
||||
|
||||
- name: "n8n"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/n8n"
|
||||
description: "工作流自动化"
|
||||
status: "active"
|
||||
category: "automation"
|
||||
ports: ["5678:5678"]
|
||||
|
||||
- name: "it-tools"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/it-tools"
|
||||
description: "开发者工具集合 (UUID, Hash, QR Code等)"
|
||||
status: "active"
|
||||
category: "development"
|
||||
ports: ["8080:80"]
|
||||
|
||||
- name: "drawio"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/drawio"
|
||||
description: "在线 diagramming 工具"
|
||||
status: "active"
|
||||
category: "development"
|
||||
ports: ["8085:8080"]
|
||||
|
||||
# ubuntu1服务器上的应用
|
||||
- name: "portainer-ubuntu1"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/portainer"
|
||||
description: "Docker容器管理"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["9000:9000"]
|
||||
|
||||
- name: "nginx-proxy-manager"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/nginx-proxy-manager"
|
||||
description: "反向代理管理"
|
||||
status: "active"
|
||||
category: "networking"
|
||||
ports: ["80:80", "443:443", "81:81"]
|
||||
|
||||
- name: "mysql"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/mysql"
|
||||
description: "MySQL数据库"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["3306:3306"]
|
||||
|
||||
- name: "redis"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/redis"
|
||||
description: "Redis缓存"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["6379:6379"]
|
||||
|
||||
- name: "mongodb"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/mongodb"
|
||||
description: "MongoDB数据库"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["27017:27017"]
|
||||
|
||||
- name: "elasticsearch"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/elasticsearch"
|
||||
description: "搜索引擎"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["9200:9200", "9300:9300"]
|
||||
|
||||
# ubuntu2服务器上的应用
|
||||
- name: "portainer-ubuntu2"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/portainer"
|
||||
description: "Docker容器管理"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["9000:9000"]
|
||||
|
||||
- name: "prometheus"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/prometheus"
|
||||
description: "监控系统"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9090:9090"]
|
||||
|
||||
- name: "grafana"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/grafana"
|
||||
description: "数据可视化"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["3000:3000"]
|
||||
|
||||
- name: "alertmanager"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/alertmanager"
|
||||
description: "告警管理"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9093:9093"]
|
||||
|
||||
- name: "node-exporter"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/node-exporter"
|
||||
description: "节点监控"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9100:9100"]
|
||||
|
||||
- name: "cadvisor"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/cadvisor"
|
||||
description: "容器监控"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["8080:8080"]
|
||||
|
||||
# NAS服务器上的应用
|
||||
- name: "jellyfin"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/jellyfin"
|
||||
description: "媒体服务器"
|
||||
status: "active"
|
||||
category: "media"
|
||||
ports: ["8096:8096", "7359:7359/udp"]
|
||||
|
||||
- name: "navidrome"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/navidrome"
|
||||
description: "音乐服务器"
|
||||
status: "active"
|
||||
category: "media"
|
||||
ports: ["4533:4533"]
|
||||
|
||||
- name: "calibre-web"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/calibre-web"
|
||||
description: "电子书管理"
|
||||
status: "active"
|
||||
category: "media"
|
||||
ports: ["8083:8083"]
|
||||
|
||||
- name: "zipline"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/zipline-stack"
|
||||
description: "文件分享服务"
|
||||
status: "active"
|
||||
category: "storage"
|
||||
ports: ["3333:3000"]
|
||||
|
||||
- name: "minio"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/zipline-stack"
|
||||
description: "对象存储"
|
||||
status: "active"
|
||||
category: "storage"
|
||||
ports: ["9000:9000", "9001:9001"]
|
||||
|
||||
- name: "vaultwarden-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/vaultwarden"
|
||||
description: "密码管理器(NAS版)"
|
||||
status: "active"
|
||||
category: "security"
|
||||
ports: ["3012:3012", "5151:80"]
|
||||
|
||||
- name: "portainer-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/portainer"
|
||||
description: "Docker容器管理(NAS)"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["8000:8000", "9443:9443"]
|
||||
|
||||
- name: "prometheus-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/prometheus"
|
||||
description: "监控系统(NAS)"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9090:9090"]
|
||||
|
||||
- name: "alertmanager-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/alertmanager"
|
||||
description: "告警管理(NAS)"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9093:9093"]
|
||||
|
||||
- name: "node-exporter-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/node-exporter"
|
||||
description: "节点监控(NAS)"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
|
||||
- name: "v2raya"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/v2raya"
|
||||
description: "网络代理工具"
|
||||
status: "active"
|
||||
category: "networking"
|
||||
|
||||
- name: "zipline-postgres"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/zipline-stack"
|
||||
description: "Zipline数据库"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["5432:5432"]
|
||||
|
||||
# 以下应用在docker ps中未发现,但端口检查显示在运行或配置存在
|
||||
- name: "transmission"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/transmission"
|
||||
description: "BT下载客户端"
|
||||
status: "unknown"
|
||||
category: "download"
|
||||
ports: ["9091:9091", "51413:51413"]
|
||||
|
||||
categories:
|
||||
monitoring:
|
||||
count: 8
|
||||
description: "监控和告警应用"
|
||||
|
||||
database:
|
||||
count: 6
|
||||
description: "数据库和存储应用"
|
||||
|
||||
management:
|
||||
count: 4
|
||||
description: "管理和运维工具"
|
||||
|
||||
automation:
|
||||
count: 2
|
||||
description: "自动化工具"
|
||||
|
||||
security:
|
||||
count: 3
|
||||
description: "安全和访问控制"
|
||||
|
||||
media:
|
||||
count: 4
|
||||
description: "媒体服务"
|
||||
|
||||
download:
|
||||
count: 3
|
||||
description: "下载管理"
|
||||
|
||||
networking:
|
||||
count: 3
|
||||
description: "网络和代理"
|
||||
|
||||
storage:
|
||||
count: 4
|
||||
description: "存储服务"
|
||||
|
||||
# 统计信息
|
||||
statistics:
|
||||
total_servers: 4
|
||||
total_applications: 35
|
||||
active_applications: 29
|
||||
stopped_applications: 4
|
||||
unknown_status: 2
|
||||
total_ports: 48
|
||||
last_updated: "2026-03-14 02:45 GMT+8"
|
||||
# Docker应用配置管理
|
||||
# 管理所有服务器上的Docker应用
|
||||
|
||||
# 服务器列表
|
||||
servers:
|
||||
- name: "macmini"
|
||||
hostname: "macmini"
|
||||
description: "Mac Mini M4 - 主控制节点"
|
||||
docker_root: "/Users/weishen/docker"
|
||||
|
||||
- name: "ubuntu1"
|
||||
hostname: "ubuntu1"
|
||||
description: "Ubuntu服务器1 - 应用服务器"
|
||||
docker_root: "/home/shenwei/docker"
|
||||
|
||||
- name: "ubuntu2"
|
||||
hostname: "ubuntu2"
|
||||
description: "Ubuntu服务器2 - 监控服务器"
|
||||
docker_root: "/home/shenwei/docker"
|
||||
|
||||
- name: "NAS"
|
||||
hostname: "NAS"
|
||||
description: "NAS服务器 - 媒体和存储"
|
||||
docker_root: "/volume1/docker"
|
||||
|
||||
# Docker应用列表
|
||||
applications:
|
||||
# macmini服务器上的应用
|
||||
- name: "vaultwarden"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/vaultwarden"
|
||||
description: "密码管理器"
|
||||
status: "active"
|
||||
category: "security"
|
||||
ports: ["8080:80"]
|
||||
|
||||
- name: "portainer-mac"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/portainer"
|
||||
description: "Docker容器管理"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["9000:9000"]
|
||||
|
||||
- name: "n8n"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/n8n"
|
||||
description: "工作流自动化"
|
||||
status: "active"
|
||||
category: "automation"
|
||||
ports: ["5678:5678"]
|
||||
|
||||
- name: "it-tools"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/it-tools"
|
||||
description: "开发者工具集合 (UUID, Hash, QR Code等)"
|
||||
status: "active"
|
||||
category: "development"
|
||||
ports: ["8080:80"]
|
||||
|
||||
- name: "drawio"
|
||||
server: "macmini"
|
||||
directory: "/Users/weishen/docker/drawio"
|
||||
description: "在线 diagramming 工具"
|
||||
status: "active"
|
||||
category: "development"
|
||||
ports: ["8085:8080"]
|
||||
|
||||
# ubuntu1服务器上的应用
|
||||
- name: "portainer-ubuntu1"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/portainer"
|
||||
description: "Docker容器管理"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["9000:9000"]
|
||||
|
||||
- name: "nginx-proxy-manager"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/nginx-proxy-manager"
|
||||
description: "反向代理管理"
|
||||
status: "active"
|
||||
category: "networking"
|
||||
ports: ["80:80", "443:443", "81:81"]
|
||||
|
||||
- name: "mysql"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/mysql"
|
||||
description: "MySQL数据库"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["3306:3306"]
|
||||
|
||||
- name: "redis"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/redis"
|
||||
description: "Redis缓存"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["6379:6379"]
|
||||
|
||||
- name: "mongodb"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/mongodb"
|
||||
description: "MongoDB数据库"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["27017:27017"]
|
||||
|
||||
- name: "elasticsearch"
|
||||
server: "ubuntu1"
|
||||
directory: "/home/shenwei/docker/elasticsearch"
|
||||
description: "搜索引擎"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["9200:9200", "9300:9300"]
|
||||
|
||||
# ubuntu2服务器上的应用
|
||||
- name: "portainer-ubuntu2"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/portainer"
|
||||
description: "Docker容器管理"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["9000:9000"]
|
||||
|
||||
- name: "prometheus"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/prometheus"
|
||||
description: "监控系统"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9090:9090"]
|
||||
|
||||
- name: "grafana"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/grafana"
|
||||
description: "数据可视化"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["3000:3000"]
|
||||
|
||||
- name: "alertmanager"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/alertmanager"
|
||||
description: "告警管理"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9093:9093"]
|
||||
|
||||
- name: "node-exporter"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/node-exporter"
|
||||
description: "节点监控"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9100:9100"]
|
||||
|
||||
- name: "cadvisor"
|
||||
server: "ubuntu2"
|
||||
directory: "/home/shenwei/docker/cadvisor"
|
||||
description: "容器监控"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["8080:8080"]
|
||||
|
||||
# NAS服务器上的应用
|
||||
- name: "jellyfin"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/jellyfin"
|
||||
description: "媒体服务器"
|
||||
status: "active"
|
||||
category: "media"
|
||||
ports: ["8096:8096", "7359:7359/udp"]
|
||||
|
||||
- name: "navidrome"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/navidrome"
|
||||
description: "音乐服务器"
|
||||
status: "active"
|
||||
category: "media"
|
||||
ports: ["4533:4533"]
|
||||
|
||||
- name: "calibre-web"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/calibre-web"
|
||||
description: "电子书管理"
|
||||
status: "active"
|
||||
category: "media"
|
||||
ports: ["8083:8083"]
|
||||
|
||||
- name: "zipline"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/zipline-stack"
|
||||
description: "文件分享服务"
|
||||
status: "active"
|
||||
category: "storage"
|
||||
ports: ["3333:3000"]
|
||||
|
||||
- name: "minio"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/zipline-stack"
|
||||
description: "对象存储"
|
||||
status: "active"
|
||||
category: "storage"
|
||||
ports: ["9000:9000", "9001:9001"]
|
||||
|
||||
- name: "vaultwarden-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/vaultwarden"
|
||||
description: "密码管理器(NAS版)"
|
||||
status: "active"
|
||||
category: "security"
|
||||
ports: ["3012:3012", "5151:80"]
|
||||
|
||||
- name: "portainer-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/portainer"
|
||||
description: "Docker容器管理(NAS)"
|
||||
status: "active"
|
||||
category: "management"
|
||||
ports: ["8000:8000", "9443:9443"]
|
||||
|
||||
- name: "prometheus-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/prometheus"
|
||||
description: "监控系统(NAS)"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9090:9090"]
|
||||
|
||||
- name: "alertmanager-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/alertmanager"
|
||||
description: "告警管理(NAS)"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
ports: ["9093:9093"]
|
||||
|
||||
- name: "node-exporter-nas"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/node-exporter"
|
||||
description: "节点监控(NAS)"
|
||||
status: "active"
|
||||
category: "monitoring"
|
||||
|
||||
- name: "v2raya"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/v2raya"
|
||||
description: "网络代理工具"
|
||||
status: "active"
|
||||
category: "networking"
|
||||
|
||||
- name: "zipline-postgres"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/zipline-stack"
|
||||
description: "Zipline数据库"
|
||||
status: "active"
|
||||
category: "database"
|
||||
ports: ["5432:5432"]
|
||||
|
||||
# 以下应用在docker ps中未发现,但端口检查显示在运行或配置存在
|
||||
- name: "transmission"
|
||||
server: "NAS"
|
||||
directory: "/volume1/docker/transmission"
|
||||
description: "BT下载客户端"
|
||||
status: "unknown"
|
||||
category: "download"
|
||||
ports: ["9091:9091", "51413:51413"]
|
||||
|
||||
categories:
|
||||
monitoring:
|
||||
count: 8
|
||||
description: "监控和告警应用"
|
||||
|
||||
database:
|
||||
count: 6
|
||||
description: "数据库和存储应用"
|
||||
|
||||
management:
|
||||
count: 4
|
||||
description: "管理和运维工具"
|
||||
|
||||
automation:
|
||||
count: 2
|
||||
description: "自动化工具"
|
||||
|
||||
security:
|
||||
count: 3
|
||||
description: "安全和访问控制"
|
||||
|
||||
media:
|
||||
count: 4
|
||||
description: "媒体服务"
|
||||
|
||||
download:
|
||||
count: 3
|
||||
description: "下载管理"
|
||||
|
||||
networking:
|
||||
count: 3
|
||||
description: "网络和代理"
|
||||
|
||||
storage:
|
||||
count: 4
|
||||
description: "存储服务"
|
||||
|
||||
# 统计信息
|
||||
statistics:
|
||||
total_servers: 4
|
||||
total_applications: 35
|
||||
active_applications: 29
|
||||
stopped_applications: 4
|
||||
unknown_status: 2
|
||||
total_ports: 48
|
||||
last_updated: "2026-03-14 02:45 GMT+8"
|
||||
|
||||
@@ -1,167 +1,167 @@
|
||||
# Docker应用映射配置
|
||||
# 自动从服务器发现的应用列表
|
||||
|
||||
apps:
|
||||
portainer:
|
||||
path: /home/shenwei/Docker/portainer
|
||||
server: ubuntu1
|
||||
description: Docker容器管理界面
|
||||
discovered: 2026-03-13
|
||||
|
||||
rsshub:
|
||||
path: /home/shenwei/Docker/rsshub
|
||||
server: ubuntu1
|
||||
description: RSS生成器
|
||||
discovered: 2026-03-13
|
||||
|
||||
it-tools:
|
||||
path: /home/shenwei/Docker/it-tools
|
||||
server: ubuntu1
|
||||
description: 开发者工具集合
|
||||
discovered: 2026-03-13
|
||||
|
||||
superset:
|
||||
path: /home/shenwei/Docker/superset
|
||||
server: ubuntu1
|
||||
description: 数据可视化平台
|
||||
discovered: 2026-03-13
|
||||
|
||||
smart-trip-quote:
|
||||
path: /home/shenwei/Docker/smart-trip-quote
|
||||
server: ubuntu1
|
||||
description: 智能旅行报价系统
|
||||
discovered: 2026-03-13
|
||||
|
||||
transmission:
|
||||
path: /home/shenwei/Docker/transmission
|
||||
server: ubuntu1
|
||||
description: BT下载客户端
|
||||
discovered: 2026-03-13
|
||||
|
||||
homarr:
|
||||
path: /home/shenwei/Docker/homarr
|
||||
server: ubuntu1
|
||||
description: 家庭仪表板
|
||||
discovered: 2026-03-13
|
||||
|
||||
tiktok_pm:
|
||||
path: /home/shenwei/Docker/tiktok_pm
|
||||
server: ubuntu1
|
||||
description: TikTok项目管理工具
|
||||
discovered: 2026-03-13
|
||||
|
||||
n8n:
|
||||
path: /home/shenwei/Docker/n8n
|
||||
server: ubuntu1
|
||||
description: 工作流自动化平台
|
||||
discovered: 2026-03-13
|
||||
|
||||
ecommerce-crawler:
|
||||
path: /home/shenwei/Docker/ecommerce-crawler
|
||||
server: ubuntu1
|
||||
description: 电商数据爬虫
|
||||
discovered: 2026-03-13
|
||||
|
||||
# ubuntu2 上的应用
|
||||
cloudflared:
|
||||
path: /home/shenwei/docker/cloudflared
|
||||
server: ubuntu2
|
||||
description: Cloudflare隧道客户端
|
||||
discovered: 2026-03-13
|
||||
|
||||
uptime-kuma:
|
||||
path: /home/shenwei/docker/uptime-kuma
|
||||
server: ubuntu2
|
||||
description: 网站监控工具
|
||||
discovered: 2026-03-13
|
||||
|
||||
watchtower:
|
||||
path: /home/shenwei/docker/watchtower
|
||||
server: ubuntu2
|
||||
description: 自动更新Docker容器
|
||||
discovered: 2026-03-13
|
||||
|
||||
# NAS 上的应用
|
||||
navidrome:
|
||||
path: /volume1/docker/navidrome
|
||||
server: nas
|
||||
description: 音乐流媒体服务器
|
||||
discovered: 2026-03-13
|
||||
|
||||
portainer:
|
||||
path: /volume1/docker/portainer
|
||||
server: nas
|
||||
description: Docker容器管理界面
|
||||
discovered: 2026-03-13
|
||||
|
||||
mysql80:
|
||||
path: /volume1/docker/mysql80
|
||||
server: nas
|
||||
description: MySQL 8.0数据库
|
||||
discovered: 2026-03-13
|
||||
|
||||
# Mac Mini 上的应用
|
||||
portainer:
|
||||
path: /Users/weishen/docker/portainer
|
||||
server: macmini
|
||||
description: Docker容器管理界面
|
||||
discovered: 2026-03-13
|
||||
status: active
|
||||
|
||||
n8n:
|
||||
path: /Users/weishen/docker/n8n
|
||||
server: macmini
|
||||
description: 工作流自动化平台
|
||||
discovered: 2026-03-13
|
||||
status: active
|
||||
|
||||
vaultwarden:
|
||||
path: /Users/weishen/docker/vaultwarden
|
||||
server: macmini
|
||||
description: Bitwarden密码管理器自托管版
|
||||
discovered: 2026-03-13
|
||||
status: active
|
||||
|
||||
# 服务器配置
|
||||
servers:
|
||||
macmini:
|
||||
hostname: macmini
|
||||
user: weishen
|
||||
role: control_center
|
||||
docker_apps_path: /Users/weishen/docker/
|
||||
apps_count: 3
|
||||
os: macOS
|
||||
architecture: arm64
|
||||
discovered: 2026-03-13
|
||||
notes: 控制中心,通过SSH统一管理
|
||||
|
||||
ubuntu1:
|
||||
hostname: ubuntu1
|
||||
user: shenwei
|
||||
docker_apps_path: /home/shenwei/Docker/
|
||||
apps_count: 10
|
||||
discovered: 2026-03-13
|
||||
|
||||
ubuntu2:
|
||||
hostname: ubuntu2
|
||||
user: shenwei
|
||||
docker_apps_path: /home/shenwei/docker/
|
||||
apps_count: 3
|
||||
discovered: 2026-03-13
|
||||
|
||||
nas:
|
||||
hostname: nas
|
||||
user: shenwei
|
||||
role: storage_and_compute
|
||||
docker_apps_path: /volume1/docker/
|
||||
apps_count: 3
|
||||
discovered: 2026-03-13
|
||||
|
||||
# 最后更新时间
|
||||
last_updated: 2026-03-13T16:59:00Z
|
||||
total_apps: 19
|
||||
total_servers: 4
|
||||
notes: |
|
||||
所有服务器都通过SSH统一管理
|
||||
Mac Mini上的3个应用已发现并加入管理系统
|
||||
# Docker应用映射配置
|
||||
# 自动从服务器发现的应用列表
|
||||
|
||||
apps:
|
||||
portainer:
|
||||
path: /home/shenwei/Docker/portainer
|
||||
server: ubuntu1
|
||||
description: Docker容器管理界面
|
||||
discovered: 2026-03-13
|
||||
|
||||
rsshub:
|
||||
path: /home/shenwei/Docker/rsshub
|
||||
server: ubuntu1
|
||||
description: RSS生成器
|
||||
discovered: 2026-03-13
|
||||
|
||||
it-tools:
|
||||
path: /home/shenwei/Docker/it-tools
|
||||
server: ubuntu1
|
||||
description: 开发者工具集合
|
||||
discovered: 2026-03-13
|
||||
|
||||
superset:
|
||||
path: /home/shenwei/Docker/superset
|
||||
server: ubuntu1
|
||||
description: 数据可视化平台
|
||||
discovered: 2026-03-13
|
||||
|
||||
smart-trip-quote:
|
||||
path: /home/shenwei/Docker/smart-trip-quote
|
||||
server: ubuntu1
|
||||
description: 智能旅行报价系统
|
||||
discovered: 2026-03-13
|
||||
|
||||
transmission:
|
||||
path: /home/shenwei/Docker/transmission
|
||||
server: ubuntu1
|
||||
description: BT下载客户端
|
||||
discovered: 2026-03-13
|
||||
|
||||
homarr:
|
||||
path: /home/shenwei/Docker/homarr
|
||||
server: ubuntu1
|
||||
description: 家庭仪表板
|
||||
discovered: 2026-03-13
|
||||
|
||||
tiktok_pm:
|
||||
path: /home/shenwei/Docker/tiktok_pm
|
||||
server: ubuntu1
|
||||
description: TikTok项目管理工具
|
||||
discovered: 2026-03-13
|
||||
|
||||
n8n:
|
||||
path: /home/shenwei/Docker/n8n
|
||||
server: ubuntu1
|
||||
description: 工作流自动化平台
|
||||
discovered: 2026-03-13
|
||||
|
||||
ecommerce-crawler:
|
||||
path: /home/shenwei/Docker/ecommerce-crawler
|
||||
server: ubuntu1
|
||||
description: 电商数据爬虫
|
||||
discovered: 2026-03-13
|
||||
|
||||
# ubuntu2 上的应用
|
||||
cloudflared:
|
||||
path: /home/shenwei/docker/cloudflared
|
||||
server: ubuntu2
|
||||
description: Cloudflare隧道客户端
|
||||
discovered: 2026-03-13
|
||||
|
||||
uptime-kuma:
|
||||
path: /home/shenwei/docker/uptime-kuma
|
||||
server: ubuntu2
|
||||
description: 网站监控工具
|
||||
discovered: 2026-03-13
|
||||
|
||||
watchtower:
|
||||
path: /home/shenwei/docker/watchtower
|
||||
server: ubuntu2
|
||||
description: 自动更新Docker容器
|
||||
discovered: 2026-03-13
|
||||
|
||||
# NAS 上的应用
|
||||
navidrome:
|
||||
path: /volume1/docker/navidrome
|
||||
server: nas
|
||||
description: 音乐流媒体服务器
|
||||
discovered: 2026-03-13
|
||||
|
||||
portainer:
|
||||
path: /volume1/docker/portainer
|
||||
server: nas
|
||||
description: Docker容器管理界面
|
||||
discovered: 2026-03-13
|
||||
|
||||
mysql80:
|
||||
path: /volume1/docker/mysql80
|
||||
server: nas
|
||||
description: MySQL 8.0数据库
|
||||
discovered: 2026-03-13
|
||||
|
||||
# Mac Mini 上的应用
|
||||
portainer:
|
||||
path: /Users/weishen/docker/portainer
|
||||
server: macmini
|
||||
description: Docker容器管理界面
|
||||
discovered: 2026-03-13
|
||||
status: active
|
||||
|
||||
n8n:
|
||||
path: /Users/weishen/docker/n8n
|
||||
server: macmini
|
||||
description: 工作流自动化平台
|
||||
discovered: 2026-03-13
|
||||
status: active
|
||||
|
||||
vaultwarden:
|
||||
path: /Users/weishen/docker/vaultwarden
|
||||
server: macmini
|
||||
description: Bitwarden密码管理器自托管版
|
||||
discovered: 2026-03-13
|
||||
status: active
|
||||
|
||||
# 服务器配置
|
||||
servers:
|
||||
macmini:
|
||||
hostname: macmini
|
||||
user: weishen
|
||||
role: control_center
|
||||
docker_apps_path: /Users/weishen/docker/
|
||||
apps_count: 3
|
||||
os: macOS
|
||||
architecture: arm64
|
||||
discovered: 2026-03-13
|
||||
notes: 控制中心,通过SSH统一管理
|
||||
|
||||
ubuntu1:
|
||||
hostname: ubuntu1
|
||||
user: shenwei
|
||||
docker_apps_path: /home/shenwei/Docker/
|
||||
apps_count: 10
|
||||
discovered: 2026-03-13
|
||||
|
||||
ubuntu2:
|
||||
hostname: ubuntu2
|
||||
user: shenwei
|
||||
docker_apps_path: /home/shenwei/docker/
|
||||
apps_count: 3
|
||||
discovered: 2026-03-13
|
||||
|
||||
nas:
|
||||
hostname: nas
|
||||
user: shenwei
|
||||
role: storage_and_compute
|
||||
docker_apps_path: /volume1/docker/
|
||||
apps_count: 3
|
||||
discovered: 2026-03-13
|
||||
|
||||
# 最后更新时间
|
||||
last_updated: 2026-03-13T16:59:00Z
|
||||
total_apps: 19
|
||||
total_servers: 4
|
||||
notes: |
|
||||
所有服务器都通过SSH统一管理
|
||||
Mac Mini上的3个应用已发现并加入管理系统
|
||||
注意:portainer应用在多个服务器上存在,需要指定服务器
|
||||
@@ -1,122 +1,122 @@
|
||||
---
|
||||
title: Docker自然语言指令处理器
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker自然语言指令处理器
|
||||
|
||||
## 🎯 指令格式
|
||||
你可以用自然语言告诉我想要做什么,我会解析并执行相应的命令。
|
||||
|
||||
## 📋 支持的指令类型
|
||||
|
||||
### 1. 查看配置
|
||||
- "查看ubuntu1上portainer的配置"
|
||||
- "显示ubuntu2上cloudflared的docker-compose文件"
|
||||
- "查看NAS上mysql80的当前配置"
|
||||
|
||||
### 2. 创建备份
|
||||
- "备份ubuntu1上portainer的配置"
|
||||
- "为ubuntu2上uptime-kuma创建备份"
|
||||
- "备份NAS上navidrome的配置文件"
|
||||
|
||||
### 3. 验证配置
|
||||
- "验证ubuntu1上rsshub的配置格式"
|
||||
- "检查ubuntu2上watchtower的配置是否正确"
|
||||
- "验证NAS上portainer的docker-compose文件"
|
||||
|
||||
### 4. 重启应用
|
||||
- "重启ubuntu1上的portainer"
|
||||
- "重启ubuntu2上的cloudflared"
|
||||
- "重启NAS上的mysql80"
|
||||
|
||||
### 5. 查看状态
|
||||
- "查看ubuntu1上所有应用状态"
|
||||
- "查看ubuntu2上cloudflared的运行状态"
|
||||
- "查看NAS上navidrome的日志"
|
||||
|
||||
## 🔄 我的工作流程
|
||||
|
||||
当你告诉我一个指令时,我会:
|
||||
|
||||
### 步骤1:解析指令
|
||||
- 识别服务器:ubuntu1, ubuntu2, NAS
|
||||
- 识别应用:portainer, rsshub, cloudflared等
|
||||
- 识别操作:查看、备份、验证、重启、状态
|
||||
|
||||
### 步骤2:查找配置
|
||||
从 `docker-apps.yaml` 中查找:
|
||||
- 应用路径
|
||||
- 服务器信息
|
||||
- 应用描述
|
||||
|
||||
### 步骤3:执行命令
|
||||
使用相应的工具脚本执行命令
|
||||
|
||||
### 步骤4:返回结果
|
||||
格式化显示执行结果
|
||||
|
||||
## 🚀 示例交互
|
||||
|
||||
### 示例1:查看配置
|
||||
**你**:"查看ubuntu1上portainer的配置"
|
||||
**我**:
|
||||
1. 解析:服务器=ubuntu1, 应用=portainer, 操作=查看
|
||||
2. 执行:`./docker-config-editor.sh ubuntu1 portainer show`
|
||||
3. 返回:显示docker-compose.yml内容
|
||||
|
||||
### 示例2:创建备份
|
||||
**你**:"备份ubuntu2上cloudflared的配置"
|
||||
**我**:
|
||||
1. 解析:服务器=ubuntu2, 应用=cloudflared, 操作=备份
|
||||
2. 执行:`./docker-config-editor.sh ubuntu2 cloudflared backup`
|
||||
3. 返回:备份创建成功,显示备份文件名
|
||||
|
||||
### 示例3:重启应用
|
||||
**你**:"重启NAS上的navidrome"
|
||||
**我**:
|
||||
1. 解析:服务器=NAS, 应用=navidrome, 操作=重启
|
||||
2. 执行:`./docker-config-editor.sh nas navidrome restart`
|
||||
3. 返回:重启状态和应用运行状态
|
||||
|
||||
## 📊 应用映射参考
|
||||
|
||||
### ubuntu1 (10个应用)
|
||||
- portainer, rsshub, it-tools, superset, smart-trip-quote
|
||||
- transmission, homarr, tiktok_pm, n8n, ecommerce-crawler
|
||||
|
||||
### ubuntu2 (3个应用)
|
||||
- cloudflared, uptime-kuma, watchtower
|
||||
|
||||
### NAS (3个应用)
|
||||
- navidrome, portainer, mysql80
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 同名应用处理
|
||||
portainer在两个服务器上都有:
|
||||
- ubuntu1: `/home/shenwei/Docker/portainer`
|
||||
- NAS: `/volume1/docker/portainer`
|
||||
|
||||
当你说"portainer"时,我会询问具体是哪个服务器。
|
||||
|
||||
### 路径差异
|
||||
- ubuntu1: 大写D (`/home/shenwei/Docker/`)
|
||||
- ubuntu2: 小写d (`/home/shenwei/docker/`)
|
||||
- NAS: volume路径 (`/volume1/docker/`)
|
||||
|
||||
## 🔍 故障处理
|
||||
|
||||
如果指令无法识别:
|
||||
1. 我会询问澄清
|
||||
2. 提供可用的选项
|
||||
3. 建议正确的指令格式
|
||||
|
||||
## 📝 最后更新
|
||||
- 创建时间:2026-03-13
|
||||
---
|
||||
title: Docker自然语言指令处理器
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Docker自然语言指令处理器
|
||||
|
||||
## 🎯 指令格式
|
||||
你可以用自然语言告诉我想要做什么,我会解析并执行相应的命令。
|
||||
|
||||
## 📋 支持的指令类型
|
||||
|
||||
### 1. 查看配置
|
||||
- "查看ubuntu1上portainer的配置"
|
||||
- "显示ubuntu2上cloudflared的docker-compose文件"
|
||||
- "查看NAS上mysql80的当前配置"
|
||||
|
||||
### 2. 创建备份
|
||||
- "备份ubuntu1上portainer的配置"
|
||||
- "为ubuntu2上uptime-kuma创建备份"
|
||||
- "备份NAS上navidrome的配置文件"
|
||||
|
||||
### 3. 验证配置
|
||||
- "验证ubuntu1上rsshub的配置格式"
|
||||
- "检查ubuntu2上watchtower的配置是否正确"
|
||||
- "验证NAS上portainer的docker-compose文件"
|
||||
|
||||
### 4. 重启应用
|
||||
- "重启ubuntu1上的portainer"
|
||||
- "重启ubuntu2上的cloudflared"
|
||||
- "重启NAS上的mysql80"
|
||||
|
||||
### 5. 查看状态
|
||||
- "查看ubuntu1上所有应用状态"
|
||||
- "查看ubuntu2上cloudflared的运行状态"
|
||||
- "查看NAS上navidrome的日志"
|
||||
|
||||
## 🔄 我的工作流程
|
||||
|
||||
当你告诉我一个指令时,我会:
|
||||
|
||||
### 步骤1:解析指令
|
||||
- 识别服务器:ubuntu1, ubuntu2, NAS
|
||||
- 识别应用:portainer, rsshub, cloudflared等
|
||||
- 识别操作:查看、备份、验证、重启、状态
|
||||
|
||||
### 步骤2:查找配置
|
||||
从 `docker-apps.yaml` 中查找:
|
||||
- 应用路径
|
||||
- 服务器信息
|
||||
- 应用描述
|
||||
|
||||
### 步骤3:执行命令
|
||||
使用相应的工具脚本执行命令
|
||||
|
||||
### 步骤4:返回结果
|
||||
格式化显示执行结果
|
||||
|
||||
## 🚀 示例交互
|
||||
|
||||
### 示例1:查看配置
|
||||
**你**:"查看ubuntu1上portainer的配置"
|
||||
**我**:
|
||||
1. 解析:服务器=ubuntu1, 应用=portainer, 操作=查看
|
||||
2. 执行:`./docker-config-editor.sh ubuntu1 portainer show`
|
||||
3. 返回:显示docker-compose.yml内容
|
||||
|
||||
### 示例2:创建备份
|
||||
**你**:"备份ubuntu2上cloudflared的配置"
|
||||
**我**:
|
||||
1. 解析:服务器=ubuntu2, 应用=cloudflared, 操作=备份
|
||||
2. 执行:`./docker-config-editor.sh ubuntu2 cloudflared backup`
|
||||
3. 返回:备份创建成功,显示备份文件名
|
||||
|
||||
### 示例3:重启应用
|
||||
**你**:"重启NAS上的navidrome"
|
||||
**我**:
|
||||
1. 解析:服务器=NAS, 应用=navidrome, 操作=重启
|
||||
2. 执行:`./docker-config-editor.sh nas navidrome restart`
|
||||
3. 返回:重启状态和应用运行状态
|
||||
|
||||
## 📊 应用映射参考
|
||||
|
||||
### ubuntu1 (10个应用)
|
||||
- portainer, rsshub, it-tools, superset, smart-trip-quote
|
||||
- transmission, homarr, tiktok_pm, n8n, ecommerce-crawler
|
||||
|
||||
### ubuntu2 (3个应用)
|
||||
- cloudflared, uptime-kuma, watchtower
|
||||
|
||||
### NAS (3个应用)
|
||||
- navidrome, portainer, mysql80
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 同名应用处理
|
||||
portainer在两个服务器上都有:
|
||||
- ubuntu1: `/home/shenwei/Docker/portainer`
|
||||
- NAS: `/volume1/docker/portainer`
|
||||
|
||||
当你说"portainer"时,我会询问具体是哪个服务器。
|
||||
|
||||
### 路径差异
|
||||
- ubuntu1: 大写D (`/home/shenwei/Docker/`)
|
||||
- ubuntu2: 小写d (`/home/shenwei/docker/`)
|
||||
- NAS: volume路径 (`/volume1/docker/`)
|
||||
|
||||
## 🔍 故障处理
|
||||
|
||||
如果指令无法识别:
|
||||
1. 我会询问澄清
|
||||
2. 提供可用的选项
|
||||
3. 建议正确的指令格式
|
||||
|
||||
## 📝 最后更新
|
||||
- 创建时间:2026-03-13
|
||||
- 版本:1.0.0
|
||||
@@ -1,163 +1,163 @@
|
||||
#!/bin/bash
|
||||
# Docker Compose配置编辑器
|
||||
# 用法: ./docker-config-editor.sh <服务器> <应用> <操作> [参数]
|
||||
|
||||
set -e
|
||||
|
||||
SERVER="$1"
|
||||
APP="$2"
|
||||
ACTION="$3"
|
||||
shift 3
|
||||
|
||||
# 根据服务器获取应用路径
|
||||
get_app_path() {
|
||||
local server="$1"
|
||||
local app="$2"
|
||||
|
||||
case "$server" in
|
||||
macmini)
|
||||
echo "/Users/weishen/docker/$app"
|
||||
;;
|
||||
ubuntu1)
|
||||
echo "/home/shenwei/Docker/$app"
|
||||
;;
|
||||
ubuntu2)
|
||||
echo "/home/shenwei/docker/$app"
|
||||
;;
|
||||
nas)
|
||||
echo "/volume1/docker/$app"
|
||||
;;
|
||||
*)
|
||||
echo "未知服务器: $server" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 备份docker-compose.yml文件
|
||||
backup_config() {
|
||||
local app_path="$1"
|
||||
local timestamp=$(date +%Y%m%d%H%M%S)
|
||||
|
||||
echo "📁 创建备份..."
|
||||
ssh "$SERVER" "cd '$app_path' && cp docker-compose.yml docker-compose.yml.backup.$timestamp"
|
||||
|
||||
# 清理旧备份,只保留最近5个
|
||||
ssh "$SERVER" "cd '$app_path' && ls -t docker-compose.yml.backup.* 2>/dev/null | tail -n +6 | xargs -r rm -f"
|
||||
|
||||
echo "✅ 备份创建完成: docker-compose.yml.backup.$timestamp"
|
||||
}
|
||||
|
||||
# 验证docker-compose配置格式
|
||||
validate_config() {
|
||||
local app_path="$1"
|
||||
|
||||
echo "🔍 验证配置格式..."
|
||||
if ssh "$SERVER" "cd '$app_path' && docker compose config >/dev/null 2>&1"; then
|
||||
echo "✅ 配置格式验证通过"
|
||||
return 0
|
||||
else
|
||||
echo "❌ 配置格式验证失败"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示当前配置
|
||||
show_config() {
|
||||
local app_path="$1"
|
||||
|
||||
echo "📄 当前docker-compose.yml内容:"
|
||||
echo "─────────────────────────────"
|
||||
ssh "$SERVER" "cat '$app_path/docker-compose.yml'"
|
||||
echo "─────────────────────────────"
|
||||
}
|
||||
|
||||
# 显示修改前后的差异
|
||||
show_diff() {
|
||||
local app_path="$1"
|
||||
local temp_file="$2"
|
||||
|
||||
echo "📊 修改前后差异:"
|
||||
echo "─────────────────────────────"
|
||||
# 获取原文件内容
|
||||
local original_content=$(ssh "$SERVER" "cat '$app_path/docker-compose.yml'")
|
||||
|
||||
# 使用diff比较
|
||||
diff -u <(echo "$original_content") "$temp_file" || true
|
||||
echo "─────────────────────────────"
|
||||
}
|
||||
|
||||
# 应用修改
|
||||
apply_changes() {
|
||||
local app_path="$1"
|
||||
local temp_file="$2"
|
||||
|
||||
echo "🔄 应用修改..."
|
||||
cat "$temp_file" | ssh "$SERVER" "cat > '$app_path/docker-compose.yml'"
|
||||
|
||||
if validate_config "$app_path"; then
|
||||
echo "✅ 修改已应用并验证通过"
|
||||
return 0
|
||||
else
|
||||
echo "❌ 修改后配置验证失败,已回滚"
|
||||
# 回滚到最新备份
|
||||
local latest_backup=$(ssh "$SERVER" "cd '$app_path' && ls -t docker-compose.yml.backup.* 2>/dev/null | head -1")
|
||||
if [ -n "$latest_backup" ]; then
|
||||
ssh "$SERVER" "cd '$app_path' && cp '$latest_backup' docker-compose.yml"
|
||||
echo "🔄 已回滚到备份: $latest_backup"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 重启应用
|
||||
restart_app() {
|
||||
local app_path="$1"
|
||||
|
||||
echo "🔄 重启应用..."
|
||||
ssh "$SERVER" "cd '$app_path' && docker compose down && docker compose up -d"
|
||||
|
||||
# 等待应用启动
|
||||
sleep 5
|
||||
|
||||
echo "📊 应用状态:"
|
||||
ssh "$SERVER" "cd '$app_path' && docker compose ps"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
if [ $# -lt 3 ]; then
|
||||
echo "用法: $0 <服务器> <应用> <操作> [参数]"
|
||||
echo "示例: $0 ubuntu1 portainer show"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
APP_PATH=$(get_app_path "$SERVER" "$APP")
|
||||
echo "🎯 目标: $SERVER -> $APP ($APP_PATH)"
|
||||
|
||||
case "$ACTION" in
|
||||
show)
|
||||
show_config "$APP_PATH"
|
||||
;;
|
||||
backup)
|
||||
backup_config "$APP_PATH"
|
||||
;;
|
||||
validate)
|
||||
validate_config "$APP_PATH"
|
||||
;;
|
||||
restart)
|
||||
restart_app "$APP_PATH"
|
||||
;;
|
||||
edit)
|
||||
# 编辑模式需要交互
|
||||
echo "⚠️ 编辑模式需要交互式操作,请使用其他工具"
|
||||
;;
|
||||
*)
|
||||
echo "未知操作: $ACTION"
|
||||
echo "可用操作: show, backup, validate, restart"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
#!/bin/bash
|
||||
# Docker Compose配置编辑器
|
||||
# 用法: ./docker-config-editor.sh <服务器> <应用> <操作> [参数]
|
||||
|
||||
set -e
|
||||
|
||||
SERVER="$1"
|
||||
APP="$2"
|
||||
ACTION="$3"
|
||||
shift 3
|
||||
|
||||
# 根据服务器获取应用路径
|
||||
get_app_path() {
|
||||
local server="$1"
|
||||
local app="$2"
|
||||
|
||||
case "$server" in
|
||||
macmini)
|
||||
echo "/Users/weishen/docker/$app"
|
||||
;;
|
||||
ubuntu1)
|
||||
echo "/home/shenwei/Docker/$app"
|
||||
;;
|
||||
ubuntu2)
|
||||
echo "/home/shenwei/docker/$app"
|
||||
;;
|
||||
nas)
|
||||
echo "/volume1/docker/$app"
|
||||
;;
|
||||
*)
|
||||
echo "未知服务器: $server" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 备份docker-compose.yml文件
|
||||
backup_config() {
|
||||
local app_path="$1"
|
||||
local timestamp=$(date +%Y%m%d%H%M%S)
|
||||
|
||||
echo "📁 创建备份..."
|
||||
ssh "$SERVER" "cd '$app_path' && cp docker-compose.yml docker-compose.yml.backup.$timestamp"
|
||||
|
||||
# 清理旧备份,只保留最近5个
|
||||
ssh "$SERVER" "cd '$app_path' && ls -t docker-compose.yml.backup.* 2>/dev/null | tail -n +6 | xargs -r rm -f"
|
||||
|
||||
echo "✅ 备份创建完成: docker-compose.yml.backup.$timestamp"
|
||||
}
|
||||
|
||||
# 验证docker-compose配置格式
|
||||
validate_config() {
|
||||
local app_path="$1"
|
||||
|
||||
echo "🔍 验证配置格式..."
|
||||
if ssh "$SERVER" "cd '$app_path' && docker compose config >/dev/null 2>&1"; then
|
||||
echo "✅ 配置格式验证通过"
|
||||
return 0
|
||||
else
|
||||
echo "❌ 配置格式验证失败"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示当前配置
|
||||
show_config() {
|
||||
local app_path="$1"
|
||||
|
||||
echo "📄 当前docker-compose.yml内容:"
|
||||
echo "─────────────────────────────"
|
||||
ssh "$SERVER" "cat '$app_path/docker-compose.yml'"
|
||||
echo "─────────────────────────────"
|
||||
}
|
||||
|
||||
# 显示修改前后的差异
|
||||
show_diff() {
|
||||
local app_path="$1"
|
||||
local temp_file="$2"
|
||||
|
||||
echo "📊 修改前后差异:"
|
||||
echo "─────────────────────────────"
|
||||
# 获取原文件内容
|
||||
local original_content=$(ssh "$SERVER" "cat '$app_path/docker-compose.yml'")
|
||||
|
||||
# 使用diff比较
|
||||
diff -u <(echo "$original_content") "$temp_file" || true
|
||||
echo "─────────────────────────────"
|
||||
}
|
||||
|
||||
# 应用修改
|
||||
apply_changes() {
|
||||
local app_path="$1"
|
||||
local temp_file="$2"
|
||||
|
||||
echo "🔄 应用修改..."
|
||||
cat "$temp_file" | ssh "$SERVER" "cat > '$app_path/docker-compose.yml'"
|
||||
|
||||
if validate_config "$app_path"; then
|
||||
echo "✅ 修改已应用并验证通过"
|
||||
return 0
|
||||
else
|
||||
echo "❌ 修改后配置验证失败,已回滚"
|
||||
# 回滚到最新备份
|
||||
local latest_backup=$(ssh "$SERVER" "cd '$app_path' && ls -t docker-compose.yml.backup.* 2>/dev/null | head -1")
|
||||
if [ -n "$latest_backup" ]; then
|
||||
ssh "$SERVER" "cd '$app_path' && cp '$latest_backup' docker-compose.yml"
|
||||
echo "🔄 已回滚到备份: $latest_backup"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 重启应用
|
||||
restart_app() {
|
||||
local app_path="$1"
|
||||
|
||||
echo "🔄 重启应用..."
|
||||
ssh "$SERVER" "cd '$app_path' && docker compose down && docker compose up -d"
|
||||
|
||||
# 等待应用启动
|
||||
sleep 5
|
||||
|
||||
echo "📊 应用状态:"
|
||||
ssh "$SERVER" "cd '$app_path' && docker compose ps"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
if [ $# -lt 3 ]; then
|
||||
echo "用法: $0 <服务器> <应用> <操作> [参数]"
|
||||
echo "示例: $0 ubuntu1 portainer show"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
APP_PATH=$(get_app_path "$SERVER" "$APP")
|
||||
echo "🎯 目标: $SERVER -> $APP ($APP_PATH)"
|
||||
|
||||
case "$ACTION" in
|
||||
show)
|
||||
show_config "$APP_PATH"
|
||||
;;
|
||||
backup)
|
||||
backup_config "$APP_PATH"
|
||||
;;
|
||||
validate)
|
||||
validate_config "$APP_PATH"
|
||||
;;
|
||||
restart)
|
||||
restart_app "$APP_PATH"
|
||||
;;
|
||||
edit)
|
||||
# 编辑模式需要交互
|
||||
echo "⚠️ 编辑模式需要交互式操作,请使用其他工具"
|
||||
;;
|
||||
*)
|
||||
echo "未知操作: $ACTION"
|
||||
echo "可用操作: show, backup, validate, restart"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
@@ -1,207 +1,207 @@
|
||||
---
|
||||
title: OpenClaw 完整配置文档
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# OpenClaw 完整配置文档
|
||||
|
||||
> 最后更新: 2026-03-15 20:30
|
||||
|
||||
---
|
||||
|
||||
## 1. 概览
|
||||
|
||||
- **版本**: 2026.3.13
|
||||
- **Gateway 状态**: 运行中 (pid 30771)
|
||||
- **Gateway 端口**: 18789
|
||||
- **绑定地址**: 127.0.0.1 (loopback)
|
||||
- **配置文件**: ~/.openclaw/openclaw.json
|
||||
|
||||
---
|
||||
|
||||
## 2. Agent 列表
|
||||
|
||||
| Agent ID | 名称 | Workspace | 模型 | 路由规则 |
|
||||
|----------|------|-----------|------|----------|
|
||||
| main | (默认) | ~/.openclaw/workspace | MiniMax-M2.5 | 0 (默认) |
|
||||
| xinghui | 星辉 | ~/.openclaw/workspace-agent-xinghui | MiniMax-M2.5 | 1 (telegram bot1) |
|
||||
| xingyao | 星曜 | ~/.openclaw/workspace-agent-xingyao | MiniMax-M2.5 | 1 (telegram bot2) |
|
||||
|
||||
### 2.1 路由绑定 (Bindings)
|
||||
|
||||
| Agent | 匹配条件 |
|
||||
|-------|----------|
|
||||
| xinghui | channel: telegram, accountId: bot1 |
|
||||
| xingyao | channel: telegram, accountId: bot2 |
|
||||
|
||||
---
|
||||
|
||||
## 3. Workspace 目录
|
||||
|
||||
| Workspace | 路径 | 说明 |
|
||||
|-----------|------|------|
|
||||
| main | ~/.openclaw/workspace | 默认工作空间 |
|
||||
| xinghui | ~/.openclaw/workspace-agent-xinghui | 星辉工作空间 |
|
||||
| xingyao | ~/.openclaw/workspace-agent-xingyao | 星曜工作空间 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 可用模型 (Models)
|
||||
|
||||
### 4.1 MiniMax Portal
|
||||
|
||||
| 模型 ID | 名称 | 上下文窗口 | 最大输出 | 思考模式 |
|
||||
|---------|------|-----------|---------|----------|
|
||||
| MiniMax-M2.5 | MiniMax M2.5 | 200K | 8192 | 否 |
|
||||
| MiniMax-M2.5-highspeed | MiniMax M2.5 Highspeed | 200K | 8192 | 是 |
|
||||
| MiniMax-M2.5-Lightning | MiniMax M2.5 Lightning | 200K | 8192 | 是 |
|
||||
|
||||
### 4.2 DeepSeek (自定义 Provider)
|
||||
|
||||
| 模型 ID | 名称 | 上下文窗口 | 最大输出 |
|
||||
|---------|------|-----------|---------|
|
||||
| deepseek-reasoner | deepseek-reasoner | 16K | 4096 |
|
||||
| deepseek-chat | deepseek-chat | 16K | 4096 |
|
||||
|
||||
### 4.3 默认模型配置
|
||||
|
||||
- **主模型**: minimax-portal/MiniMax-M2.5
|
||||
- **备用模型**:
|
||||
1. custom-api-deepseek-reasoner/deepseek-reasoner
|
||||
2. custom-api-deepseek-chat/deepseek-chat
|
||||
3. minimax-portal/MiniMax-M2.5-highspeed
|
||||
4. minimax-portal/MiniMax-M2.5-Lightning
|
||||
|
||||
---
|
||||
|
||||
## 5. 频道 (Channels)
|
||||
|
||||
### 5.1 Telegram 配置
|
||||
|
||||
| Account | Bot Token | DM策略 | 群组策略 | 状态 |
|
||||
|---------|-----------|--------|----------|------|
|
||||
| default | 8414432613:AAG9hvKfILGSsbc1EMEZW1QVym9Quc5aHWk | pairing | open | 已配置 |
|
||||
| bot1 | 8709222939:AAEfvZrvvU5vZFsmacsR5nmpkJ2Jb5JgfRg | pairing | allowlist | 已配置 |
|
||||
| bot2 | 8414432613:AAG9hvKfILGSsbc1EMEZW1QVym9Quc5aHWk | pairing | allowlist | 已配置 |
|
||||
|
||||
### 5.2 全局 Telegram 配置
|
||||
|
||||
- **全局代理**: http://127.0.0.1:10808 (科学上网)
|
||||
- **群组策略**: allowlist (⚠️ 需配置 groupAllowFrom)
|
||||
- **流式传输**: partial
|
||||
|
||||
### 5.3 待修复问题
|
||||
|
||||
⚠️ **警告**: 以下 account 的 groupPolicy 是 allowlist,但 groupAllowFrom 为空,会导致群消息被静默丢弃:
|
||||
- channels.telegram (全局)
|
||||
- channels.telegram.accounts.bot1
|
||||
- channels.telegram.accounts.bot2
|
||||
|
||||
**解决方案**: 添加 sender IDs 到 groupAllowFrom,或将 groupPolicy 改为 "open"
|
||||
|
||||
---
|
||||
|
||||
## 6. 已安装技能 (Skills)
|
||||
|
||||
| 技能名称 | 路径 | 状态 |
|
||||
|----------|------|------|
|
||||
| accli | ~/.openclaw/skills/accli | ✅ 已安装 |
|
||||
| apple-notes | ~/.openclaw/skills/apple-notes | ✅ 已安装 |
|
||||
| apple-reminders | ~/.openclaw/skills/apple-reminders | ✅ 已安装 |
|
||||
| gog | ~/.openclaw/skills/gog | ✅ 已安装 |
|
||||
| ontology | ~/.openclaw/skills/ontology | ✅ 已安装 |
|
||||
| self-improving-agent | ~/.openclaw/skills/self-improving-agent | ✅ 已安装 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 认证 (Auth)
|
||||
|
||||
### 7.1 Auth Providers
|
||||
|
||||
| Provider | 模式 | 说明 |
|
||||
|----------|------|------|
|
||||
| minimax-portal | oauth | MiniMax OAuth 认证 |
|
||||
|
||||
---
|
||||
|
||||
## 8. Gateway 配置
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| 端口 | 18789 |
|
||||
| 模式 | local |
|
||||
| 绑定 | loopback (127.0.0.1) |
|
||||
| 认证模式 | token |
|
||||
| Tailscale | off |
|
||||
|
||||
### 8.1 禁止命令 (Deny Commands)
|
||||
|
||||
以下命令在节点上被禁止执行:
|
||||
- camera.snap
|
||||
- camera.clip
|
||||
- screen.record
|
||||
- contacts.add
|
||||
- calendar.add
|
||||
- reminders.add
|
||||
- sms.send
|
||||
|
||||
---
|
||||
|
||||
## 9. 插件 (Plugins)
|
||||
|
||||
| 插件 | 状态 |
|
||||
|------|------|
|
||||
| telegram | ✅ 启用 |
|
||||
| minimax-portal-auth | ✅ 启用 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 文件结构
|
||||
|
||||
```
|
||||
~/.openclaw/
|
||||
├── openclaw.json # 主配置文件
|
||||
├── agents/ # Agent 目录
|
||||
│ ├── main/agent/
|
||||
│ ├── xinghui/agent/
|
||||
│ └── xingyao/agent/
|
||||
├── workspace/ # main 工作空间
|
||||
├── workspace-agent-xinghui/ # 星辉工作空间
|
||||
├── workspace-agent-xingyao/ # 星曜工作空间
|
||||
├── skills/ # 已安装技能
|
||||
├── credentials/ # 凭证存储
|
||||
├── devices/ # 设备配置
|
||||
├── cron/ # 定时任务
|
||||
├── logs/ # 日志文件
|
||||
└── telegram/ # Telegram 数据
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. 常用命令
|
||||
|
||||
```bash
|
||||
# 查看所有 Agent
|
||||
openclaw agents list
|
||||
|
||||
# 查看 Agent 绑定
|
||||
openclaw agents list --bindings
|
||||
|
||||
# 查看频道状态
|
||||
openclaw channels list
|
||||
|
||||
# 查看 Gateway 状态
|
||||
openclaw gateway status
|
||||
|
||||
# 重新启动 Gateway
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*文档生成时间: 2026-03-15 20:30*
|
||||
---
|
||||
title: OpenClaw 完整配置文档
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# OpenClaw 完整配置文档
|
||||
|
||||
> 最后更新: 2026-03-15 20:30
|
||||
|
||||
---
|
||||
|
||||
## 1. 概览
|
||||
|
||||
- **版本**: 2026.3.13
|
||||
- **Gateway 状态**: 运行中 (pid 30771)
|
||||
- **Gateway 端口**: 18789
|
||||
- **绑定地址**: 127.0.0.1 (loopback)
|
||||
- **配置文件**: ~/.openclaw/openclaw.json
|
||||
|
||||
---
|
||||
|
||||
## 2. Agent 列表
|
||||
|
||||
| Agent ID | 名称 | Workspace | 模型 | 路由规则 |
|
||||
|----------|------|-----------|------|----------|
|
||||
| main | (默认) | ~/.openclaw/workspace | MiniMax-M2.5 | 0 (默认) |
|
||||
| xinghui | 星辉 | ~/.openclaw/workspace-agent-xinghui | MiniMax-M2.5 | 1 (telegram bot1) |
|
||||
| xingyao | 星曜 | ~/.openclaw/workspace-agent-xingyao | MiniMax-M2.5 | 1 (telegram bot2) |
|
||||
|
||||
### 2.1 路由绑定 (Bindings)
|
||||
|
||||
| Agent | 匹配条件 |
|
||||
|-------|----------|
|
||||
| xinghui | channel: telegram, accountId: bot1 |
|
||||
| xingyao | channel: telegram, accountId: bot2 |
|
||||
|
||||
---
|
||||
|
||||
## 3. Workspace 目录
|
||||
|
||||
| Workspace | 路径 | 说明 |
|
||||
|-----------|------|------|
|
||||
| main | ~/.openclaw/workspace | 默认工作空间 |
|
||||
| xinghui | ~/.openclaw/workspace-agent-xinghui | 星辉工作空间 |
|
||||
| xingyao | ~/.openclaw/workspace-agent-xingyao | 星曜工作空间 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 可用模型 (Models)
|
||||
|
||||
### 4.1 MiniMax Portal
|
||||
|
||||
| 模型 ID | 名称 | 上下文窗口 | 最大输出 | 思考模式 |
|
||||
|---------|------|-----------|---------|----------|
|
||||
| MiniMax-M2.5 | MiniMax M2.5 | 200K | 8192 | 否 |
|
||||
| MiniMax-M2.5-highspeed | MiniMax M2.5 Highspeed | 200K | 8192 | 是 |
|
||||
| MiniMax-M2.5-Lightning | MiniMax M2.5 Lightning | 200K | 8192 | 是 |
|
||||
|
||||
### 4.2 DeepSeek (自定义 Provider)
|
||||
|
||||
| 模型 ID | 名称 | 上下文窗口 | 最大输出 |
|
||||
|---------|------|-----------|---------|
|
||||
| deepseek-reasoner | deepseek-reasoner | 16K | 4096 |
|
||||
| deepseek-chat | deepseek-chat | 16K | 4096 |
|
||||
|
||||
### 4.3 默认模型配置
|
||||
|
||||
- **主模型**: minimax-portal/MiniMax-M2.5
|
||||
- **备用模型**:
|
||||
1. custom-api-deepseek-reasoner/deepseek-reasoner
|
||||
2. custom-api-deepseek-chat/deepseek-chat
|
||||
3. minimax-portal/MiniMax-M2.5-highspeed
|
||||
4. minimax-portal/MiniMax-M2.5-Lightning
|
||||
|
||||
---
|
||||
|
||||
## 5. 频道 (Channels)
|
||||
|
||||
### 5.1 Telegram 配置
|
||||
|
||||
| Account | Bot Token | DM策略 | 群组策略 | 状态 |
|
||||
|---------|-----------|--------|----------|------|
|
||||
| default | 8414432613:AAG9hvKfILGSsbc1EMEZW1QVym9Quc5aHWk | pairing | open | 已配置 |
|
||||
| bot1 | 8709222939:AAEfvZrvvU5vZFsmacsR5nmpkJ2Jb5JgfRg | pairing | allowlist | 已配置 |
|
||||
| bot2 | 8414432613:AAG9hvKfILGSsbc1EMEZW1QVym9Quc5aHWk | pairing | allowlist | 已配置 |
|
||||
|
||||
### 5.2 全局 Telegram 配置
|
||||
|
||||
- **全局代理**: http://127.0.0.1:10808 (科学上网)
|
||||
- **群组策略**: allowlist (⚠️ 需配置 groupAllowFrom)
|
||||
- **流式传输**: partial
|
||||
|
||||
### 5.3 待修复问题
|
||||
|
||||
⚠️ **警告**: 以下 account 的 groupPolicy 是 allowlist,但 groupAllowFrom 为空,会导致群消息被静默丢弃:
|
||||
- channels.telegram (全局)
|
||||
- channels.telegram.accounts.bot1
|
||||
- channels.telegram.accounts.bot2
|
||||
|
||||
**解决方案**: 添加 sender IDs 到 groupAllowFrom,或将 groupPolicy 改为 "open"
|
||||
|
||||
---
|
||||
|
||||
## 6. 已安装技能 (Skills)
|
||||
|
||||
| 技能名称 | 路径 | 状态 |
|
||||
|----------|------|------|
|
||||
| accli | ~/.openclaw/skills/accli | ✅ 已安装 |
|
||||
| apple-notes | ~/.openclaw/skills/apple-notes | ✅ 已安装 |
|
||||
| apple-reminders | ~/.openclaw/skills/apple-reminders | ✅ 已安装 |
|
||||
| gog | ~/.openclaw/skills/gog | ✅ 已安装 |
|
||||
| ontology | ~/.openclaw/skills/ontology | ✅ 已安装 |
|
||||
| self-improving-agent | ~/.openclaw/skills/self-improving-agent | ✅ 已安装 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 认证 (Auth)
|
||||
|
||||
### 7.1 Auth Providers
|
||||
|
||||
| Provider | 模式 | 说明 |
|
||||
|----------|------|------|
|
||||
| minimax-portal | oauth | MiniMax OAuth 认证 |
|
||||
|
||||
---
|
||||
|
||||
## 8. Gateway 配置
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| 端口 | 18789 |
|
||||
| 模式 | local |
|
||||
| 绑定 | loopback (127.0.0.1) |
|
||||
| 认证模式 | token |
|
||||
| Tailscale | off |
|
||||
|
||||
### 8.1 禁止命令 (Deny Commands)
|
||||
|
||||
以下命令在节点上被禁止执行:
|
||||
- camera.snap
|
||||
- camera.clip
|
||||
- screen.record
|
||||
- contacts.add
|
||||
- calendar.add
|
||||
- reminders.add
|
||||
- sms.send
|
||||
|
||||
---
|
||||
|
||||
## 9. 插件 (Plugins)
|
||||
|
||||
| 插件 | 状态 |
|
||||
|------|------|
|
||||
| telegram | ✅ 启用 |
|
||||
| minimax-portal-auth | ✅ 启用 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 文件结构
|
||||
|
||||
```
|
||||
~/.openclaw/
|
||||
├── openclaw.json # 主配置文件
|
||||
├── agents/ # Agent 目录
|
||||
│ ├── main/agent/
|
||||
│ ├── xinghui/agent/
|
||||
│ └── xingyao/agent/
|
||||
├── workspace/ # main 工作空间
|
||||
├── workspace-agent-xinghui/ # 星辉工作空间
|
||||
├── workspace-agent-xingyao/ # 星曜工作空间
|
||||
├── skills/ # 已安装技能
|
||||
├── credentials/ # 凭证存储
|
||||
├── devices/ # 设备配置
|
||||
├── cron/ # 定时任务
|
||||
├── logs/ # 日志文件
|
||||
└── telegram/ # Telegram 数据
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. 常用命令
|
||||
|
||||
```bash
|
||||
# 查看所有 Agent
|
||||
openclaw agents list
|
||||
|
||||
# 查看 Agent 绑定
|
||||
openclaw agents list --bindings
|
||||
|
||||
# 查看频道状态
|
||||
openclaw channels list
|
||||
|
||||
# 查看 Gateway 状态
|
||||
openclaw gateway status
|
||||
|
||||
# 重新启动 Gateway
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*文档生成时间: 2026-03-15 20:30*
|
||||
|
||||
@@ -1,162 +1,162 @@
|
||||
---
|
||||
title: 管理系统目录结构
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# 管理系统目录结构
|
||||
|
||||
## 🏗️ 目录组织
|
||||
这个目录用于组织和管理不同类型的系统管理工具和配置。
|
||||
|
||||
## 📁 目录结构
|
||||
```
|
||||
managed-systems/
|
||||
├── README.md # 本文件
|
||||
├── docker-management/ # Docker容器管理
|
||||
│ ├── docker-apps.yaml # 应用映射配置
|
||||
│ ├── docker-config-editor.sh # 配置编辑工具
|
||||
│ ├── DOCKER_CONFIG_EDITOR_GUIDE.md # 配置编辑指南
|
||||
│ └── docker-command-processor.md # 自然语言指令处理器
|
||||
├── ssh-management/ # SSH连接管理(预留)
|
||||
├── monitoring-management/ # 监控系统管理(预留)
|
||||
└── documentation/ # 文档和指南(预留)
|
||||
```
|
||||
|
||||
## 🎯 设计理念
|
||||
|
||||
### 1. 模块化组织
|
||||
- 每个系统类型有独立的目录
|
||||
- 相关工具和配置放在一起
|
||||
- 便于扩展和维护
|
||||
|
||||
### 2. 清晰的命名
|
||||
- 目录名:`[系统类型]-management`
|
||||
- 文件名:描述性名称,易于理解
|
||||
- 扩展名:表明文件类型和用途
|
||||
|
||||
### 3. 可扩展性
|
||||
- 预留目录用于未来扩展
|
||||
- 标准化的文件结构
|
||||
- 易于添加新的管理系统
|
||||
|
||||
## 🚀 当前实现
|
||||
|
||||
### Docker管理系统
|
||||
**位置**: `docker-management/`
|
||||
|
||||
**功能**:
|
||||
1. **应用发现和映射** (`docker-apps.yaml`)
|
||||
- 记录所有服务器上的Docker应用
|
||||
- 包含路径、服务器、描述信息
|
||||
|
||||
2. **配置编辑工具** (`docker-config-editor.sh`)
|
||||
- 安全地编辑docker-compose.yml文件
|
||||
- 自动备份和验证
|
||||
- 支持查看、备份、验证、重启操作
|
||||
|
||||
3. **使用指南** (`DOCKER_CONFIG_EDITOR_GUIDE.md`)
|
||||
- 详细的工作流程说明
|
||||
- 安全编辑步骤
|
||||
- 故障排除指南
|
||||
|
||||
4. **自然语言接口** (`docker-command-processor.md`)
|
||||
- 理解自然语言指令
|
||||
- 映射到具体命令执行
|
||||
|
||||
## 🔄 工作流程
|
||||
|
||||
### Docker管理流程
|
||||
```
|
||||
1. 指令解析 → 2. 配置查找 → 3. 命令执行 → 4. 结果反馈
|
||||
```
|
||||
|
||||
### 安全编辑流程
|
||||
```
|
||||
1. 查看当前配置 → 2. 创建备份 → 3. 编辑文件 → 4. 验证格式 → 5. 重启应用
|
||||
```
|
||||
|
||||
## 📋 服务器配置
|
||||
|
||||
### 服务器路径映射
|
||||
| 服务器 | Docker路径 | 应用示例 |
|
||||
|--------|------------|----------|
|
||||
| ubuntu1 | `/home/shenwei/Docker/` | portainer, rsshub, it-tools |
|
||||
| ubuntu2 | `/home/shenwei/docker/` | cloudflared, uptime-kuma |
|
||||
| NAS | `/volume1/docker/` | navidrome, mysql80 |
|
||||
|
||||
### 应用统计
|
||||
- **总服务器**: 3台
|
||||
- **总应用**: 16个
|
||||
- **最后扫描**: 2026-03-13
|
||||
|
||||
## 🔮 未来扩展
|
||||
|
||||
### 计划中的管理系统
|
||||
1. **SSH管理系统**
|
||||
- SSH连接配置管理
|
||||
- 密钥管理和轮换
|
||||
- 连接测试和监控
|
||||
|
||||
2. **监控管理系统**
|
||||
- Prometheus配置管理
|
||||
- Grafana仪表板管理
|
||||
- 告警规则配置
|
||||
|
||||
3. **备份管理系统**
|
||||
- 备份策略配置
|
||||
- 备份计划管理
|
||||
- 恢复测试流程
|
||||
|
||||
### 通用模式
|
||||
每个管理系统遵循相似的模式:
|
||||
1. 配置发现和映射
|
||||
2. 安全操作工具
|
||||
3. 使用指南文档
|
||||
4. 自然语言接口
|
||||
|
||||
## 📝 维护指南
|
||||
|
||||
### 添加新系统
|
||||
1. 创建新目录:`[系统名]-management/`
|
||||
2. 添加配置文件、工具、文档
|
||||
3. 更新本README文件
|
||||
4. 测试功能完整性
|
||||
|
||||
### 更新现有系统
|
||||
1. 在相应目录中更新文件
|
||||
2. 更新版本和日期信息
|
||||
3. 测试向后兼容性
|
||||
4. 更新相关文档
|
||||
|
||||
### 备份策略
|
||||
- 重要配置文件定期备份
|
||||
- 工具脚本版本控制
|
||||
- 文档更新记录
|
||||
|
||||
## 🏆 最佳实践
|
||||
|
||||
### 文件命名
|
||||
- 使用小写字母和连字符
|
||||
- 描述性文件名
|
||||
- 一致的扩展名
|
||||
|
||||
### 文档标准
|
||||
- 每个目录有README文件
|
||||
- 工具脚本有使用说明
|
||||
- 配置文件有注释说明
|
||||
|
||||
### 安全考虑
|
||||
- 敏感信息不存储在配置文件中
|
||||
- 操作前备份重要文件
|
||||
- 验证操作结果
|
||||
|
||||
## 📊 版本信息
|
||||
- **创建时间**: 2026-03-13
|
||||
- **最后更新**: 2026-03-13
|
||||
- **版本**: 1.0.0
|
||||
---
|
||||
title: 管理系统目录结构
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# 管理系统目录结构
|
||||
|
||||
## 🏗️ 目录组织
|
||||
这个目录用于组织和管理不同类型的系统管理工具和配置。
|
||||
|
||||
## 📁 目录结构
|
||||
```
|
||||
managed-systems/
|
||||
├── README.md # 本文件
|
||||
├── docker-management/ # Docker容器管理
|
||||
│ ├── docker-apps.yaml # 应用映射配置
|
||||
│ ├── docker-config-editor.sh # 配置编辑工具
|
||||
│ ├── DOCKER_CONFIG_EDITOR_GUIDE.md # 配置编辑指南
|
||||
│ └── docker-command-processor.md # 自然语言指令处理器
|
||||
├── ssh-management/ # SSH连接管理(预留)
|
||||
├── monitoring-management/ # 监控系统管理(预留)
|
||||
└── documentation/ # 文档和指南(预留)
|
||||
```
|
||||
|
||||
## 🎯 设计理念
|
||||
|
||||
### 1. 模块化组织
|
||||
- 每个系统类型有独立的目录
|
||||
- 相关工具和配置放在一起
|
||||
- 便于扩展和维护
|
||||
|
||||
### 2. 清晰的命名
|
||||
- 目录名:`[系统类型]-management`
|
||||
- 文件名:描述性名称,易于理解
|
||||
- 扩展名:表明文件类型和用途
|
||||
|
||||
### 3. 可扩展性
|
||||
- 预留目录用于未来扩展
|
||||
- 标准化的文件结构
|
||||
- 易于添加新的管理系统
|
||||
|
||||
## 🚀 当前实现
|
||||
|
||||
### Docker管理系统
|
||||
**位置**: `docker-management/`
|
||||
|
||||
**功能**:
|
||||
1. **应用发现和映射** (`docker-apps.yaml`)
|
||||
- 记录所有服务器上的Docker应用
|
||||
- 包含路径、服务器、描述信息
|
||||
|
||||
2. **配置编辑工具** (`docker-config-editor.sh`)
|
||||
- 安全地编辑docker-compose.yml文件
|
||||
- 自动备份和验证
|
||||
- 支持查看、备份、验证、重启操作
|
||||
|
||||
3. **使用指南** (`DOCKER_CONFIG_EDITOR_GUIDE.md`)
|
||||
- 详细的工作流程说明
|
||||
- 安全编辑步骤
|
||||
- 故障排除指南
|
||||
|
||||
4. **自然语言接口** (`docker-command-processor.md`)
|
||||
- 理解自然语言指令
|
||||
- 映射到具体命令执行
|
||||
|
||||
## 🔄 工作流程
|
||||
|
||||
### Docker管理流程
|
||||
```
|
||||
1. 指令解析 → 2. 配置查找 → 3. 命令执行 → 4. 结果反馈
|
||||
```
|
||||
|
||||
### 安全编辑流程
|
||||
```
|
||||
1. 查看当前配置 → 2. 创建备份 → 3. 编辑文件 → 4. 验证格式 → 5. 重启应用
|
||||
```
|
||||
|
||||
## 📋 服务器配置
|
||||
|
||||
### 服务器路径映射
|
||||
| 服务器 | Docker路径 | 应用示例 |
|
||||
|--------|------------|----------|
|
||||
| ubuntu1 | `/home/shenwei/Docker/` | portainer, rsshub, it-tools |
|
||||
| ubuntu2 | `/home/shenwei/docker/` | cloudflared, uptime-kuma |
|
||||
| NAS | `/volume1/docker/` | navidrome, mysql80 |
|
||||
|
||||
### 应用统计
|
||||
- **总服务器**: 3台
|
||||
- **总应用**: 16个
|
||||
- **最后扫描**: 2026-03-13
|
||||
|
||||
## 🔮 未来扩展
|
||||
|
||||
### 计划中的管理系统
|
||||
1. **SSH管理系统**
|
||||
- SSH连接配置管理
|
||||
- 密钥管理和轮换
|
||||
- 连接测试和监控
|
||||
|
||||
2. **监控管理系统**
|
||||
- Prometheus配置管理
|
||||
- Grafana仪表板管理
|
||||
- 告警规则配置
|
||||
|
||||
3. **备份管理系统**
|
||||
- 备份策略配置
|
||||
- 备份计划管理
|
||||
- 恢复测试流程
|
||||
|
||||
### 通用模式
|
||||
每个管理系统遵循相似的模式:
|
||||
1. 配置发现和映射
|
||||
2. 安全操作工具
|
||||
3. 使用指南文档
|
||||
4. 自然语言接口
|
||||
|
||||
## 📝 维护指南
|
||||
|
||||
### 添加新系统
|
||||
1. 创建新目录:`[系统名]-management/`
|
||||
2. 添加配置文件、工具、文档
|
||||
3. 更新本README文件
|
||||
4. 测试功能完整性
|
||||
|
||||
### 更新现有系统
|
||||
1. 在相应目录中更新文件
|
||||
2. 更新版本和日期信息
|
||||
3. 测试向后兼容性
|
||||
4. 更新相关文档
|
||||
|
||||
### 备份策略
|
||||
- 重要配置文件定期备份
|
||||
- 工具脚本版本控制
|
||||
- 文档更新记录
|
||||
|
||||
## 🏆 最佳实践
|
||||
|
||||
### 文件命名
|
||||
- 使用小写字母和连字符
|
||||
- 描述性文件名
|
||||
- 一致的扩展名
|
||||
|
||||
### 文档标准
|
||||
- 每个目录有README文件
|
||||
- 工具脚本有使用说明
|
||||
- 配置文件有注释说明
|
||||
|
||||
### 安全考虑
|
||||
- 敏感信息不存储在配置文件中
|
||||
- 操作前备份重要文件
|
||||
- 验证操作结果
|
||||
|
||||
## 📊 版本信息
|
||||
- **创建时间**: 2026-03-13
|
||||
- **最后更新**: 2026-03-13
|
||||
- **版本**: 1.0.0
|
||||
- **维护者**: 星曜 (OpenClaw助手)
|
||||
@@ -1,313 +1,313 @@
|
||||
# 文件编辑最佳实践指南
|
||||
|
||||
## 📋 概述
|
||||
本文档总结了在OpenClaw环境中安全、可靠地编辑文件的最佳实践,基于今天(2026-03-13)多次编辑失败的经验教训。
|
||||
|
||||
## 🎯 核心原则
|
||||
|
||||
### 1. 安全第一
|
||||
- **备份优先**:编辑前必须备份
|
||||
- **最小修改**:只修改必要的部分
|
||||
- **可回滚**:确保可以恢复到之前状态
|
||||
|
||||
### 2. 可靠性优先
|
||||
- **验证匹配**:编辑前验证文本存在
|
||||
- **逐步操作**:小步修改,逐步验证
|
||||
- **错误处理**:准备好失败处理方案
|
||||
|
||||
### 3. 效率兼顾
|
||||
- **选择正确工具**:根据场景选择`edit`或`write`
|
||||
- **自动化重复操作**:创建脚本处理常见编辑
|
||||
- **文档化流程**:记录成功的工作流程
|
||||
|
||||
## 🛠️ 工具选择指南
|
||||
|
||||
### 何时使用 `edit` 工具
|
||||
**适用场景**:
|
||||
- 小范围、精确的文本替换
|
||||
- 配置文件中的特定值修改
|
||||
- 模板文件中的变量替换
|
||||
|
||||
**使用条件**:
|
||||
- 能100%确定匹配文本
|
||||
- 文件内容在编辑期间不会变化
|
||||
- 不需要改变文件格式
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
# 修改配置文件中的端口号
|
||||
edit config.yaml "port: 8080" "port: 9090"
|
||||
```
|
||||
|
||||
### 何时使用 `write` 工具
|
||||
**适用场景**:
|
||||
- 创建新文件
|
||||
- 完全重写文件
|
||||
- 大范围内容修改
|
||||
- 格式标准化
|
||||
|
||||
**优势**:
|
||||
- 避免匹配问题
|
||||
- 确保格式一致
|
||||
- 简单可靠
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
# 重新创建配置文件
|
||||
write config.yaml "完整的配置文件内容"
|
||||
```
|
||||
|
||||
## 📝 标准编辑流程
|
||||
|
||||
### 步骤1:准备工作
|
||||
```bash
|
||||
# 1.1 备份原文件
|
||||
cp file.md file.md.$(date +%Y%m%d_%H%M%S).backup
|
||||
|
||||
# 1.2 检查文件状态
|
||||
ls -la file.md
|
||||
file file.md # 检查文件类型
|
||||
|
||||
# 1.3 查看精确内容
|
||||
cat -A file.md | head -20 # 查看包括特殊字符
|
||||
```
|
||||
|
||||
### 步骤2:验证匹配
|
||||
```bash
|
||||
# 2.1 检查要编辑的文本是否存在
|
||||
grep -n "要匹配的文本" file.md
|
||||
|
||||
# 2.2 检查匹配次数(应该是1次)
|
||||
grep -c "要匹配的文本" file.md
|
||||
|
||||
# 2.3 查看上下文
|
||||
grep -A2 -B2 "要匹配的文本" file.md | cat -A
|
||||
```
|
||||
|
||||
### 步骤3:执行编辑
|
||||
```bash
|
||||
# 3.1 小范围编辑(推荐)
|
||||
edit file.md "精确匹配的文本" "新的文本"
|
||||
|
||||
# 3.2 或重新创建文件
|
||||
write file.md "完整的新内容"
|
||||
```
|
||||
|
||||
### 步骤4:验证结果
|
||||
```bash
|
||||
# 4.1 检查文件完整性
|
||||
ls -la file.md # 文件大小合理
|
||||
head -5 file.md # 内容开头正确
|
||||
|
||||
# 4.2 验证关键内容存在
|
||||
grep "关键内容" file.md
|
||||
|
||||
# 4.3 与备份比较
|
||||
diff file.md.backup file.md | head -20
|
||||
```
|
||||
|
||||
### 步骤5:清理和记录
|
||||
```bash
|
||||
# 5.1 记录编辑操作
|
||||
echo "$(date): 编辑file.md - 修改了X处" >> edit-log.md
|
||||
|
||||
# 5.2 清理临时备份(可选)---
|
||||
title: 文件编辑最佳实践指南
|
||||
author: shenwei
|
||||
---
|
||||
---
|
||||
title: 文件编辑最佳实践指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# rm file.md.backup # 确认无误后再删除
|
||||
```
|
||||
|
||||
## 🔧 高级技巧
|
||||
|
||||
### 处理换行符问题
|
||||
```bash
|
||||
# 检测换行符类型
|
||||
file file.md
|
||||
# 输出: ASCII text 或 ASCII text, with CRLF line terminators
|
||||
|
||||
# 转换为Unix换行符
|
||||
sed -i 's/\r$//' file.md
|
||||
|
||||
# 转换为DOS换行符
|
||||
sed -i 's/$/\r/' file.md
|
||||
```
|
||||
|
||||
### 处理空格和制表符
|
||||
```bash
|
||||
# 查看不可见字符
|
||||
cat -A file.md | grep -n "要编辑的行"
|
||||
|
||||
# 标准化空格(制表符转空格)
|
||||
expand -t 4 file.md > file.md.new && mv file.md.new file.md
|
||||
|
||||
# 标准化制表符(空格转制表符)
|
||||
unexpand -t 4 file.md > file.md.new && mv file.md.new file.md
|
||||
```
|
||||
|
||||
### 使用脚本自动化
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# safe-edit.sh - 安全的文件编辑脚本
|
||||
|
||||
FILE="$1"
|
||||
OLD_TEXT="$2"
|
||||
NEW_TEXT="$3"
|
||||
|
||||
# 备份
|
||||
BACKUP="${FILE}.backup.$(date +%s)"
|
||||
cp "$FILE" "$BACKUP"
|
||||
|
||||
# 验证匹配
|
||||
MATCH_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
if [ "$MATCH_COUNT" -eq 0 ]; then
|
||||
echo "错误:未找到匹配文本"
|
||||
exit 1
|
||||
elif [ "$MATCH_COUNT" -gt 1 ]; then
|
||||
echo "警告:找到 $MATCH_COUNT 处匹配,可能不精确"
|
||||
fi
|
||||
|
||||
# 执行编辑
|
||||
edit "$FILE" "$OLD_TEXT" "$NEW_TEXT"
|
||||
|
||||
# 验证结果
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ 编辑成功"
|
||||
# 可选:清理备份
|
||||
# rm "$BACKUP"
|
||||
else
|
||||
echo "❌ 编辑失败,恢复备份"
|
||||
cp "$BACKUP" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
## ⚠️ 常见问题与解决方案
|
||||
|
||||
### 问题1:`edit`工具失败
|
||||
**症状**:`Edit: in ... failed`
|
||||
**原因**:文本不匹配(换行符、空格、内容变化)
|
||||
**解决**:
|
||||
1. 使用`write`重新创建文件
|
||||
2. 或使用更精确的匹配文本
|
||||
3. 或先备份再尝试
|
||||
|
||||
### 问题2:权限不足
|
||||
**症状**:`Permission denied`
|
||||
**原因**:文件权限设置
|
||||
**解决**:
|
||||
```bash
|
||||
# 检查权限
|
||||
ls -la file.md
|
||||
|
||||
# 临时修改权限(谨慎使用)
|
||||
chmod +w file.md
|
||||
|
||||
# 编辑后恢复权限
|
||||
chmod 644 file.md
|
||||
```
|
||||
|
||||
### 问题3:文件被锁定
|
||||
**症状**:`Resource busy` 或编辑后内容恢复
|
||||
**原因**:其他进程正在使用文件
|
||||
**解决**:
|
||||
```bash
|
||||
# 检查哪个进程在使用
|
||||
lsof file.md
|
||||
|
||||
# 等待或停止相关进程
|
||||
# 或复制到临时文件编辑
|
||||
cp file.md file.md.tmp
|
||||
edit file.md.tmp "old" "new"
|
||||
mv file.md.tmp file.md
|
||||
```
|
||||
|
||||
## 📊 编辑策略选择矩阵
|
||||
|
||||
| 场景 | 推荐工具 | 备份策略 | 验证级别 |
|
||||
|------|----------|----------|----------|
|
||||
| 小修改 | `edit` | 自动备份 | 中等 |
|
||||
| 大修改 | `write` | 手动备份 | 高 |
|
||||
| 关键文件 | `write` + 版本控制 | 多重备份 | 最高 |
|
||||
| 模板文件 | 模板系统 | 版本控制 | 中等 |
|
||||
| 批量编辑 | 脚本 | 完整备份 | 高 |
|
||||
|
||||
## 🎓 经验教训
|
||||
|
||||
### 从今天错误中学到的
|
||||
1. **不要假设文件内容**:总是先验证
|
||||
2. **换行符是隐形杀手**:使用`cat -A`查看
|
||||
3. **备份是救命稻草**:今天备份救了两次
|
||||
4. **简单往往更好**:`write`比`edit`更可靠
|
||||
|
||||
### 成功模式
|
||||
1. **测试驱动编辑**:先在小文件测试
|
||||
2. **增量修改**:一次只改一处
|
||||
3. **即时验证**:编辑后立即检查
|
||||
4. **文档记录**:记录什么方法有效
|
||||
|
||||
## 🔮 未来改进方向
|
||||
|
||||
### 工具增强
|
||||
1. **智能`edit`工具**:支持模糊匹配
|
||||
2. **编辑预览**:显示编辑前后的差异
|
||||
3. **批量操作**:支持多文件同时编辑
|
||||
4. **版本集成**:与Git等版本控制系统集成
|
||||
|
||||
### 流程优化
|
||||
1. **标准化编辑模板**:创建可重用的编辑脚本
|
||||
2. **编辑审计日志**:记录所有编辑操作
|
||||
3. **自动恢复系统**:失败时自动回滚
|
||||
4. **协作编辑支持**:多用户安全编辑
|
||||
|
||||
### 培训和教育
|
||||
1. **新手指南**:文件编辑入门教程
|
||||
2. **案例研究**:成功和失败的编辑案例
|
||||
3. **最佳实践库**:收集和分享有效方法
|
||||
4. **社区贡献**:鼓励用户分享技巧
|
||||
|
||||
## ✅ 检查清单
|
||||
|
||||
### 编辑前检查
|
||||
- [ ] 文件已备份
|
||||
- [ ] 权限正确
|
||||
- [ ] 内容已验证
|
||||
- [ ] 匹配文本精确
|
||||
- [ ] 有回滚计划
|
||||
|
||||
### 编辑后检查
|
||||
- [ ] 文件大小合理
|
||||
- [ ] 关键内容存在
|
||||
- [ ] 格式正确
|
||||
- [ ] 备份可恢复
|
||||
- [ ] 记录编辑操作
|
||||
|
||||
## 📞 支持资源
|
||||
|
||||
### 内部文档
|
||||
- `file-editing-best-practices.md`(本文档)
|
||||
- `learnings/2026-03-14-file-edit-failure.md`(错误分析)
|
||||
- `scripts/safe-edit.sh`(安全编辑脚本)
|
||||
|
||||
### 外部参考
|
||||
- OpenClaw文档:文件操作工具
|
||||
- Unix文本处理工具手册
|
||||
- 版本控制系统最佳实践
|
||||
|
||||
---
|
||||
|
||||
**版本**: 1.0
|
||||
**创建日期**: 2026-03-14
|
||||
**最后更新**: 2026-03-14 00:25 GMT+8
|
||||
**作者**: 星曜 (OpenClaw助手)
|
||||
# 文件编辑最佳实践指南
|
||||
|
||||
## 📋 概述
|
||||
本文档总结了在OpenClaw环境中安全、可靠地编辑文件的最佳实践,基于今天(2026-03-13)多次编辑失败的经验教训。
|
||||
|
||||
## 🎯 核心原则
|
||||
|
||||
### 1. 安全第一
|
||||
- **备份优先**:编辑前必须备份
|
||||
- **最小修改**:只修改必要的部分
|
||||
- **可回滚**:确保可以恢复到之前状态
|
||||
|
||||
### 2. 可靠性优先
|
||||
- **验证匹配**:编辑前验证文本存在
|
||||
- **逐步操作**:小步修改,逐步验证
|
||||
- **错误处理**:准备好失败处理方案
|
||||
|
||||
### 3. 效率兼顾
|
||||
- **选择正确工具**:根据场景选择`edit`或`write`
|
||||
- **自动化重复操作**:创建脚本处理常见编辑
|
||||
- **文档化流程**:记录成功的工作流程
|
||||
|
||||
## 🛠️ 工具选择指南
|
||||
|
||||
### 何时使用 `edit` 工具
|
||||
**适用场景**:
|
||||
- 小范围、精确的文本替换
|
||||
- 配置文件中的特定值修改
|
||||
- 模板文件中的变量替换
|
||||
|
||||
**使用条件**:
|
||||
- 能100%确定匹配文本
|
||||
- 文件内容在编辑期间不会变化
|
||||
- 不需要改变文件格式
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
# 修改配置文件中的端口号
|
||||
edit config.yaml "port: 8080" "port: 9090"
|
||||
```
|
||||
|
||||
### 何时使用 `write` 工具
|
||||
**适用场景**:
|
||||
- 创建新文件
|
||||
- 完全重写文件
|
||||
- 大范围内容修改
|
||||
- 格式标准化
|
||||
|
||||
**优势**:
|
||||
- 避免匹配问题
|
||||
- 确保格式一致
|
||||
- 简单可靠
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
# 重新创建配置文件
|
||||
write config.yaml "完整的配置文件内容"
|
||||
```
|
||||
|
||||
## 📝 标准编辑流程
|
||||
|
||||
### 步骤1:准备工作
|
||||
```bash
|
||||
# 1.1 备份原文件
|
||||
cp file.md file.md.$(date +%Y%m%d_%H%M%S).backup
|
||||
|
||||
# 1.2 检查文件状态
|
||||
ls -la file.md
|
||||
file file.md # 检查文件类型
|
||||
|
||||
# 1.3 查看精确内容
|
||||
cat -A file.md | head -20 # 查看包括特殊字符
|
||||
```
|
||||
|
||||
### 步骤2:验证匹配
|
||||
```bash
|
||||
# 2.1 检查要编辑的文本是否存在
|
||||
grep -n "要匹配的文本" file.md
|
||||
|
||||
# 2.2 检查匹配次数(应该是1次)
|
||||
grep -c "要匹配的文本" file.md
|
||||
|
||||
# 2.3 查看上下文
|
||||
grep -A2 -B2 "要匹配的文本" file.md | cat -A
|
||||
```
|
||||
|
||||
### 步骤3:执行编辑
|
||||
```bash
|
||||
# 3.1 小范围编辑(推荐)
|
||||
edit file.md "精确匹配的文本" "新的文本"
|
||||
|
||||
# 3.2 或重新创建文件
|
||||
write file.md "完整的新内容"
|
||||
```
|
||||
|
||||
### 步骤4:验证结果
|
||||
```bash
|
||||
# 4.1 检查文件完整性
|
||||
ls -la file.md # 文件大小合理
|
||||
head -5 file.md # 内容开头正确
|
||||
|
||||
# 4.2 验证关键内容存在
|
||||
grep "关键内容" file.md
|
||||
|
||||
# 4.3 与备份比较
|
||||
diff file.md.backup file.md | head -20
|
||||
```
|
||||
|
||||
### 步骤5:清理和记录
|
||||
```bash
|
||||
# 5.1 记录编辑操作
|
||||
echo "$(date): 编辑file.md - 修改了X处" >> edit-log.md
|
||||
|
||||
# 5.2 清理临时备份(可选)---
|
||||
title: 文件编辑最佳实践指南
|
||||
author: shenwei
|
||||
---
|
||||
---
|
||||
title: 文件编辑最佳实践指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# rm file.md.backup # 确认无误后再删除
|
||||
```
|
||||
|
||||
## 🔧 高级技巧
|
||||
|
||||
### 处理换行符问题
|
||||
```bash
|
||||
# 检测换行符类型
|
||||
file file.md
|
||||
# 输出: ASCII text 或 ASCII text, with CRLF line terminators
|
||||
|
||||
# 转换为Unix换行符
|
||||
sed -i 's/\r$//' file.md
|
||||
|
||||
# 转换为DOS换行符
|
||||
sed -i 's/$/\r/' file.md
|
||||
```
|
||||
|
||||
### 处理空格和制表符
|
||||
```bash
|
||||
# 查看不可见字符
|
||||
cat -A file.md | grep -n "要编辑的行"
|
||||
|
||||
# 标准化空格(制表符转空格)
|
||||
expand -t 4 file.md > file.md.new && mv file.md.new file.md
|
||||
|
||||
# 标准化制表符(空格转制表符)
|
||||
unexpand -t 4 file.md > file.md.new && mv file.md.new file.md
|
||||
```
|
||||
|
||||
### 使用脚本自动化
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# safe-edit.sh - 安全的文件编辑脚本
|
||||
|
||||
FILE="$1"
|
||||
OLD_TEXT="$2"
|
||||
NEW_TEXT="$3"
|
||||
|
||||
# 备份
|
||||
BACKUP="${FILE}.backup.$(date +%s)"
|
||||
cp "$FILE" "$BACKUP"
|
||||
|
||||
# 验证匹配
|
||||
MATCH_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
if [ "$MATCH_COUNT" -eq 0 ]; then
|
||||
echo "错误:未找到匹配文本"
|
||||
exit 1
|
||||
elif [ "$MATCH_COUNT" -gt 1 ]; then
|
||||
echo "警告:找到 $MATCH_COUNT 处匹配,可能不精确"
|
||||
fi
|
||||
|
||||
# 执行编辑
|
||||
edit "$FILE" "$OLD_TEXT" "$NEW_TEXT"
|
||||
|
||||
# 验证结果
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ 编辑成功"
|
||||
# 可选:清理备份
|
||||
# rm "$BACKUP"
|
||||
else
|
||||
echo "❌ 编辑失败,恢复备份"
|
||||
cp "$BACKUP" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
## ⚠️ 常见问题与解决方案
|
||||
|
||||
### 问题1:`edit`工具失败
|
||||
**症状**:`Edit: in ... failed`
|
||||
**原因**:文本不匹配(换行符、空格、内容变化)
|
||||
**解决**:
|
||||
1. 使用`write`重新创建文件
|
||||
2. 或使用更精确的匹配文本
|
||||
3. 或先备份再尝试
|
||||
|
||||
### 问题2:权限不足
|
||||
**症状**:`Permission denied`
|
||||
**原因**:文件权限设置
|
||||
**解决**:
|
||||
```bash
|
||||
# 检查权限
|
||||
ls -la file.md
|
||||
|
||||
# 临时修改权限(谨慎使用)
|
||||
chmod +w file.md
|
||||
|
||||
# 编辑后恢复权限
|
||||
chmod 644 file.md
|
||||
```
|
||||
|
||||
### 问题3:文件被锁定
|
||||
**症状**:`Resource busy` 或编辑后内容恢复
|
||||
**原因**:其他进程正在使用文件
|
||||
**解决**:
|
||||
```bash
|
||||
# 检查哪个进程在使用
|
||||
lsof file.md
|
||||
|
||||
# 等待或停止相关进程
|
||||
# 或复制到临时文件编辑
|
||||
cp file.md file.md.tmp
|
||||
edit file.md.tmp "old" "new"
|
||||
mv file.md.tmp file.md
|
||||
```
|
||||
|
||||
## 📊 编辑策略选择矩阵
|
||||
|
||||
| 场景 | 推荐工具 | 备份策略 | 验证级别 |
|
||||
|------|----------|----------|----------|
|
||||
| 小修改 | `edit` | 自动备份 | 中等 |
|
||||
| 大修改 | `write` | 手动备份 | 高 |
|
||||
| 关键文件 | `write` + 版本控制 | 多重备份 | 最高 |
|
||||
| 模板文件 | 模板系统 | 版本控制 | 中等 |
|
||||
| 批量编辑 | 脚本 | 完整备份 | 高 |
|
||||
|
||||
## 🎓 经验教训
|
||||
|
||||
### 从今天错误中学到的
|
||||
1. **不要假设文件内容**:总是先验证
|
||||
2. **换行符是隐形杀手**:使用`cat -A`查看
|
||||
3. **备份是救命稻草**:今天备份救了两次
|
||||
4. **简单往往更好**:`write`比`edit`更可靠
|
||||
|
||||
### 成功模式
|
||||
1. **测试驱动编辑**:先在小文件测试
|
||||
2. **增量修改**:一次只改一处
|
||||
3. **即时验证**:编辑后立即检查
|
||||
4. **文档记录**:记录什么方法有效
|
||||
|
||||
## 🔮 未来改进方向
|
||||
|
||||
### 工具增强
|
||||
1. **智能`edit`工具**:支持模糊匹配
|
||||
2. **编辑预览**:显示编辑前后的差异
|
||||
3. **批量操作**:支持多文件同时编辑
|
||||
4. **版本集成**:与Git等版本控制系统集成
|
||||
|
||||
### 流程优化
|
||||
1. **标准化编辑模板**:创建可重用的编辑脚本
|
||||
2. **编辑审计日志**:记录所有编辑操作
|
||||
3. **自动恢复系统**:失败时自动回滚
|
||||
4. **协作编辑支持**:多用户安全编辑
|
||||
|
||||
### 培训和教育
|
||||
1. **新手指南**:文件编辑入门教程
|
||||
2. **案例研究**:成功和失败的编辑案例
|
||||
3. **最佳实践库**:收集和分享有效方法
|
||||
4. **社区贡献**:鼓励用户分享技巧
|
||||
|
||||
## ✅ 检查清单
|
||||
|
||||
### 编辑前检查
|
||||
- [ ] 文件已备份
|
||||
- [ ] 权限正确
|
||||
- [ ] 内容已验证
|
||||
- [ ] 匹配文本精确
|
||||
- [ ] 有回滚计划
|
||||
|
||||
### 编辑后检查
|
||||
- [ ] 文件大小合理
|
||||
- [ ] 关键内容存在
|
||||
- [ ] 格式正确
|
||||
- [ ] 备份可恢复
|
||||
- [ ] 记录编辑操作
|
||||
|
||||
## 📞 支持资源
|
||||
|
||||
### 内部文档
|
||||
- `file-editing-best-practices.md`(本文档)
|
||||
- `learnings/2026-03-14-file-edit-failure.md`(错误分析)
|
||||
- `scripts/safe-edit.sh`(安全编辑脚本)
|
||||
|
||||
### 外部参考
|
||||
- OpenClaw文档:文件操作工具
|
||||
- Unix文本处理工具手册
|
||||
- 版本控制系统最佳实践
|
||||
|
||||
---
|
||||
|
||||
**版本**: 1.0
|
||||
**创建日期**: 2026-03-14
|
||||
**最后更新**: 2026-03-14 00:25 GMT+8
|
||||
**作者**: 星曜 (OpenClaw助手)
|
||||
**状态**: ✅ 生效中
|
||||
@@ -1,176 +1,176 @@
|
||||
---
|
||||
title: FRP 配置查询技能
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description: FRP (Fast Reverse Proxy) 配置查询技能。用于查询和管理内网服务器的 FRP 客户端配置信息,包括:(1) 查看指定服务器的 frpc.toml 配置文件内容,(2) 列出所有端口映射关系,(3) 查询特定服务的端口信息,(4) 检查 FRP 客户端运行状态。触发关键词:frp配置、frp端口、查看frp、frp列表、服务器 frp
|
||||
tags: []
|
||||
name: frp-query
|
||||
---
|
||||
|
||||
|
||||
|
||||
# FRP 配置查询技能
|
||||
|
||||
## 技能概述
|
||||
|
||||
本技能用于查询和管理比利哥家庭网络中各服务器的 FRP(Fast Reverse Proxy)客户端配置信息。
|
||||
|
||||
## 服务器配置
|
||||
|
||||
| 服务器 | 内网IP | SSH别名 | FRP目录 | 配置文件 |
|
||||
|--------|--------|---------|---------|----------|
|
||||
| macmini | 192.168.3.189 | `ssh macmini` | `/opt/frp/frp_0.65.0_darwin_arm64` | `frpc.toml` |
|
||||
| ubuntu1 | 192.168.3.47 | `ssh ubuntu1` | `/opt/frp/frp_0.65.0_linux_amd64` | `frpc.toml` |
|
||||
| ubuntu2 | 192.168.3.45 | `ssh ubuntu2` | `/opt/frp/frp_0.65.0_linux_amd64` | `frpc.toml` |
|
||||
| NAS | 192.168.3.17 | `ssh nas` | `/opt/frp/frp_0.65.0_linux_amd64` | `frpc.toml` |
|
||||
|
||||
## FRP 服务器信息
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| serverAddr | 192.227.222.142 (VPS1) |
|
||||
| serverPort | 7000 |
|
||||
| auth.token | Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs |
|
||||
| 管理面板 | 127.0.0.1:7400 (admin/admin) |
|
||||
|
||||
## 查询命令
|
||||
|
||||
### 查看服务器 FRP 配置
|
||||
|
||||
```bash
|
||||
# 查看 macmini 配置
|
||||
ssh macmini "cat /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml"
|
||||
|
||||
# 查看 ubuntu1 配置
|
||||
ssh ubuntu1 "cat /opt/frp/frp_0.65.0_linux_amd64/frpc.toml"
|
||||
|
||||
# 查看 ubuntu2 配置
|
||||
ssh ubuntu2 "cat /opt/frp/frp_0.65.0_linux_amd64/frpc.toml"
|
||||
|
||||
# 查看 NAS 配置 (路径不同)
|
||||
ssh nas "cat /opt/frp_0.65.0_linux_amd64/frpc.toml"
|
||||
```
|
||||
|
||||
### 查看 FRP 运行状态
|
||||
|
||||
```bash
|
||||
# Ubuntu 服务器 (systemd)
|
||||
ssh ubuntu1 "systemctl status frpc"
|
||||
|
||||
# macOS/NAS (tmux)
|
||||
ssh macmini "tmux attach -t frpc"
|
||||
```
|
||||
|
||||
### 重启 FRP 服务
|
||||
|
||||
```bash
|
||||
# Ubuntu
|
||||
ssh ubuntu1 "systemctl restart frpc"
|
||||
|
||||
# macOS
|
||||
# SSH 后进入 tmux 会话手动重启
|
||||
```
|
||||
|
||||
## 端口映射速查
|
||||
|
||||
### 按服务器分组
|
||||
|
||||
**macmini (RemotePort: 15151-18999)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| vaultwarden | 15151 |
|
||||
| n8n | 15679 |
|
||||
| drawio | 18085 |
|
||||
| it-tools | 18999 |
|
||||
| macmini-ssh | 60026 |
|
||||
|
||||
**ubuntu1 (RemotePort: 13000-19443)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| grafana | 13000 |
|
||||
| stq | 15173 |
|
||||
| stq-n8n | 15678 |
|
||||
| stq-admin | 17000 |
|
||||
| homarr | 17575 |
|
||||
| superset | 18777 |
|
||||
| tk | 18888 |
|
||||
| transmission | 19091 |
|
||||
| portainer | 19443 |
|
||||
| ubuntu1-ssh | 60022 |
|
||||
|
||||
**ubuntu2 (RemotePort: 18889, 60024)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| tk-dev | 18889 |
|
||||
| ubuntu2-ssh | 60024 |
|
||||
|
||||
**NAS (RemotePort: 10080-65005)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| nas_web | 10080 |
|
||||
| zipline | 13333 |
|
||||
| navidrome | 14533 |
|
||||
| nas | 15000 |
|
||||
| calibre | 18083 |
|
||||
| jellyfin | 18096 |
|
||||
| nas_ssh | 60023 |
|
||||
| mysql | 63307 |
|
||||
| webdav | 65005 |
|
||||
|
||||
### 按域名分组
|
||||
|
||||
| 域名 | 目标服务器 | RemotePort |
|
||||
|------|-----------|------------|
|
||||
| n8n.ishenwei.online | macmini | 15679 |
|
||||
| vaultwarden.ishenwei.online | macmini | 15151 |
|
||||
| it-tools.ishenwei.online | macmini | 18999 |
|
||||
| drawio.ishenwei.online | macmini | 18085 |
|
||||
| grafana.ishenwei.online | ubuntu1 | 13000 |
|
||||
| superset.ishenwei.online | ubuntu1 | 18777 |
|
||||
| dashboard.ishenwei.online | ubuntu1 | 17575 |
|
||||
| tk.ishenwei.online | ubuntu1 | 18888 |
|
||||
| transmission.ishenwei.online | ubuntu1 | 19091 |
|
||||
| tk-dev.ishenwei.online | ubuntu2 | 18889 |
|
||||
| nas.ishenwei.online | NAS | 15000 |
|
||||
| navidrome.ishenwei.online | NAS | 14533 |
|
||||
| calibre.ishenwei.online | NAS | 18083 |
|
||||
| jellyfin.ishenwei.online | NAS | 18096 |
|
||||
| zipline.ishenwei.online | NAS | 13333 |
|
||||
|
||||
## 输出格式示例
|
||||
|
||||
当用户询问 FRP 配置时,使用以下格式输出:
|
||||
|
||||
```
|
||||
📡 FRP 配置查询结果
|
||||
|
||||
• macmini
|
||||
• FRP目录: /opt/frp/frp_0.65.0_darwin_arm64
|
||||
• 代理数量: 5个
|
||||
• 主要端口: 60026(ssh), 15679(n8n), 15151(vaultwarden)...
|
||||
|
||||
• ubuntu1
|
||||
• FRP目录: /opt/frp/frp_0.65.0_linux_amd64
|
||||
• 代理数量: 10个
|
||||
• 主要端口: 60022(ssh), 13000(grafana), 18888(tk)...
|
||||
|
||||
• ubuntu2
|
||||
• FRP目录: /opt/frp/frp_0.65.0_linux_amd64
|
||||
• 代理数量: 2个
|
||||
• 主要端口: 60024(ssh), 18889(tk-dev)...
|
||||
|
||||
• NAS
|
||||
• FRP目录: /opt/frp/frp_0.65.0_linux_amd64
|
||||
• 代理数量: 10个
|
||||
• 主要端口: 60023(ssh), 15000(nas), 18096(jellyfin)...
|
||||
```
|
||||
|
||||
## 触发场景
|
||||
|
||||
- 用户询问"xxx 服务器的 FRP 配置"
|
||||
- 用户询问"查看 frp 端口列表"
|
||||
- 用户询问"xxx 服务的端口是多少"
|
||||
- 用户要求"检查 frp 状态"
|
||||
- 用户询问"frp 映射了哪些端口"
|
||||
---
|
||||
title: FRP 配置查询技能
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description: FRP (Fast Reverse Proxy) 配置查询技能。用于查询和管理内网服务器的 FRP 客户端配置信息,包括:(1) 查看指定服务器的 frpc.toml 配置文件内容,(2) 列出所有端口映射关系,(3) 查询特定服务的端口信息,(4) 检查 FRP 客户端运行状态。触发关键词:frp配置、frp端口、查看frp、frp列表、服务器 frp
|
||||
tags: []
|
||||
name: frp-query
|
||||
---
|
||||
|
||||
|
||||
|
||||
# FRP 配置查询技能
|
||||
|
||||
## 技能概述
|
||||
|
||||
本技能用于查询和管理比利哥家庭网络中各服务器的 FRP(Fast Reverse Proxy)客户端配置信息。
|
||||
|
||||
## 服务器配置
|
||||
|
||||
| 服务器 | 内网IP | SSH别名 | FRP目录 | 配置文件 |
|
||||
|--------|--------|---------|---------|----------|
|
||||
| macmini | 192.168.3.189 | `ssh macmini` | `/opt/frp/frp_0.65.0_darwin_arm64` | `frpc.toml` |
|
||||
| ubuntu1 | 192.168.3.47 | `ssh ubuntu1` | `/opt/frp/frp_0.65.0_linux_amd64` | `frpc.toml` |
|
||||
| ubuntu2 | 192.168.3.45 | `ssh ubuntu2` | `/opt/frp/frp_0.65.0_linux_amd64` | `frpc.toml` |
|
||||
| NAS | 192.168.3.17 | `ssh nas` | `/opt/frp/frp_0.65.0_linux_amd64` | `frpc.toml` |
|
||||
|
||||
## FRP 服务器信息
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| serverAddr | 192.227.222.142 (VPS1) |
|
||||
| serverPort | 7000 |
|
||||
| auth.token | Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs |
|
||||
| 管理面板 | 127.0.0.1:7400 (admin/admin) |
|
||||
|
||||
## 查询命令
|
||||
|
||||
### 查看服务器 FRP 配置
|
||||
|
||||
```bash
|
||||
# 查看 macmini 配置
|
||||
ssh macmini "cat /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml"
|
||||
|
||||
# 查看 ubuntu1 配置
|
||||
ssh ubuntu1 "cat /opt/frp/frp_0.65.0_linux_amd64/frpc.toml"
|
||||
|
||||
# 查看 ubuntu2 配置
|
||||
ssh ubuntu2 "cat /opt/frp/frp_0.65.0_linux_amd64/frpc.toml"
|
||||
|
||||
# 查看 NAS 配置 (路径不同)
|
||||
ssh nas "cat /opt/frp_0.65.0_linux_amd64/frpc.toml"
|
||||
```
|
||||
|
||||
### 查看 FRP 运行状态
|
||||
|
||||
```bash
|
||||
# Ubuntu 服务器 (systemd)
|
||||
ssh ubuntu1 "systemctl status frpc"
|
||||
|
||||
# macOS/NAS (tmux)
|
||||
ssh macmini "tmux attach -t frpc"
|
||||
```
|
||||
|
||||
### 重启 FRP 服务
|
||||
|
||||
```bash
|
||||
# Ubuntu
|
||||
ssh ubuntu1 "systemctl restart frpc"
|
||||
|
||||
# macOS
|
||||
# SSH 后进入 tmux 会话手动重启
|
||||
```
|
||||
|
||||
## 端口映射速查
|
||||
|
||||
### 按服务器分组
|
||||
|
||||
**macmini (RemotePort: 15151-18999)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| vaultwarden | 15151 |
|
||||
| n8n | 15679 |
|
||||
| drawio | 18085 |
|
||||
| it-tools | 18999 |
|
||||
| macmini-ssh | 60026 |
|
||||
|
||||
**ubuntu1 (RemotePort: 13000-19443)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| grafana | 13000 |
|
||||
| stq | 15173 |
|
||||
| stq-n8n | 15678 |
|
||||
| stq-admin | 17000 |
|
||||
| homarr | 17575 |
|
||||
| superset | 18777 |
|
||||
| tk | 18888 |
|
||||
| transmission | 19091 |
|
||||
| portainer | 19443 |
|
||||
| ubuntu1-ssh | 60022 |
|
||||
|
||||
**ubuntu2 (RemotePort: 18889, 60024)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| tk-dev | 18889 |
|
||||
| ubuntu2-ssh | 60024 |
|
||||
|
||||
**NAS (RemotePort: 10080-65005)**
|
||||
| 服务 | RemotePort |
|
||||
|------|------------|
|
||||
| nas_web | 10080 |
|
||||
| zipline | 13333 |
|
||||
| navidrome | 14533 |
|
||||
| nas | 15000 |
|
||||
| calibre | 18083 |
|
||||
| jellyfin | 18096 |
|
||||
| nas_ssh | 60023 |
|
||||
| mysql | 63307 |
|
||||
| webdav | 65005 |
|
||||
|
||||
### 按域名分组
|
||||
|
||||
| 域名 | 目标服务器 | RemotePort |
|
||||
|------|-----------|------------|
|
||||
| n8n.ishenwei.online | macmini | 15679 |
|
||||
| vaultwarden.ishenwei.online | macmini | 15151 |
|
||||
| it-tools.ishenwei.online | macmini | 18999 |
|
||||
| drawio.ishenwei.online | macmini | 18085 |
|
||||
| grafana.ishenwei.online | ubuntu1 | 13000 |
|
||||
| superset.ishenwei.online | ubuntu1 | 18777 |
|
||||
| dashboard.ishenwei.online | ubuntu1 | 17575 |
|
||||
| tk.ishenwei.online | ubuntu1 | 18888 |
|
||||
| transmission.ishenwei.online | ubuntu1 | 19091 |
|
||||
| tk-dev.ishenwei.online | ubuntu2 | 18889 |
|
||||
| nas.ishenwei.online | NAS | 15000 |
|
||||
| navidrome.ishenwei.online | NAS | 14533 |
|
||||
| calibre.ishenwei.online | NAS | 18083 |
|
||||
| jellyfin.ishenwei.online | NAS | 18096 |
|
||||
| zipline.ishenwei.online | NAS | 13333 |
|
||||
|
||||
## 输出格式示例
|
||||
|
||||
当用户询问 FRP 配置时,使用以下格式输出:
|
||||
|
||||
```
|
||||
📡 FRP 配置查询结果
|
||||
|
||||
• macmini
|
||||
• FRP目录: /opt/frp/frp_0.65.0_darwin_arm64
|
||||
• 代理数量: 5个
|
||||
• 主要端口: 60026(ssh), 15679(n8n), 15151(vaultwarden)...
|
||||
|
||||
• ubuntu1
|
||||
• FRP目录: /opt/frp/frp_0.65.0_linux_amd64
|
||||
• 代理数量: 10个
|
||||
• 主要端口: 60022(ssh), 13000(grafana), 18888(tk)...
|
||||
|
||||
• ubuntu2
|
||||
• FRP目录: /opt/frp/frp_0.65.0_linux_amd64
|
||||
• 代理数量: 2个
|
||||
• 主要端口: 60024(ssh), 18889(tk-dev)...
|
||||
|
||||
• NAS
|
||||
• FRP目录: /opt/frp/frp_0.65.0_linux_amd64
|
||||
• 代理数量: 10个
|
||||
• 主要端口: 60023(ssh), 15000(nas), 18096(jellyfin)...
|
||||
```
|
||||
|
||||
## 触发场景
|
||||
|
||||
- 用户询问"xxx 服务器的 FRP 配置"
|
||||
- 用户询问"查看 frp 端口列表"
|
||||
- 用户询问"xxx 服务的端口是多少"
|
||||
- 用户要求"检查 frp 状态"
|
||||
- 用户询问"frp 映射了哪些端口"
|
||||
|
||||
@@ -1,314 +1,314 @@
|
||||
---
|
||||
title: FRP 完整配置参考
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# FRP 完整配置参考
|
||||
|
||||
本文档包含各服务器完整的 frpc.toml 配置内容。
|
||||
|
||||
---
|
||||
|
||||
## 1. MacMini 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_darwin_arm64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# frpc.toml
|
||||
# 客户端配置文件
|
||||
# 服务器地址与认证
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
auth.method = "token"
|
||||
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
# 日志配置
|
||||
log.level = "info"
|
||||
log.maxDays = 3
|
||||
log.disablePrintColor = false
|
||||
|
||||
# 管理界面(可选)
|
||||
webServer.addr = "127.0.0.1"
|
||||
webServer.port = 7400
|
||||
webServer.user = "admin"
|
||||
webServer.password = "admin"
|
||||
|
||||
# 代理配置
|
||||
|
||||
[[proxies]]
|
||||
name = "macmini-ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60026
|
||||
|
||||
[[proxies]]
|
||||
name = "n8n"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5678
|
||||
remotePort = 15679
|
||||
|
||||
[[proxies]]
|
||||
name = "vaultwarden"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5151
|
||||
remotePort = 15151
|
||||
|
||||
[[proxies]]
|
||||
name = "it-tools"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8999
|
||||
remotePort = 18999
|
||||
|
||||
[[proxies]]
|
||||
name = "drawio"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8085
|
||||
remotePort = 18085
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Ubuntu1 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# frpc.toml
|
||||
# 客户端配置文件
|
||||
# 服务器地址与认证
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
auth.method = "token"
|
||||
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
# 日志配置
|
||||
log.level = "info"
|
||||
log.maxDays = 3
|
||||
log.disablePrintColor = false
|
||||
|
||||
# 管理界面(可选)
|
||||
webServer.addr = "127.0.0.1"
|
||||
webServer.port = 7400
|
||||
webServer.user = "admin"
|
||||
webServer.password = "admin"
|
||||
|
||||
[[proxies]]
|
||||
name = "transmission"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 9091
|
||||
remotePort = 19091
|
||||
|
||||
[[proxies]]
|
||||
name = "grafana"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3000
|
||||
remotePort = 13000
|
||||
|
||||
[[proxies]]
|
||||
name = "ubuntu1-ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60022
|
||||
|
||||
[[proxies]]
|
||||
name = "homarr"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 7575
|
||||
remotePort = 17575
|
||||
|
||||
[[proxies]]
|
||||
name = "superset"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8777
|
||||
remotePort = 18777
|
||||
|
||||
[[proxies]]
|
||||
name = "tk"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8888
|
||||
remotePort = 18888
|
||||
|
||||
[[proxies]]
|
||||
name = "ubuntu1-portainer"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 9000
|
||||
remotePort = 19443
|
||||
|
||||
[[proxies]]
|
||||
name = "stq"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5173
|
||||
remotePort = 15173
|
||||
|
||||
[[proxies]]
|
||||
name = "stq-admin"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 7000
|
||||
remotePort = 17000
|
||||
|
||||
[[proxies]]
|
||||
name = "stq-n8n"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 62000
|
||||
remotePort = 15678
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Ubuntu2 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# frpc.toml
|
||||
# 客户端配置文件
|
||||
# 服务器地址与认证
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
auth.method = "token"
|
||||
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
# 日志配置
|
||||
log.level = "info"
|
||||
log.maxDays = 3
|
||||
log.disablePrintColor = false
|
||||
|
||||
# 管理界面(可选)
|
||||
webServer.addr = "127.0.0.1"
|
||||
webServer.port = 7400
|
||||
webServer.user = "admin"
|
||||
webServer.password = "admin"
|
||||
|
||||
[[proxies]]
|
||||
name = "ubuntu2-ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60024
|
||||
|
||||
[[proxies]]
|
||||
name = "tk-dev"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8888
|
||||
remotePort = 18889
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. NAS 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# FRP Client Configuration for NAS
|
||||
# Converted from frpc.ini
|
||||
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
|
||||
[auth]
|
||||
token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
[[proxies]]
|
||||
name = "nas"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5000
|
||||
remotePort = 15000
|
||||
|
||||
[[proxies]]
|
||||
name = "navidrome"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 4533
|
||||
remotePort = 14533
|
||||
|
||||
[[proxies]]
|
||||
name = "calibre"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8083
|
||||
remotePort = 18083
|
||||
|
||||
[[proxies]]
|
||||
name = "webdav"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5005
|
||||
remotePort = 65005
|
||||
|
||||
[[proxies]]
|
||||
name = "miniflux"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8080
|
||||
remotePort = 18080
|
||||
|
||||
[[proxies]]
|
||||
name = "zipline"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3333
|
||||
remotePort = 13333
|
||||
|
||||
[[proxies]]
|
||||
name = "nas_ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60023
|
||||
|
||||
[[proxies]]
|
||||
name = "mysql"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3307
|
||||
remotePort = 63307
|
||||
|
||||
[[proxies]]
|
||||
name = "nas_web"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 80
|
||||
remotePort = 10080
|
||||
|
||||
[[proxies]]
|
||||
name = "jellyfin"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8096
|
||||
remotePort = 18096
|
||||
```
|
||||
---
|
||||
title: FRP 完整配置参考
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# FRP 完整配置参考
|
||||
|
||||
本文档包含各服务器完整的 frpc.toml 配置内容。
|
||||
|
||||
---
|
||||
|
||||
## 1. MacMini 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_darwin_arm64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# frpc.toml
|
||||
# 客户端配置文件
|
||||
# 服务器地址与认证
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
auth.method = "token"
|
||||
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
# 日志配置
|
||||
log.level = "info"
|
||||
log.maxDays = 3
|
||||
log.disablePrintColor = false
|
||||
|
||||
# 管理界面(可选)
|
||||
webServer.addr = "127.0.0.1"
|
||||
webServer.port = 7400
|
||||
webServer.user = "admin"
|
||||
webServer.password = "admin"
|
||||
|
||||
# 代理配置
|
||||
|
||||
[[proxies]]
|
||||
name = "macmini-ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60026
|
||||
|
||||
[[proxies]]
|
||||
name = "n8n"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5678
|
||||
remotePort = 15679
|
||||
|
||||
[[proxies]]
|
||||
name = "vaultwarden"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5151
|
||||
remotePort = 15151
|
||||
|
||||
[[proxies]]
|
||||
name = "it-tools"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8999
|
||||
remotePort = 18999
|
||||
|
||||
[[proxies]]
|
||||
name = "drawio"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8085
|
||||
remotePort = 18085
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Ubuntu1 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# frpc.toml
|
||||
# 客户端配置文件
|
||||
# 服务器地址与认证
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
auth.method = "token"
|
||||
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
# 日志配置
|
||||
log.level = "info"
|
||||
log.maxDays = 3
|
||||
log.disablePrintColor = false
|
||||
|
||||
# 管理界面(可选)
|
||||
webServer.addr = "127.0.0.1"
|
||||
webServer.port = 7400
|
||||
webServer.user = "admin"
|
||||
webServer.password = "admin"
|
||||
|
||||
[[proxies]]
|
||||
name = "transmission"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 9091
|
||||
remotePort = 19091
|
||||
|
||||
[[proxies]]
|
||||
name = "grafana"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3000
|
||||
remotePort = 13000
|
||||
|
||||
[[proxies]]
|
||||
name = "ubuntu1-ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60022
|
||||
|
||||
[[proxies]]
|
||||
name = "homarr"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 7575
|
||||
remotePort = 17575
|
||||
|
||||
[[proxies]]
|
||||
name = "superset"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8777
|
||||
remotePort = 18777
|
||||
|
||||
[[proxies]]
|
||||
name = "tk"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8888
|
||||
remotePort = 18888
|
||||
|
||||
[[proxies]]
|
||||
name = "ubuntu1-portainer"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 9000
|
||||
remotePort = 19443
|
||||
|
||||
[[proxies]]
|
||||
name = "stq"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5173
|
||||
remotePort = 15173
|
||||
|
||||
[[proxies]]
|
||||
name = "stq-admin"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 7000
|
||||
remotePort = 17000
|
||||
|
||||
[[proxies]]
|
||||
name = "stq-n8n"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 62000
|
||||
remotePort = 15678
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Ubuntu2 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# frpc.toml
|
||||
# 客户端配置文件
|
||||
# 服务器地址与认证
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
auth.method = "token"
|
||||
auth.token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
# 日志配置
|
||||
log.level = "info"
|
||||
log.maxDays = 3
|
||||
log.disablePrintColor = false
|
||||
|
||||
# 管理界面(可选)
|
||||
webServer.addr = "127.0.0.1"
|
||||
webServer.port = 7400
|
||||
webServer.user = "admin"
|
||||
webServer.password = "admin"
|
||||
|
||||
[[proxies]]
|
||||
name = "ubuntu2-ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60024
|
||||
|
||||
[[proxies]]
|
||||
name = "tk-dev"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8888
|
||||
remotePort = 18889
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. NAS 配置
|
||||
|
||||
### 配置文件路径
|
||||
`/opt/frp/frp_0.65.0_linux_amd64/frpc.toml`
|
||||
|
||||
### 完整内容
|
||||
|
||||
```toml
|
||||
# FRP Client Configuration for NAS
|
||||
# Converted from frpc.ini
|
||||
|
||||
serverAddr = "192.227.222.142"
|
||||
serverPort = 7000
|
||||
|
||||
[auth]
|
||||
token = "Gg8sqHJVgh42KQ0oTatMjl6AywWqAzaaT0B77a4qD46tXtoH9j9mXb2k1YitObhs"
|
||||
|
||||
[[proxies]]
|
||||
name = "nas"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5000
|
||||
remotePort = 15000
|
||||
|
||||
[[proxies]]
|
||||
name = "navidrome"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 4533
|
||||
remotePort = 14533
|
||||
|
||||
[[proxies]]
|
||||
name = "calibre"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8083
|
||||
remotePort = 18083
|
||||
|
||||
[[proxies]]
|
||||
name = "webdav"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5005
|
||||
remotePort = 65005
|
||||
|
||||
[[proxies]]
|
||||
name = "miniflux"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8080
|
||||
remotePort = 18080
|
||||
|
||||
[[proxies]]
|
||||
name = "zipline"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3333
|
||||
remotePort = 13333
|
||||
|
||||
[[proxies]]
|
||||
name = "nas_ssh"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 60023
|
||||
|
||||
[[proxies]]
|
||||
name = "mysql"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3307
|
||||
remotePort = 63307
|
||||
|
||||
[[proxies]]
|
||||
name = "nas_web"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 80
|
||||
remotePort = 10080
|
||||
|
||||
[[proxies]]
|
||||
name = "jellyfin"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 8096
|
||||
remotePort = 18096
|
||||
```
|
||||
|
||||
@@ -1,68 +1,68 @@
|
||||
---
|
||||
title: NAS Docker 代理配置笔记
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# NAS Docker 代理配置笔记
|
||||
|
||||
## Synology NAS Docker 代理配置
|
||||
|
||||
### 1. 代理配置文件位置
|
||||
|
||||
```
|
||||
/etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
### 2. 原始配置内容
|
||||
|
||||
```ini
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://127.0.0.1:20171"
|
||||
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,192.168.*,*.synology.me"
|
||||
```
|
||||
|
||||
### 3. 注释代理的方法
|
||||
|
||||
```bash
|
||||
# 注释掉 HTTP_PROXY 和 HTTPS_PROXY
|
||||
sudo sed -i 's/^Environment="HTTP_PROXY/#Environment="HTTP_PROXY/' /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
sudo sed -i 's/^Environment="HTTPS_PROXY/#Environment="HTTPS_PROXY/' /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
### 4. 重启 Docker 服务
|
||||
|
||||
```bash
|
||||
# 重载 systemd 配置
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# 重启 container-manager (Docker)
|
||||
sudo systemctl restart pkg-ContainerManager-dockerd
|
||||
|
||||
# 查看服务状态
|
||||
sudo systemctl status pkg-ContainerManager-dockerd
|
||||
```
|
||||
|
||||
### 5. 相关命令
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 查看当前代理配置 | `sudo cat /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf` |
|
||||
| 启用代理 | 取消注释 (去掉 #) |
|
||||
| 禁用代理 | 注释掉 (添加 #) |
|
||||
| 重启 Docker | `sudo systemctl restart pkg-ContainerManager-dockerd` |
|
||||
|
||||
### 6. 注意事项
|
||||
|
||||
- 这是 Synology NAS 特有的路径,普通 Linux 系统通常在 `/etc/systemd/system/docker.service.d/`
|
||||
- 修改后必须 `systemctl daemon-reload` 才能生效
|
||||
- Docker 拉取镜像时会使用此代理配置
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
title: NAS Docker 代理配置笔记
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# NAS Docker 代理配置笔记
|
||||
|
||||
## Synology NAS Docker 代理配置
|
||||
|
||||
### 1. 代理配置文件位置
|
||||
|
||||
```
|
||||
/etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
### 2. 原始配置内容
|
||||
|
||||
```ini
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://127.0.0.1:20171"
|
||||
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,192.168.*,*.synology.me"
|
||||
```
|
||||
|
||||
### 3. 注释代理的方法
|
||||
|
||||
```bash
|
||||
# 注释掉 HTTP_PROXY 和 HTTPS_PROXY
|
||||
sudo sed -i 's/^Environment="HTTP_PROXY/#Environment="HTTP_PROXY/' /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
sudo sed -i 's/^Environment="HTTPS_PROXY/#Environment="HTTPS_PROXY/' /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
|
||||
```
|
||||
|
||||
### 4. 重启 Docker 服务
|
||||
|
||||
```bash
|
||||
# 重载 systemd 配置
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# 重启 container-manager (Docker)
|
||||
sudo systemctl restart pkg-ContainerManager-dockerd
|
||||
|
||||
# 查看服务状态
|
||||
sudo systemctl status pkg-ContainerManager-dockerd
|
||||
```
|
||||
|
||||
### 5. 相关命令
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 查看当前代理配置 | `sudo cat /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf` |
|
||||
| 启用代理 | 取消注释 (去掉 #) |
|
||||
| 禁用代理 | 注释掉 (添加 #) |
|
||||
| 重启 Docker | `sudo systemctl restart pkg-ContainerManager-dockerd` |
|
||||
|
||||
### 6. 注意事项
|
||||
|
||||
- 这是 Synology NAS 特有的路径,普通 Linux 系统通常在 `/etc/systemd/system/docker.service.d/`
|
||||
- 修改后必须 `systemctl daemon-reload` 才能生效
|
||||
- Docker 拉取镜像时会使用此代理配置
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-03-27*
|
||||
@@ -1,455 +1,455 @@
|
||||
---
|
||||
title: Mac Mini WebDAV 服务配置指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Mac Mini WebDAV 服务配置指南
|
||||
|
||||
## 目的
|
||||
在 Mac Mini 上通过原生 Apache 配置 WebDAV 服务,用于共享 Obsidian 笔记。
|
||||
|
||||
---
|
||||
|
||||
## 一、Mac Mini 本地配置
|
||||
|
||||
### 步骤 1: 启用 WebDAV 模块
|
||||
|
||||
编辑 Apache 配置文件,启用 DAV 模块:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/apache2/httpd.conf
|
||||
```
|
||||
|
||||
找到以下行并取消注释(去掉 `#`):
|
||||
|
||||
```apache
|
||||
LoadModule dav_module libexec/apache2/mod_dav.so
|
||||
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
|
||||
LoadModule dav_lock_module libexec/apache2/mod_dav_lock_module
|
||||
```
|
||||
|
||||
### 步骤 2: 创建 DavLockDB 目录
|
||||
|
||||
WebDAV 需要一个目录来存储锁文件:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /var/run/dav
|
||||
sudo chown _www:_www /var/run/dav
|
||||
```
|
||||
|
||||
### 步骤 3: 创建 WebDAV 目录并链接 Obsidian
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /Library/WebServer/Documents/Obsidian
|
||||
sudo ln -s /Users/weishen/Obsidian/shenwei /Library/WebServer/Documents/Obsidian/shenwei
|
||||
```
|
||||
|
||||
### 步骤 4: 配置 WebDAV
|
||||
|
||||
创建配置文件:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/apache2/other/webdav.conf
|
||||
```
|
||||
|
||||
**配置内容(完整版):**
|
||||
|
||||
```apache
|
||||
DavLockDB /var/run/dav/DavLock
|
||||
|
||||
<IfModule mod_dav.c>
|
||||
DAVMinTimeout 240
|
||||
</IfModule>
|
||||
|
||||
Alias /webdav "/Library/WebServer/Documents"
|
||||
|
||||
<Directory "/Library/WebServer/Documents">
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
|
||||
DAV On
|
||||
DAVDepthInfinity off
|
||||
|
||||
Header set Allow "OPTIONS, GET, HEAD, POST, PUT, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK"
|
||||
|
||||
AuthType Basic
|
||||
AuthName "WebDAV"
|
||||
AuthUserFile /etc/apache2/webdav.users
|
||||
Require valid-user
|
||||
</Directory>
|
||||
```
|
||||
|
||||
### 步骤 5: 创建访问用户
|
||||
|
||||
```bash
|
||||
sudo htpasswd -c /etc/apache2/webdav.users webdav
|
||||
```
|
||||
|
||||
输入密码: `macmini_dav`
|
||||
|
||||
> **注意**: 用户名和密码需要与后续 Obsidian 客户端配置一致
|
||||
|
||||
### 步骤 6: 设置目录权限(重要!)
|
||||
|
||||
WebDAV 需要 Apache 运行用户 (`_www`) 对 Obsidian 目录有读写权限:
|
||||
|
||||
```bash
|
||||
# 修复用户目录权限
|
||||
sudo chmod o+x /Users/weishen
|
||||
sudo chmod -R o+rx /Users/weishen/Obsidian
|
||||
|
||||
# 将 Obsidian 目录所有权改为 _www
|
||||
sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian
|
||||
sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei
|
||||
sudo chmod -R 775 /Users/weishen/Obsidian/shenwei
|
||||
```
|
||||
|
||||
### 步骤 7: 启动 Apache 服务
|
||||
|
||||
```bash
|
||||
sudo apachectl start
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、FRP 端口映射配置
|
||||
|
||||
在 Mac Mini 上编辑 FRP 配置文件:
|
||||
|
||||
```bash
|
||||
sudo nano /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml
|
||||
```
|
||||
|
||||
**添加以下配置(WebDAV 使用 80 端口):**
|
||||
|
||||
```toml
|
||||
[[proxies]]
|
||||
name = "macmini-webdav"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 80
|
||||
remotePort = 60080
|
||||
```
|
||||
|
||||
> **重要**: 如果 Mac Mini 上设置了代理(科学上网),需要在 FRPC 启动时添加 `no_proxy` 环境变量:
|
||||
> ```bash
|
||||
> export no_proxy="192.227.222.142,127.0.0.1,localhost"
|
||||
> cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml
|
||||
> ```
|
||||
|
||||
---
|
||||
|
||||
## 三、VPS1 Caddy 反向代理配置
|
||||
|
||||
在 VPS1 上编辑 Caddyfile:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/caddy/Caddyfile
|
||||
```
|
||||
|
||||
**添加以下配置:**
|
||||
|
||||
```bash
|
||||
# WebDAV 外网访问
|
||||
macwebdav.ishenwei.online {
|
||||
reverse_proxy localhost:60080
|
||||
}
|
||||
```
|
||||
|
||||
**重载 Caddy 配置:**
|
||||
|
||||
```bash
|
||||
sudo systemctl reload caddy
|
||||
```
|
||||
|
||||
> **注意**: 需要先在 DNS 服务商处添加 A 记录:
|
||||
> - 主机记录: `macwebdav`
|
||||
> - 记录类型: `A`
|
||||
> - 记录值: `192.227.222.142` (VPS1 IP)
|
||||
|
||||
---
|
||||
|
||||
## 四、防火墙配置
|
||||
|
||||
### VPS1 防火墙(如果使用 UFW)
|
||||
|
||||
```bash
|
||||
sudo ufw allow 60080/tcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、常用命令
|
||||
|
||||
### Apache 命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|------|------|
|
||||
| `sudo apachectl start` | 启动 Apache |
|
||||
| `sudo apachectl stop` | 停止 Apache |
|
||||
| `sudo apachectl restart` | 重启 Apache |
|
||||
| `sudo apachectl -t` | 检查配置语法 |
|
||||
| `sudo apachectl -M \| grep dav` | 确认 WebDAV 模块已加载 |
|
||||
|
||||
### FRP 命令
|
||||
|
||||
```bash
|
||||
# 重启 FRPC(Mac Mini 上)
|
||||
# in tmux
|
||||
tmux attach -t frpc
|
||||
# 停止现有进程 (Ctrl+C in tmux)
|
||||
# 重启(注意添加 no_proxy)
|
||||
export no_proxy="192.227.222.142,127.0.0.1,localhost" && cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml
|
||||
```
|
||||
|
||||
### Caddy 命令(VPS1)
|
||||
|
||||
```bash
|
||||
sudo systemctl reload caddy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、Obsidian 客户端连接配置(最终验证版本)
|
||||
|
||||
### 配置参数
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| **服务器地址** | `https://macwebdav.ishenwei.online/webdav/Obsidian/` |
|
||||
| **用户名** | `webdav` |
|
||||
| **密码** | `macmini_dav` |
|
||||
| **鉴权类型** | `basic` |
|
||||
| **Depth header** | `只支持 depth='1'` |
|
||||
|
||||
### 配置步骤
|
||||
|
||||
1. 打开 Obsidian
|
||||
2. 安装 **Remotely Save** 插件(或其他 WebDAV 同步插件)
|
||||
3. 选择远程服务为 **WebDAV**
|
||||
4. 填写上方配置参数
|
||||
5. 点击 **检查** 按钮验证连接
|
||||
6. 开始同步
|
||||
|
||||
---
|
||||
|
||||
## 七、内网访问
|
||||
|
||||
- **URL**: `http://192.168.3.189/webdav/`
|
||||
- **用户名**: `webdav`
|
||||
- **密码**: `macmini_dav`
|
||||
|
||||
---
|
||||
|
||||
## 八、注意事项
|
||||
|
||||
1. **安全提示**:
|
||||
- Basic 认证密码明文传输,建议仅在内网使用
|
||||
- 外网访问建议配合 HTTPS(Caddy 自动提供 Let's Encrypt)
|
||||
|
||||
2. **端口规划**:
|
||||
- Apache: 80
|
||||
- FRP 映射: 60080
|
||||
|
||||
3. **防火墙**:
|
||||
- Mac 防火墙需允许 80 端口入站
|
||||
- VPS 防火墙需开放 FRP 映射的端口
|
||||
|
||||
4. **开机自启**:
|
||||
- Apache 开机自动启动(MacOS 默认行为)
|
||||
- FRPC 需配置开机自启(tmux 或 launchd)
|
||||
|
||||
5. **代理问题**:
|
||||
- 如果 Mac Mini 使用科学上网代理,FRPC 需要设置 `no_proxy` 环境变量
|
||||
- 参考上面的 FRP 命令部分
|
||||
|
||||
---
|
||||
|
||||
## 九、故障排除
|
||||
|
||||
### 问题:500 Internal Server Error
|
||||
|
||||
**原因**: DavLockDB 目录权限不足
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
sudo chown -R _www:_www /var/run/dav
|
||||
```
|
||||
|
||||
### 问题:403 Forbidden
|
||||
|
||||
**原因**: Obsidian 目录权限不足,Apache 无法写入
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian
|
||||
sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei
|
||||
sudo chmod -R 775 /Users/weishen/Obsidian/shenwei
|
||||
```
|
||||
|
||||
### 问题:无法解析域名
|
||||
|
||||
**原因**: DNS 记录未生效
|
||||
|
||||
**解决**:
|
||||
1. 确认 DNS A 记录已添加
|
||||
2. 等待 5-30 分钟 DNS 传播
|
||||
3. 本地刷新 DNS 缓存:`sudo dscacheutil -flushcache`
|
||||
|
||||
### 问题:FRPC 连接超时
|
||||
|
||||
**原因**: Mac Mini 代理设置干扰 FRPC 连接
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
export no_proxy="192.227.222.142,127.0.0.1,localhost"
|
||||
```
|
||||
|
||||
### 检查 Apache 状态
|
||||
```bash
|
||||
sudo apachectl status
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
```bash
|
||||
sudo tail -f /var/log/apache2/error_log
|
||||
```
|
||||
|
||||
### 确认 WebDAV 模块加载
|
||||
```bash
|
||||
sudo apachectl -M | grep -E "dav|webdav"
|
||||
```
|
||||
|
||||
### 测试本地访问
|
||||
```bash
|
||||
curl -u webdav:macmini_dav http://127.0.0.1/webdav/
|
||||
```
|
||||
|
||||
### 测试 FRP 端口连通性(VPS1)
|
||||
```bash
|
||||
curl -u webdav:macmini_dav http://localhost:60080/webdav/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、测试步骤
|
||||
|
||||
### 阶段 1: Apache 本地测试(Mac Mini)
|
||||
|
||||
#### 1.1 检查 Apache 状态
|
||||
```bash
|
||||
sudo apachectl status
|
||||
```
|
||||
**预期输出**: Apache 运行中 (running)
|
||||
|
||||
#### 1.2 确认 WebDAV 模块已加载
|
||||
```bash
|
||||
sudo apachectl -M | grep -E "dav|webdav"
|
||||
```
|
||||
**预期输出**:
|
||||
- `dav_module (shared)`
|
||||
- `dav_fs_module (shared)`
|
||||
- `dav_lock_module (shared)`
|
||||
|
||||
#### 1.3 测试本地认证访问
|
||||
```bash
|
||||
curl -u webdav:macmini_dav -I http://127.0.0.1/webdav/
|
||||
```
|
||||
**预期输出**: HTTP/1.1 200 OK
|
||||
|
||||
#### 1.4 列出 WebDAV 目录内容
|
||||
```bash
|
||||
curl -u webdav:macmini_dav -X PROPFIND -H "Depth: 1" http://127.0.0.1/webdav/Obsidian/shenwei/
|
||||
```
|
||||
**预期输出**: XML 格式的目录列表
|
||||
|
||||
---
|
||||
|
||||
### 阶段 2: FRP 连通性测试
|
||||
|
||||
#### 2.1 检查 FRPC 状态(Mac Mini)
|
||||
```bash
|
||||
tmux capture-pane -t frpc -p | tail -10
|
||||
```
|
||||
**预期输出**: 看到 `[macmini-webdav] start proxy success`
|
||||
|
||||
#### 2.2 测试 VPS1 端口监听
|
||||
```bash
|
||||
# 在 VPS1 上执行
|
||||
sudo ss -tlnp | grep 60080
|
||||
```
|
||||
**预期输出**: `*:60080 LISTEN`
|
||||
|
||||
#### 2.3 测试内网通过 FRP 访问(从 VPS1 测试)
|
||||
```bash
|
||||
# 在 VPS1 上执行
|
||||
curl -u webdav:macmini_dav -I http://localhost:60080/webdav/
|
||||
```
|
||||
**预期输出**: HTTP/1.1 200 OK
|
||||
|
||||
---
|
||||
|
||||
### 阶段 3: Caddy 反向代理测试
|
||||
|
||||
#### 3.1 检查 DNS 解析
|
||||
```bash
|
||||
dig +short macwebdav.ishenwei.online
|
||||
```
|
||||
**预期输出**: `192.227.222.142`
|
||||
|
||||
#### 3.2 测试 HTTPS 访问
|
||||
```bash
|
||||
curl -k -u webdav:macmini_dav -I https://macwebdav.ishenwei.online/webdav/
|
||||
```
|
||||
**预期输出**: HTTP/1.1 200 OK
|
||||
|
||||
---
|
||||
|
||||
### 阶段 4: 完整链路测试清单
|
||||
|
||||
| 序号 | 测试项 | 测试命令/方法 | 预期结果 |
|
||||
|------|--------|--------------|----------|
|
||||
| 1 | Apache 运行中 | `sudo apachectl status` | running |
|
||||
| 2 | WebDAV 模块已加载 | `apachectl -M \| grep dav` | dav_module |
|
||||
| 3 | 本地认证访问 | `curl -u webdav:macmini_dav http://127.0.0.1/webdav/` | 200 OK |
|
||||
| 4 | FRPC 运行正常 | 查看 tmux 日志 | proxy success |
|
||||
| 5 | VPS1 端口监听 | `ss -tlnp \| grep 60080` | LISTEN |
|
||||
| 6 | 外网 HTTPS 访问 | `curl -k -u webdav:macmini_dav https://macwebdav.ishenwei.online/` | 200 OK |
|
||||
| 7 | Obsidian 连接 | 客户端测试 | 同步成功 |
|
||||
|
||||
---
|
||||
|
||||
## 十一、配置汇总表
|
||||
|
||||
| 项目 | 值 |
|
||||
| --------------------------------- | -------------------------------------------------- |
|
||||
| 内网 URL | http://192.168.3.189/webdav/ |
|
||||
| 外网域名 | https://macwebdav.ishenwei.online |
|
||||
| **Obsidian Remotely Save 最终配置路径** | https://macwebdav.ishenwei.online/webdav/Obsidian/ |
|
||||
| FRP 本地端口 | 80 |
|
||||
| FRP 远程端口 | 60080 |
|
||||
| WebDAV 用户 | webdav |
|
||||
| WebDAV 密码 | macmini_dav |
|
||||
|
||||
---
|
||||
|
||||
## 十二、关键修正记录
|
||||
|
||||
本配置在测试过程中发现并修复了以下问题:
|
||||
|
||||
1. **WebDAV 模块未启用**: 需要在 `httpd.conf` 中取消注释 DAV 相关模块
|
||||
2. **DavLockDB 权限问题**: 需要创建目录并设置 `_www` 所有权
|
||||
3. **符号链接权限问题**: 符号链接使用绝对路径 `/Users/weishen/...`
|
||||
4. **Obsidian 目录权限**: 需要将目录所有权改为 `_www` 并设置 775 权限
|
||||
5. **FRPC 代理干扰**: Mac Mini 的代理设置会干扰 FRPC 连接,需要设置 `no_proxy`
|
||||
6. **DNS 解析延迟**: 添加 DNS 记录后需要等待传播
|
||||
|
||||
---
|
||||
|
||||
*文档更新时间: 2026-03-19*
|
||||
---
|
||||
title: Mac Mini WebDAV 服务配置指南
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Mac Mini WebDAV 服务配置指南
|
||||
|
||||
## 目的
|
||||
在 Mac Mini 上通过原生 Apache 配置 WebDAV 服务,用于共享 Obsidian 笔记。
|
||||
|
||||
---
|
||||
|
||||
## 一、Mac Mini 本地配置
|
||||
|
||||
### 步骤 1: 启用 WebDAV 模块
|
||||
|
||||
编辑 Apache 配置文件,启用 DAV 模块:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/apache2/httpd.conf
|
||||
```
|
||||
|
||||
找到以下行并取消注释(去掉 `#`):
|
||||
|
||||
```apache
|
||||
LoadModule dav_module libexec/apache2/mod_dav.so
|
||||
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
|
||||
LoadModule dav_lock_module libexec/apache2/mod_dav_lock_module
|
||||
```
|
||||
|
||||
### 步骤 2: 创建 DavLockDB 目录
|
||||
|
||||
WebDAV 需要一个目录来存储锁文件:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /var/run/dav
|
||||
sudo chown _www:_www /var/run/dav
|
||||
```
|
||||
|
||||
### 步骤 3: 创建 WebDAV 目录并链接 Obsidian
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /Library/WebServer/Documents/Obsidian
|
||||
sudo ln -s /Users/weishen/Obsidian/shenwei /Library/WebServer/Documents/Obsidian/shenwei
|
||||
```
|
||||
|
||||
### 步骤 4: 配置 WebDAV
|
||||
|
||||
创建配置文件:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/apache2/other/webdav.conf
|
||||
```
|
||||
|
||||
**配置内容(完整版):**
|
||||
|
||||
```apache
|
||||
DavLockDB /var/run/dav/DavLock
|
||||
|
||||
<IfModule mod_dav.c>
|
||||
DAVMinTimeout 240
|
||||
</IfModule>
|
||||
|
||||
Alias /webdav "/Library/WebServer/Documents"
|
||||
|
||||
<Directory "/Library/WebServer/Documents">
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
|
||||
DAV On
|
||||
DAVDepthInfinity off
|
||||
|
||||
Header set Allow "OPTIONS, GET, HEAD, POST, PUT, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK"
|
||||
|
||||
AuthType Basic
|
||||
AuthName "WebDAV"
|
||||
AuthUserFile /etc/apache2/webdav.users
|
||||
Require valid-user
|
||||
</Directory>
|
||||
```
|
||||
|
||||
### 步骤 5: 创建访问用户
|
||||
|
||||
```bash
|
||||
sudo htpasswd -c /etc/apache2/webdav.users webdav
|
||||
```
|
||||
|
||||
输入密码: `macmini_dav`
|
||||
|
||||
> **注意**: 用户名和密码需要与后续 Obsidian 客户端配置一致
|
||||
|
||||
### 步骤 6: 设置目录权限(重要!)
|
||||
|
||||
WebDAV 需要 Apache 运行用户 (`_www`) 对 Obsidian 目录有读写权限:
|
||||
|
||||
```bash
|
||||
# 修复用户目录权限
|
||||
sudo chmod o+x /Users/weishen
|
||||
sudo chmod -R o+rx /Users/weishen/Obsidian
|
||||
|
||||
# 将 Obsidian 目录所有权改为 _www
|
||||
sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian
|
||||
sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei
|
||||
sudo chmod -R 775 /Users/weishen/Obsidian/shenwei
|
||||
```
|
||||
|
||||
### 步骤 7: 启动 Apache 服务
|
||||
|
||||
```bash
|
||||
sudo apachectl start
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、FRP 端口映射配置
|
||||
|
||||
在 Mac Mini 上编辑 FRP 配置文件:
|
||||
|
||||
```bash
|
||||
sudo nano /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml
|
||||
```
|
||||
|
||||
**添加以下配置(WebDAV 使用 80 端口):**
|
||||
|
||||
```toml
|
||||
[[proxies]]
|
||||
name = "macmini-webdav"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 80
|
||||
remotePort = 60080
|
||||
```
|
||||
|
||||
> **重要**: 如果 Mac Mini 上设置了代理(科学上网),需要在 FRPC 启动时添加 `no_proxy` 环境变量:
|
||||
> ```bash
|
||||
> export no_proxy="192.227.222.142,127.0.0.1,localhost"
|
||||
> cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml
|
||||
> ```
|
||||
|
||||
---
|
||||
|
||||
## 三、VPS1 Caddy 反向代理配置
|
||||
|
||||
在 VPS1 上编辑 Caddyfile:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/caddy/Caddyfile
|
||||
```
|
||||
|
||||
**添加以下配置:**
|
||||
|
||||
```bash
|
||||
# WebDAV 外网访问
|
||||
macwebdav.ishenwei.online {
|
||||
reverse_proxy localhost:60080
|
||||
}
|
||||
```
|
||||
|
||||
**重载 Caddy 配置:**
|
||||
|
||||
```bash
|
||||
sudo systemctl reload caddy
|
||||
```
|
||||
|
||||
> **注意**: 需要先在 DNS 服务商处添加 A 记录:
|
||||
> - 主机记录: `macwebdav`
|
||||
> - 记录类型: `A`
|
||||
> - 记录值: `192.227.222.142` (VPS1 IP)
|
||||
|
||||
---
|
||||
|
||||
## 四、防火墙配置
|
||||
|
||||
### VPS1 防火墙(如果使用 UFW)
|
||||
|
||||
```bash
|
||||
sudo ufw allow 60080/tcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、常用命令
|
||||
|
||||
### Apache 命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|------|------|
|
||||
| `sudo apachectl start` | 启动 Apache |
|
||||
| `sudo apachectl stop` | 停止 Apache |
|
||||
| `sudo apachectl restart` | 重启 Apache |
|
||||
| `sudo apachectl -t` | 检查配置语法 |
|
||||
| `sudo apachectl -M \| grep dav` | 确认 WebDAV 模块已加载 |
|
||||
|
||||
### FRP 命令
|
||||
|
||||
```bash
|
||||
# 重启 FRPC(Mac Mini 上)
|
||||
# in tmux
|
||||
tmux attach -t frpc
|
||||
# 停止现有进程 (Ctrl+C in tmux)
|
||||
# 重启(注意添加 no_proxy)
|
||||
export no_proxy="192.227.222.142,127.0.0.1,localhost" && cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml
|
||||
```
|
||||
|
||||
### Caddy 命令(VPS1)
|
||||
|
||||
```bash
|
||||
sudo systemctl reload caddy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、Obsidian 客户端连接配置(最终验证版本)
|
||||
|
||||
### 配置参数
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| **服务器地址** | `https://macwebdav.ishenwei.online/webdav/Obsidian/` |
|
||||
| **用户名** | `webdav` |
|
||||
| **密码** | `macmini_dav` |
|
||||
| **鉴权类型** | `basic` |
|
||||
| **Depth header** | `只支持 depth='1'` |
|
||||
|
||||
### 配置步骤
|
||||
|
||||
1. 打开 Obsidian
|
||||
2. 安装 **Remotely Save** 插件(或其他 WebDAV 同步插件)
|
||||
3. 选择远程服务为 **WebDAV**
|
||||
4. 填写上方配置参数
|
||||
5. 点击 **检查** 按钮验证连接
|
||||
6. 开始同步
|
||||
|
||||
---
|
||||
|
||||
## 七、内网访问
|
||||
|
||||
- **URL**: `http://192.168.3.189/webdav/`
|
||||
- **用户名**: `webdav`
|
||||
- **密码**: `macmini_dav`
|
||||
|
||||
---
|
||||
|
||||
## 八、注意事项
|
||||
|
||||
1. **安全提示**:
|
||||
- Basic 认证密码明文传输,建议仅在内网使用
|
||||
- 外网访问建议配合 HTTPS(Caddy 自动提供 Let's Encrypt)
|
||||
|
||||
2. **端口规划**:
|
||||
- Apache: 80
|
||||
- FRP 映射: 60080
|
||||
|
||||
3. **防火墙**:
|
||||
- Mac 防火墙需允许 80 端口入站
|
||||
- VPS 防火墙需开放 FRP 映射的端口
|
||||
|
||||
4. **开机自启**:
|
||||
- Apache 开机自动启动(MacOS 默认行为)
|
||||
- FRPC 需配置开机自启(tmux 或 launchd)
|
||||
|
||||
5. **代理问题**:
|
||||
- 如果 Mac Mini 使用科学上网代理,FRPC 需要设置 `no_proxy` 环境变量
|
||||
- 参考上面的 FRP 命令部分
|
||||
|
||||
---
|
||||
|
||||
## 九、故障排除
|
||||
|
||||
### 问题:500 Internal Server Error
|
||||
|
||||
**原因**: DavLockDB 目录权限不足
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
sudo chown -R _www:_www /var/run/dav
|
||||
```
|
||||
|
||||
### 问题:403 Forbidden
|
||||
|
||||
**原因**: Obsidian 目录权限不足,Apache 无法写入
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian
|
||||
sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei
|
||||
sudo chmod -R 775 /Users/weishen/Obsidian/shenwei
|
||||
```
|
||||
|
||||
### 问题:无法解析域名
|
||||
|
||||
**原因**: DNS 记录未生效
|
||||
|
||||
**解决**:
|
||||
1. 确认 DNS A 记录已添加
|
||||
2. 等待 5-30 分钟 DNS 传播
|
||||
3. 本地刷新 DNS 缓存:`sudo dscacheutil -flushcache`
|
||||
|
||||
### 问题:FRPC 连接超时
|
||||
|
||||
**原因**: Mac Mini 代理设置干扰 FRPC 连接
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
export no_proxy="192.227.222.142,127.0.0.1,localhost"
|
||||
```
|
||||
|
||||
### 检查 Apache 状态
|
||||
```bash
|
||||
sudo apachectl status
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
```bash
|
||||
sudo tail -f /var/log/apache2/error_log
|
||||
```
|
||||
|
||||
### 确认 WebDAV 模块加载
|
||||
```bash
|
||||
sudo apachectl -M | grep -E "dav|webdav"
|
||||
```
|
||||
|
||||
### 测试本地访问
|
||||
```bash
|
||||
curl -u webdav:macmini_dav http://127.0.0.1/webdav/
|
||||
```
|
||||
|
||||
### 测试 FRP 端口连通性(VPS1)
|
||||
```bash
|
||||
curl -u webdav:macmini_dav http://localhost:60080/webdav/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、测试步骤
|
||||
|
||||
### 阶段 1: Apache 本地测试(Mac Mini)
|
||||
|
||||
#### 1.1 检查 Apache 状态
|
||||
```bash
|
||||
sudo apachectl status
|
||||
```
|
||||
**预期输出**: Apache 运行中 (running)
|
||||
|
||||
#### 1.2 确认 WebDAV 模块已加载
|
||||
```bash
|
||||
sudo apachectl -M | grep -E "dav|webdav"
|
||||
```
|
||||
**预期输出**:
|
||||
- `dav_module (shared)`
|
||||
- `dav_fs_module (shared)`
|
||||
- `dav_lock_module (shared)`
|
||||
|
||||
#### 1.3 测试本地认证访问
|
||||
```bash
|
||||
curl -u webdav:macmini_dav -I http://127.0.0.1/webdav/
|
||||
```
|
||||
**预期输出**: HTTP/1.1 200 OK
|
||||
|
||||
#### 1.4 列出 WebDAV 目录内容
|
||||
```bash
|
||||
curl -u webdav:macmini_dav -X PROPFIND -H "Depth: 1" http://127.0.0.1/webdav/Obsidian/shenwei/
|
||||
```
|
||||
**预期输出**: XML 格式的目录列表
|
||||
|
||||
---
|
||||
|
||||
### 阶段 2: FRP 连通性测试
|
||||
|
||||
#### 2.1 检查 FRPC 状态(Mac Mini)
|
||||
```bash
|
||||
tmux capture-pane -t frpc -p | tail -10
|
||||
```
|
||||
**预期输出**: 看到 `[macmini-webdav] start proxy success`
|
||||
|
||||
#### 2.2 测试 VPS1 端口监听
|
||||
```bash
|
||||
# 在 VPS1 上执行
|
||||
sudo ss -tlnp | grep 60080
|
||||
```
|
||||
**预期输出**: `*:60080 LISTEN`
|
||||
|
||||
#### 2.3 测试内网通过 FRP 访问(从 VPS1 测试)
|
||||
```bash
|
||||
# 在 VPS1 上执行
|
||||
curl -u webdav:macmini_dav -I http://localhost:60080/webdav/
|
||||
```
|
||||
**预期输出**: HTTP/1.1 200 OK
|
||||
|
||||
---
|
||||
|
||||
### 阶段 3: Caddy 反向代理测试
|
||||
|
||||
#### 3.1 检查 DNS 解析
|
||||
```bash
|
||||
dig +short macwebdav.ishenwei.online
|
||||
```
|
||||
**预期输出**: `192.227.222.142`
|
||||
|
||||
#### 3.2 测试 HTTPS 访问
|
||||
```bash
|
||||
curl -k -u webdav:macmini_dav -I https://macwebdav.ishenwei.online/webdav/
|
||||
```
|
||||
**预期输出**: HTTP/1.1 200 OK
|
||||
|
||||
---
|
||||
|
||||
### 阶段 4: 完整链路测试清单
|
||||
|
||||
| 序号 | 测试项 | 测试命令/方法 | 预期结果 |
|
||||
|------|--------|--------------|----------|
|
||||
| 1 | Apache 运行中 | `sudo apachectl status` | running |
|
||||
| 2 | WebDAV 模块已加载 | `apachectl -M \| grep dav` | dav_module |
|
||||
| 3 | 本地认证访问 | `curl -u webdav:macmini_dav http://127.0.0.1/webdav/` | 200 OK |
|
||||
| 4 | FRPC 运行正常 | 查看 tmux 日志 | proxy success |
|
||||
| 5 | VPS1 端口监听 | `ss -tlnp \| grep 60080` | LISTEN |
|
||||
| 6 | 外网 HTTPS 访问 | `curl -k -u webdav:macmini_dav https://macwebdav.ishenwei.online/` | 200 OK |
|
||||
| 7 | Obsidian 连接 | 客户端测试 | 同步成功 |
|
||||
|
||||
---
|
||||
|
||||
## 十一、配置汇总表
|
||||
|
||||
| 项目 | 值 |
|
||||
| --------------------------------- | -------------------------------------------------- |
|
||||
| 内网 URL | http://192.168.3.189/webdav/ |
|
||||
| 外网域名 | https://macwebdav.ishenwei.online |
|
||||
| **Obsidian Remotely Save 最终配置路径** | https://macwebdav.ishenwei.online/webdav/Obsidian/ |
|
||||
| FRP 本地端口 | 80 |
|
||||
| FRP 远程端口 | 60080 |
|
||||
| WebDAV 用户 | webdav |
|
||||
| WebDAV 密码 | macmini_dav |
|
||||
|
||||
---
|
||||
|
||||
## 十二、关键修正记录
|
||||
|
||||
本配置在测试过程中发现并修复了以下问题:
|
||||
|
||||
1. **WebDAV 模块未启用**: 需要在 `httpd.conf` 中取消注释 DAV 相关模块
|
||||
2. **DavLockDB 权限问题**: 需要创建目录并设置 `_www` 所有权
|
||||
3. **符号链接权限问题**: 符号链接使用绝对路径 `/Users/weishen/...`
|
||||
4. **Obsidian 目录权限**: 需要将目录所有权改为 `_www` 并设置 775 权限
|
||||
5. **FRPC 代理干扰**: Mac Mini 的代理设置会干扰 FRPC 连接,需要设置 `no_proxy`
|
||||
6. **DNS 解析延迟**: 添加 DNS 记录后需要等待传播
|
||||
|
||||
---
|
||||
|
||||
*文档更新时间: 2026-03-19*
|
||||
|
||||
@@ -1,314 +1,314 @@
|
||||
---
|
||||
title: Slack 配置 OpenClaw Bot 完整步骤
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Slack 配置 OpenClaw Bot 完整步骤
|
||||
|
||||
## 第一步:在 Slack API 创建 App
|
||||
|
||||
1. 访问 [Slack API](https://api.slack.com/apps) 并登录
|
||||
2. 点击 **"Create New App"** → 选择 **"From an app manifest"**
|
||||
3. 选择要创建的工作区
|
||||
4. 粘贴下方的 Manifest JSON(根据需要修改名称)
|
||||
|
||||
```json
|
||||
{
|
||||
"display_information": {
|
||||
"name": "YourBotName",
|
||||
"description": "OpenClaw connector for Slack",
|
||||
"background_color": "#1d7c00"
|
||||
},
|
||||
"features": {
|
||||
"app_home": {
|
||||
"home_tab_enabled": false,
|
||||
"messages_tab_enabled": true,
|
||||
"messages_tab_read_only_enabled": false
|
||||
},
|
||||
"bot_user": {
|
||||
"display_name": "YourBotName",
|
||||
"always_online": true
|
||||
}
|
||||
},
|
||||
"oauth_config": {
|
||||
"scopes": {
|
||||
"bot": [
|
||||
"im:write",
|
||||
"app_mentions:read",
|
||||
"assistant:write",
|
||||
"channels:history",
|
||||
"channels:read",
|
||||
"chat:write",
|
||||
"chat:write.customize",
|
||||
"chat:write.public",
|
||||
"emoji:read",
|
||||
"files:read",
|
||||
"files:write",
|
||||
"groups:history",
|
||||
"groups:read",
|
||||
"groups:write",
|
||||
"im:history",
|
||||
"im:read",
|
||||
"mpim:history",
|
||||
"pins:read",
|
||||
"pins:write",
|
||||
"reactions:read",
|
||||
"reactions:write",
|
||||
"usergroups:read",
|
||||
"usergroups:write",
|
||||
"users:read",
|
||||
"users:write"
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"event_subscriptions": {
|
||||
"bot_events": [
|
||||
"app_mention",
|
||||
"message.channels",
|
||||
"message.groups",
|
||||
"message.im",
|
||||
"message.mpim",
|
||||
"reaction_added",
|
||||
"reaction_removed",
|
||||
"member_joined_channel",
|
||||
"member_left_channel",
|
||||
"channel_rename",
|
||||
"pin_added",
|
||||
"pin_removed"
|
||||
]
|
||||
},
|
||||
"interactivity": {
|
||||
"is_enabled": true
|
||||
},
|
||||
"org_deploy_enabled": false,
|
||||
"socket_mode_enabled": true,
|
||||
"token_rotation_enabled": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 第二步:安装 App 到工作区
|
||||
|
||||
1. 在左侧菜单点击 **"Install"**
|
||||
2. 点击 **"Install to Workspace"**
|
||||
3. 授权后获取 **Bot User OAuth Token** (格式: `xoxb-...`)
|
||||
|
||||
## 第三步:获取 App Level Token
|
||||
|
||||
1. 在左侧菜单点击 **"Basic Information"**
|
||||
2. 滚动到 **"App-Level Tokens"** 部分
|
||||
3. 点击 **"Generate Token and Scopes"**
|
||||
4. 添加 `connections:write` 权限
|
||||
5. 生成并获取 **App Level Token** (格式: `xapp-1-...`)
|
||||
|
||||
## 第四步:添加 Channel 到 OpenClaw
|
||||
|
||||
```bash
|
||||
openclaw channels add --channel slack --account <账号名> --bot-token <Bot User OAuth Token> --app-token <App Level Token>
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
- `--account`: 给这个 Slack 连接起的名字(如 xingyao, xingshu)
|
||||
- `--bot-token`: 第一步获取的 Bot User OAuth Token
|
||||
- `--app-token`: 第三步获取的 App Level Token
|
||||
|
||||
## 第五步:绑定 Agent 到 Slack 账号
|
||||
|
||||
```bash
|
||||
openclaw agents bind --agent <agent名称> --bind slack:<账号名>
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
- `--agent`: 要绑定的 OpenClaw agent 名称
|
||||
- `--bind`: 格式为 `slack:<账号名>`,账号名与第四步一致
|
||||
|
||||
## 第六步:验证连接
|
||||
|
||||
1. 在 Slack 中向 Bot 发送私信或 @Bot 提及
|
||||
2. 确认 OpenClaw 能够接收和响应消息
|
||||
|
||||
---
|
||||
|
||||
### 现有 Bot 配置信息(请勿修改)
|
||||
|
||||
### 星枢
|
||||
- Bot User OAuth Token
|
||||
```
|
||||
xoxb-10749198837424-10729993030356-fZMcpT9AwVYjpZAoALh9G3Pf
|
||||
```
|
||||
|
||||
- App Level Token
|
||||
```
|
||||
xapp-1-A0ALWUV7P7H-10720045898595-6d84e6b3c450587efe928459ab3ccfdefac2f7cb506ff741aabce688977644e8
|
||||
```
|
||||
|
||||
- Add Channel
|
||||
```
|
||||
openclaw channels add --channel slack --account xingshu --bot-token xoxb-10749198837424-10729993030356-fZMcpT9AwVYjpZAoALh9G3Pf --app-token xapp-1-A0ALWUV7P7H-10720045898595-6d84e6b3c450587efe928459ab3ccfdefac2f7cb506ff741aabce688977644e8
|
||||
```
|
||||
- Bind Agent
|
||||
```
|
||||
openclaw agents bind --agent main --bind slack:xingshu
|
||||
```
|
||||
|
||||
### 星曜
|
||||
- Bot User OAuth Token
|
||||
```
|
||||
xoxb-10749198837424-10717815209651-z0T78ljkOGeNddAWcajl2Wxg
|
||||
```
|
||||
|
||||
- App Level
|
||||
```
|
||||
xapp-1-A0AMDPLP99A-10722160508566-6cedd2c05c0a338435aaab98c9449ef01437b315b049850ba574ff67c1fbd68b
|
||||
```
|
||||
|
||||
- Add Channel
|
||||
```
|
||||
openclaw channels add --channel slack --account xingyao --bot-token xoxb-10749198837424-10717815209651-z0T78ljkOGeNddAWcajl2Wxg --app-token xapp-1-A0AMDPLP99A-10722160508566-6cedd2c05c0a338435aaab98c9449ef01437b315b049850ba574ff67c1fbd68b
|
||||
```
|
||||
- Bind Agent
|
||||
```
|
||||
openclaw agents bind --agent xingyao --bind slack:xingyao
|
||||
```
|
||||
|
||||
### 星辉
|
||||
- Bot User OAuth Token
|
||||
```
|
||||
xoxb-10749198837424-10724815197190-kEkxZmkBKQrYnY8Ov2hadu3O
|
||||
```
|
||||
- App Level
|
||||
```
|
||||
xapp-1-A0AMCRT5E10-10720526191091-9ed0aff401f0feb16994d9d20a5256b6417fa83e0b743c1d63f8a8838fba822f
|
||||
```
|
||||
|
||||
|
||||
- Add Channel
|
||||
```
|
||||
openclaw channels add --channel slack --account xinghui --bot-token xoxb-10749198837424-10724815197190-kEkxZmkBKQrYnY8Ov2hadu3O --app-token xapp-1-A0AMCRT5E10-10720526191091-9ed0aff401f0feb16994d9d20a5256b6417fa83e0b743c1d63f8a8838fba822f
|
||||
```
|
||||
- Bind Agent
|
||||
```
|
||||
openclaw agents bind --agent xinghui --bind slack:xinghui
|
||||
```
|
||||
|
||||
### 星匠
|
||||
- Bot User Token
|
||||
```
|
||||
xoxb-10761503478464-10740175454102-vxUDeZUSEMmFdDpOdtBzThDV
|
||||
```
|
||||
- App Level Token
|
||||
```
|
||||
xapp-1-A0AMQP95013-10735828759507-9053e4e2297afa6b2cd87b3672bb4990240e4adf779990f7264ca59359989846
|
||||
```
|
||||
|
||||
```
|
||||
openclaw channels add --channel slack --account xingjiang --bot-token xoxb-10761503478464-10740175454102-vxUDeZUSEMmFdDpOdtBzThDV --app-token xapp-1-A0AMQP95013-10735828759507-9053e4e2297afa6b2cd87b3672bb4990240e4adf779990f7264ca59359989846
|
||||
```
|
||||
|
||||
```
|
||||
openclaw agents bind --agent xingjiang --bind slack:xingjiang
|
||||
```
|
||||
|
||||
|
||||
### 云匠
|
||||
|
||||
```
|
||||
xapp-1-A0ANEGJTQKS-10730870512613-38e052035fd3fe267f09ef0cb3f007c0f2ea6a1f44a9fb6a34deba2505797ea8
|
||||
```
|
||||
|
||||
```
|
||||
xoxb-10761503478464-10718827766407-EF5ko4RpZ4IhhXemRxK20eFz
|
||||
```
|
||||
|
||||
```
|
||||
openclaw channels add --channel slack --account yunjiang --bot-token xoxb-10761503478464-10718827766407-EF5ko4RpZ4IhhXemRxK20eFz --app-token xapp-1-A0ANEGJTQKS-10730870512613-38e052035fd3fe267f09ef0cb3f007c0f2ea6a1f44a9fb6a34deba2505797ea8
|
||||
```
|
||||
|
||||
```
|
||||
openclaw agents bind --agent yunjiang --bind slack:yunjiang
|
||||
```
|
||||
|
||||
|
||||
# Create app from manifest
|
||||
```
|
||||
{
|
||||
"display_information": {
|
||||
"name": "XingHui",
|
||||
"description": "OpenClaw connector for OpenClaw",
|
||||
"background_color": "#1d7c00"
|
||||
},
|
||||
"features": {
|
||||
"app_home": {
|
||||
"home_tab_enabled": false,
|
||||
"messages_tab_enabled": true,
|
||||
"messages_tab_read_only_enabled": false
|
||||
},
|
||||
"bot_user": {
|
||||
"display_name": "XingHui",
|
||||
"always_online": true
|
||||
}
|
||||
},
|
||||
"oauth_config": {
|
||||
"scopes": {
|
||||
"bot": [
|
||||
"im:write",
|
||||
"app_mentions:read",
|
||||
"assistant:write",
|
||||
"channels:history",
|
||||
"channels:read",
|
||||
"chat:write",
|
||||
"chat:write.customize",
|
||||
"chat:write.public",
|
||||
"emoji:read",
|
||||
"files:read",
|
||||
"files:write",
|
||||
"groups:history",
|
||||
"groups:read",
|
||||
"groups:write",
|
||||
"im:history",
|
||||
"im:read",
|
||||
"mpim:history",
|
||||
"pins:read",
|
||||
"pins:write",
|
||||
"reactions:read",
|
||||
"reactions:write",
|
||||
"usergroups:read",
|
||||
"usergroups:write",
|
||||
"users:read",
|
||||
"users:write"
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"event_subscriptions": {
|
||||
"bot_events": [
|
||||
"app_mention",
|
||||
"message.channels",
|
||||
"message.groups",
|
||||
"message.im",
|
||||
"message.mpim",
|
||||
"reaction_added",
|
||||
"reaction_removed",
|
||||
"member_joined_channel",
|
||||
"member_left_channel",
|
||||
"channel_rename",
|
||||
"pin_added",
|
||||
"pin_removed"
|
||||
]
|
||||
},
|
||||
"interactivity": {
|
||||
"is_enabled": true
|
||||
},
|
||||
"org_deploy_enabled": false,
|
||||
"socket_mode_enabled": true,
|
||||
"token_rotation_enabled": false
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
---
|
||||
title: Slack 配置 OpenClaw Bot 完整步骤
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Slack 配置 OpenClaw Bot 完整步骤
|
||||
|
||||
## 第一步:在 Slack API 创建 App
|
||||
|
||||
1. 访问 [Slack API](https://api.slack.com/apps) 并登录
|
||||
2. 点击 **"Create New App"** → 选择 **"From an app manifest"**
|
||||
3. 选择要创建的工作区
|
||||
4. 粘贴下方的 Manifest JSON(根据需要修改名称)
|
||||
|
||||
```json
|
||||
{
|
||||
"display_information": {
|
||||
"name": "YourBotName",
|
||||
"description": "OpenClaw connector for Slack",
|
||||
"background_color": "#1d7c00"
|
||||
},
|
||||
"features": {
|
||||
"app_home": {
|
||||
"home_tab_enabled": false,
|
||||
"messages_tab_enabled": true,
|
||||
"messages_tab_read_only_enabled": false
|
||||
},
|
||||
"bot_user": {
|
||||
"display_name": "YourBotName",
|
||||
"always_online": true
|
||||
}
|
||||
},
|
||||
"oauth_config": {
|
||||
"scopes": {
|
||||
"bot": [
|
||||
"im:write",
|
||||
"app_mentions:read",
|
||||
"assistant:write",
|
||||
"channels:history",
|
||||
"channels:read",
|
||||
"chat:write",
|
||||
"chat:write.customize",
|
||||
"chat:write.public",
|
||||
"emoji:read",
|
||||
"files:read",
|
||||
"files:write",
|
||||
"groups:history",
|
||||
"groups:read",
|
||||
"groups:write",
|
||||
"im:history",
|
||||
"im:read",
|
||||
"mpim:history",
|
||||
"pins:read",
|
||||
"pins:write",
|
||||
"reactions:read",
|
||||
"reactions:write",
|
||||
"usergroups:read",
|
||||
"usergroups:write",
|
||||
"users:read",
|
||||
"users:write"
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"event_subscriptions": {
|
||||
"bot_events": [
|
||||
"app_mention",
|
||||
"message.channels",
|
||||
"message.groups",
|
||||
"message.im",
|
||||
"message.mpim",
|
||||
"reaction_added",
|
||||
"reaction_removed",
|
||||
"member_joined_channel",
|
||||
"member_left_channel",
|
||||
"channel_rename",
|
||||
"pin_added",
|
||||
"pin_removed"
|
||||
]
|
||||
},
|
||||
"interactivity": {
|
||||
"is_enabled": true
|
||||
},
|
||||
"org_deploy_enabled": false,
|
||||
"socket_mode_enabled": true,
|
||||
"token_rotation_enabled": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 第二步:安装 App 到工作区
|
||||
|
||||
1. 在左侧菜单点击 **"Install"**
|
||||
2. 点击 **"Install to Workspace"**
|
||||
3. 授权后获取 **Bot User OAuth Token** (格式: `xoxb-...`)
|
||||
|
||||
## 第三步:获取 App Level Token
|
||||
|
||||
1. 在左侧菜单点击 **"Basic Information"**
|
||||
2. 滚动到 **"App-Level Tokens"** 部分
|
||||
3. 点击 **"Generate Token and Scopes"**
|
||||
4. 添加 `connections:write` 权限
|
||||
5. 生成并获取 **App Level Token** (格式: `xapp-1-...`)
|
||||
|
||||
## 第四步:添加 Channel 到 OpenClaw
|
||||
|
||||
```bash
|
||||
openclaw channels add --channel slack --account <账号名> --bot-token <Bot User OAuth Token> --app-token <App Level Token>
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
- `--account`: 给这个 Slack 连接起的名字(如 xingyao, xingshu)
|
||||
- `--bot-token`: 第一步获取的 Bot User OAuth Token
|
||||
- `--app-token`: 第三步获取的 App Level Token
|
||||
|
||||
## 第五步:绑定 Agent 到 Slack 账号
|
||||
|
||||
```bash
|
||||
openclaw agents bind --agent <agent名称> --bind slack:<账号名>
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
- `--agent`: 要绑定的 OpenClaw agent 名称
|
||||
- `--bind`: 格式为 `slack:<账号名>`,账号名与第四步一致
|
||||
|
||||
## 第六步:验证连接
|
||||
|
||||
1. 在 Slack 中向 Bot 发送私信或 @Bot 提及
|
||||
2. 确认 OpenClaw 能够接收和响应消息
|
||||
|
||||
---
|
||||
|
||||
### 现有 Bot 配置信息(请勿修改)
|
||||
|
||||
### 星枢
|
||||
- Bot User OAuth Token
|
||||
```
|
||||
xoxb-10749198837424-10729993030356-fZMcpT9AwVYjpZAoALh9G3Pf
|
||||
```
|
||||
|
||||
- App Level Token
|
||||
```
|
||||
xapp-1-A0ALWUV7P7H-10720045898595-6d84e6b3c450587efe928459ab3ccfdefac2f7cb506ff741aabce688977644e8
|
||||
```
|
||||
|
||||
- Add Channel
|
||||
```
|
||||
openclaw channels add --channel slack --account xingshu --bot-token xoxb-10749198837424-10729993030356-fZMcpT9AwVYjpZAoALh9G3Pf --app-token xapp-1-A0ALWUV7P7H-10720045898595-6d84e6b3c450587efe928459ab3ccfdefac2f7cb506ff741aabce688977644e8
|
||||
```
|
||||
- Bind Agent
|
||||
```
|
||||
openclaw agents bind --agent main --bind slack:xingshu
|
||||
```
|
||||
|
||||
### 星曜
|
||||
- Bot User OAuth Token
|
||||
```
|
||||
xoxb-10749198837424-10717815209651-z0T78ljkOGeNddAWcajl2Wxg
|
||||
```
|
||||
|
||||
- App Level
|
||||
```
|
||||
xapp-1-A0AMDPLP99A-10722160508566-6cedd2c05c0a338435aaab98c9449ef01437b315b049850ba574ff67c1fbd68b
|
||||
```
|
||||
|
||||
- Add Channel
|
||||
```
|
||||
openclaw channels add --channel slack --account xingyao --bot-token xoxb-10749198837424-10717815209651-z0T78ljkOGeNddAWcajl2Wxg --app-token xapp-1-A0AMDPLP99A-10722160508566-6cedd2c05c0a338435aaab98c9449ef01437b315b049850ba574ff67c1fbd68b
|
||||
```
|
||||
- Bind Agent
|
||||
```
|
||||
openclaw agents bind --agent xingyao --bind slack:xingyao
|
||||
```
|
||||
|
||||
### 星辉
|
||||
- Bot User OAuth Token
|
||||
```
|
||||
xoxb-10749198837424-10724815197190-kEkxZmkBKQrYnY8Ov2hadu3O
|
||||
```
|
||||
- App Level
|
||||
```
|
||||
xapp-1-A0AMCRT5E10-10720526191091-9ed0aff401f0feb16994d9d20a5256b6417fa83e0b743c1d63f8a8838fba822f
|
||||
```
|
||||
|
||||
|
||||
- Add Channel
|
||||
```
|
||||
openclaw channels add --channel slack --account xinghui --bot-token xoxb-10749198837424-10724815197190-kEkxZmkBKQrYnY8Ov2hadu3O --app-token xapp-1-A0AMCRT5E10-10720526191091-9ed0aff401f0feb16994d9d20a5256b6417fa83e0b743c1d63f8a8838fba822f
|
||||
```
|
||||
- Bind Agent
|
||||
```
|
||||
openclaw agents bind --agent xinghui --bind slack:xinghui
|
||||
```
|
||||
|
||||
### 星匠
|
||||
- Bot User Token
|
||||
```
|
||||
xoxb-10761503478464-10740175454102-vxUDeZUSEMmFdDpOdtBzThDV
|
||||
```
|
||||
- App Level Token
|
||||
```
|
||||
xapp-1-A0AMQP95013-10735828759507-9053e4e2297afa6b2cd87b3672bb4990240e4adf779990f7264ca59359989846
|
||||
```
|
||||
|
||||
```
|
||||
openclaw channels add --channel slack --account xingjiang --bot-token xoxb-10761503478464-10740175454102-vxUDeZUSEMmFdDpOdtBzThDV --app-token xapp-1-A0AMQP95013-10735828759507-9053e4e2297afa6b2cd87b3672bb4990240e4adf779990f7264ca59359989846
|
||||
```
|
||||
|
||||
```
|
||||
openclaw agents bind --agent xingjiang --bind slack:xingjiang
|
||||
```
|
||||
|
||||
|
||||
### 云匠
|
||||
|
||||
```
|
||||
xapp-1-A0ANEGJTQKS-10730870512613-38e052035fd3fe267f09ef0cb3f007c0f2ea6a1f44a9fb6a34deba2505797ea8
|
||||
```
|
||||
|
||||
```
|
||||
xoxb-10761503478464-10718827766407-EF5ko4RpZ4IhhXemRxK20eFz
|
||||
```
|
||||
|
||||
```
|
||||
openclaw channels add --channel slack --account yunjiang --bot-token xoxb-10761503478464-10718827766407-EF5ko4RpZ4IhhXemRxK20eFz --app-token xapp-1-A0ANEGJTQKS-10730870512613-38e052035fd3fe267f09ef0cb3f007c0f2ea6a1f44a9fb6a34deba2505797ea8
|
||||
```
|
||||
|
||||
```
|
||||
openclaw agents bind --agent yunjiang --bind slack:yunjiang
|
||||
```
|
||||
|
||||
|
||||
# Create app from manifest
|
||||
```
|
||||
{
|
||||
"display_information": {
|
||||
"name": "XingHui",
|
||||
"description": "OpenClaw connector for OpenClaw",
|
||||
"background_color": "#1d7c00"
|
||||
},
|
||||
"features": {
|
||||
"app_home": {
|
||||
"home_tab_enabled": false,
|
||||
"messages_tab_enabled": true,
|
||||
"messages_tab_read_only_enabled": false
|
||||
},
|
||||
"bot_user": {
|
||||
"display_name": "XingHui",
|
||||
"always_online": true
|
||||
}
|
||||
},
|
||||
"oauth_config": {
|
||||
"scopes": {
|
||||
"bot": [
|
||||
"im:write",
|
||||
"app_mentions:read",
|
||||
"assistant:write",
|
||||
"channels:history",
|
||||
"channels:read",
|
||||
"chat:write",
|
||||
"chat:write.customize",
|
||||
"chat:write.public",
|
||||
"emoji:read",
|
||||
"files:read",
|
||||
"files:write",
|
||||
"groups:history",
|
||||
"groups:read",
|
||||
"groups:write",
|
||||
"im:history",
|
||||
"im:read",
|
||||
"mpim:history",
|
||||
"pins:read",
|
||||
"pins:write",
|
||||
"reactions:read",
|
||||
"reactions:write",
|
||||
"usergroups:read",
|
||||
"usergroups:write",
|
||||
"users:read",
|
||||
"users:write"
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"event_subscriptions": {
|
||||
"bot_events": [
|
||||
"app_mention",
|
||||
"message.channels",
|
||||
"message.groups",
|
||||
"message.im",
|
||||
"message.mpim",
|
||||
"reaction_added",
|
||||
"reaction_removed",
|
||||
"member_joined_channel",
|
||||
"member_left_channel",
|
||||
"channel_rename",
|
||||
"pin_added",
|
||||
"pin_removed"
|
||||
]
|
||||
},
|
||||
"interactivity": {
|
||||
"is_enabled": true
|
||||
},
|
||||
"org_deploy_enabled": false,
|
||||
"socket_mode_enabled": true,
|
||||
"token_rotation_enabled": false
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
@@ -1,174 +1,174 @@
|
||||
#!/bin/bash
|
||||
# 获取所有服务器上Docker环境运行的应用列表
|
||||
|
||||
set -e
|
||||
|
||||
echo "🐳 Docker应用列表 - 所有服务器"
|
||||
echo "================================"
|
||||
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
echo ""
|
||||
|
||||
# 服务器列表
|
||||
SERVERS=("macmini" "ubuntu1" "ubuntu2" "NAS")
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 统计变量
|
||||
TOTAL_APPS=0
|
||||
TOTAL_CONTAINERS=0
|
||||
|
||||
# 检查服务器连接函数
|
||||
check_server_connection() {
|
||||
local server="$1"
|
||||
echo -n "检查服务器 $server 连接... "
|
||||
|
||||
if ssh -q -o ConnectTimeout=5 -o BatchMode=yes "$server" "exit" 2>/dev/null; then
|
||||
echo -e "${GREEN}✓ 连接正常${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ 连接失败${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取Docker应用信息函数
|
||||
get_docker_apps() {
|
||||
local server="$1"
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}====================${NC}"
|
||||
echo -e "${YELLOW}服务器: $server${NC}"
|
||||
echo -e "${BLUE}====================${NC}"
|
||||
|
||||
# 检查Docker是否安装
|
||||
if ! ssh "$server" "command -v docker &> /dev/null"; then
|
||||
echo "❌ Docker未安装"
|
||||
return
|
||||
fi
|
||||
|
||||
# 检查Docker服务状态
|
||||
DOCKER_STATUS=$(ssh "$server" "systemctl is-active docker 2>/dev/null || echo 'unknown'")
|
||||
if [ "$DOCKER_STATUS" != "active" ]; then
|
||||
echo "⚠️ Docker服务状态: $DOCKER_STATUS"
|
||||
fi
|
||||
|
||||
# 获取运行中的容器
|
||||
echo ""
|
||||
echo "📦 运行中的容器:"
|
||||
echo "--------------"
|
||||
|
||||
RUNNING_CONTAINERS=$(ssh "$server" "docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' 2>/dev/null || echo '无运行中的容器'")
|
||||
echo "$RUNNING_CONTAINERS"
|
||||
|
||||
# 统计运行中的容器数量
|
||||
RUNNING_COUNT=$(ssh "$server" "docker ps -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "运行中: $RUNNING_COUNT 个容器"
|
||||
|
||||
# 获取所有容器(包括停止的)
|
||||
echo ""
|
||||
echo "📋 所有容器:"
|
||||
echo "-----------"
|
||||
|
||||
ALL_CONTAINERS=$(ssh "$server" "docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}' 2>/dev/null || echo '无法获取容器列表'")
|
||||
echo "$ALL_CONTAINERS"
|
||||
|
||||
# 统计所有容器数量
|
||||
ALL_COUNT=$(ssh "$server" "docker ps -a -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "总计: $ALL_COUNT 个容器"
|
||||
|
||||
# 获取docker-compose应用
|
||||
echo ""
|
||||
echo "🎯 Docker Compose应用:"
|
||||
echo "-------------------"
|
||||
|
||||
# 查找常见的docker-compose目录
|
||||
COMPOSE_DIRS=$(ssh "$server" "find /home /opt /usr/local -name 'docker-compose.yml' -o -name 'docker-compose.yaml' 2>/dev/null | head -20 || echo '未找到docker-compose文件'")
|
||||
|
||||
if [ -n "$COMPOSE_DIRS" ] && [ "$COMPOSE_DIRS" != "未找到docker-compose文件" ]; then
|
||||
echo "找到的docker-compose目录:"
|
||||
echo "$COMPOSE_DIRS" | while read dir; do
|
||||
APP_NAME=$(basename $(dirname "$dir"))
|
||||
echo " 📁 $APP_NAME - $dir"
|
||||
done
|
||||
|
||||
# 统计docker-compose应用数量
|
||||
COMPOSE_COUNT=$(echo "$COMPOSE_DIRS" | wc -l)
|
||||
echo "总计: $COMPOSE_COUNT 个docker-compose应用"
|
||||
else
|
||||
echo "未找到docker-compose应用"
|
||||
fi
|
||||
|
||||
# 获取镜像列表
|
||||
echo ""
|
||||
echo "🖼️ Docker镜像:"
|
||||
echo "-------------"
|
||||
|
||||
IMAGES=$(ssh "$server" "docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}' 2>/dev/null | head -10 || echo '无法获取镜像列表'")
|
||||
echo "$IMAGES"
|
||||
|
||||
# 统计镜像数量
|
||||
IMAGE_COUNT=$(ssh "$server" "docker images -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "总计: $IMAGE_COUNT 个镜像"
|
||||
|
||||
# 更新统计
|
||||
TOTAL_CONTAINERS=$((TOTAL_CONTAINERS + ALL_COUNT))
|
||||
TOTAL_APPS=$((TOTAL_APPS + COMPOSE_COUNT))
|
||||
|
||||
echo ""
|
||||
echo "📊 服务器 $server 统计:"
|
||||
echo " • 运行中容器: $RUNNING_COUNT"
|
||||
echo " • 所有容器: $ALL_COUNT"
|
||||
echo " • Docker Compose应用: $COMPOSE_COUNT"
|
||||
echo " • Docker镜像: $IMAGE_COUNT"
|
||||
}
|
||||
|
||||
# 主程序
|
||||
echo "🔍 开始检查服务器连接..."
|
||||
echo ""
|
||||
|
||||
for server in "${SERVERS[@]}"; do
|
||||
if check_server_connection "$server"; then
|
||||
get_docker_apps "$server"
|
||||
else
|
||||
echo ""
|
||||
echo "⏭️ 跳过服务器 $server"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
# 生成总结报告
|
||||
echo ""
|
||||
echo -e "${GREEN}📈 总体统计报告${NC}"
|
||||
echo "================================"
|
||||
echo "检查的服务器数量: ${#SERVERS[@]}"
|
||||
echo "总计容器数量: $TOTAL_CONTAINERS"
|
||||
echo "总计Docker Compose应用: $TOTAL_APPS"
|
||||
echo ""
|
||||
echo "🔄 最近检查的应用状态:"
|
||||
|
||||
# 从配置文件获取应用列表
|
||||
if [ -f "docker-apps.yaml" ]; then
|
||||
echo "从配置文件读取的应用列表:"
|
||||
grep -E "name:|server:" docker-apps.yaml | while read line; do
|
||||
echo " $line"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔧 常用命令:"
|
||||
echo " • 查看容器日志: docker logs <容器名>"
|
||||
echo " • 重启容器: docker restart <容器名>"
|
||||
echo " • 进入容器: docker exec -it <容器名> /bin/bash"
|
||||
echo " • 查看容器状态: docker stats"
|
||||
echo ""
|
||||
echo "📝 备注:"
|
||||
echo " • 绿色 ✓ 表示连接正常"
|
||||
echo " • 红色 ✗ 表示连接失败"
|
||||
echo " • 黄色 ⚠️ 表示需要注意的状态"
|
||||
echo ""
|
||||
#!/bin/bash
|
||||
# 获取所有服务器上Docker环境运行的应用列表
|
||||
|
||||
set -e
|
||||
|
||||
echo "🐳 Docker应用列表 - 所有服务器"
|
||||
echo "================================"
|
||||
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
echo ""
|
||||
|
||||
# 服务器列表
|
||||
SERVERS=("macmini" "ubuntu1" "ubuntu2" "NAS")
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 统计变量
|
||||
TOTAL_APPS=0
|
||||
TOTAL_CONTAINERS=0
|
||||
|
||||
# 检查服务器连接函数
|
||||
check_server_connection() {
|
||||
local server="$1"
|
||||
echo -n "检查服务器 $server 连接... "
|
||||
|
||||
if ssh -q -o ConnectTimeout=5 -o BatchMode=yes "$server" "exit" 2>/dev/null; then
|
||||
echo -e "${GREEN}✓ 连接正常${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ 连接失败${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取Docker应用信息函数
|
||||
get_docker_apps() {
|
||||
local server="$1"
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}====================${NC}"
|
||||
echo -e "${YELLOW}服务器: $server${NC}"
|
||||
echo -e "${BLUE}====================${NC}"
|
||||
|
||||
# 检查Docker是否安装
|
||||
if ! ssh "$server" "command -v docker &> /dev/null"; then
|
||||
echo "❌ Docker未安装"
|
||||
return
|
||||
fi
|
||||
|
||||
# 检查Docker服务状态
|
||||
DOCKER_STATUS=$(ssh "$server" "systemctl is-active docker 2>/dev/null || echo 'unknown'")
|
||||
if [ "$DOCKER_STATUS" != "active" ]; then
|
||||
echo "⚠️ Docker服务状态: $DOCKER_STATUS"
|
||||
fi
|
||||
|
||||
# 获取运行中的容器
|
||||
echo ""
|
||||
echo "📦 运行中的容器:"
|
||||
echo "--------------"
|
||||
|
||||
RUNNING_CONTAINERS=$(ssh "$server" "docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' 2>/dev/null || echo '无运行中的容器'")
|
||||
echo "$RUNNING_CONTAINERS"
|
||||
|
||||
# 统计运行中的容器数量
|
||||
RUNNING_COUNT=$(ssh "$server" "docker ps -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "运行中: $RUNNING_COUNT 个容器"
|
||||
|
||||
# 获取所有容器(包括停止的)
|
||||
echo ""
|
||||
echo "📋 所有容器:"
|
||||
echo "-----------"
|
||||
|
||||
ALL_CONTAINERS=$(ssh "$server" "docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}' 2>/dev/null || echo '无法获取容器列表'")
|
||||
echo "$ALL_CONTAINERS"
|
||||
|
||||
# 统计所有容器数量
|
||||
ALL_COUNT=$(ssh "$server" "docker ps -a -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "总计: $ALL_COUNT 个容器"
|
||||
|
||||
# 获取docker-compose应用
|
||||
echo ""
|
||||
echo "🎯 Docker Compose应用:"
|
||||
echo "-------------------"
|
||||
|
||||
# 查找常见的docker-compose目录
|
||||
COMPOSE_DIRS=$(ssh "$server" "find /home /opt /usr/local -name 'docker-compose.yml' -o -name 'docker-compose.yaml' 2>/dev/null | head -20 || echo '未找到docker-compose文件'")
|
||||
|
||||
if [ -n "$COMPOSE_DIRS" ] && [ "$COMPOSE_DIRS" != "未找到docker-compose文件" ]; then
|
||||
echo "找到的docker-compose目录:"
|
||||
echo "$COMPOSE_DIRS" | while read dir; do
|
||||
APP_NAME=$(basename $(dirname "$dir"))
|
||||
echo " 📁 $APP_NAME - $dir"
|
||||
done
|
||||
|
||||
# 统计docker-compose应用数量
|
||||
COMPOSE_COUNT=$(echo "$COMPOSE_DIRS" | wc -l)
|
||||
echo "总计: $COMPOSE_COUNT 个docker-compose应用"
|
||||
else
|
||||
echo "未找到docker-compose应用"
|
||||
fi
|
||||
|
||||
# 获取镜像列表
|
||||
echo ""
|
||||
echo "🖼️ Docker镜像:"
|
||||
echo "-------------"
|
||||
|
||||
IMAGES=$(ssh "$server" "docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}' 2>/dev/null | head -10 || echo '无法获取镜像列表'")
|
||||
echo "$IMAGES"
|
||||
|
||||
# 统计镜像数量
|
||||
IMAGE_COUNT=$(ssh "$server" "docker images -q 2>/dev/null | wc -l || echo 0")
|
||||
echo "总计: $IMAGE_COUNT 个镜像"
|
||||
|
||||
# 更新统计
|
||||
TOTAL_CONTAINERS=$((TOTAL_CONTAINERS + ALL_COUNT))
|
||||
TOTAL_APPS=$((TOTAL_APPS + COMPOSE_COUNT))
|
||||
|
||||
echo ""
|
||||
echo "📊 服务器 $server 统计:"
|
||||
echo " • 运行中容器: $RUNNING_COUNT"
|
||||
echo " • 所有容器: $ALL_COUNT"
|
||||
echo " • Docker Compose应用: $COMPOSE_COUNT"
|
||||
echo " • Docker镜像: $IMAGE_COUNT"
|
||||
}
|
||||
|
||||
# 主程序
|
||||
echo "🔍 开始检查服务器连接..."
|
||||
echo ""
|
||||
|
||||
for server in "${SERVERS[@]}"; do
|
||||
if check_server_connection "$server"; then
|
||||
get_docker_apps "$server"
|
||||
else
|
||||
echo ""
|
||||
echo "⏭️ 跳过服务器 $server"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
# 生成总结报告
|
||||
echo ""
|
||||
echo -e "${GREEN}📈 总体统计报告${NC}"
|
||||
echo "================================"
|
||||
echo "检查的服务器数量: ${#SERVERS[@]}"
|
||||
echo "总计容器数量: $TOTAL_CONTAINERS"
|
||||
echo "总计Docker Compose应用: $TOTAL_APPS"
|
||||
echo ""
|
||||
echo "🔄 最近检查的应用状态:"
|
||||
|
||||
# 从配置文件获取应用列表
|
||||
if [ -f "docker-apps.yaml" ]; then
|
||||
echo "从配置文件读取的应用列表:"
|
||||
grep -E "name:|server:" docker-apps.yaml | while read line; do
|
||||
echo " $line"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔧 常用命令:"
|
||||
echo " • 查看容器日志: docker logs <容器名>"
|
||||
echo " • 重启容器: docker restart <容器名>"
|
||||
echo " • 进入容器: docker exec -it <容器名> /bin/bash"
|
||||
echo " • 查看容器状态: docker stats"
|
||||
echo ""
|
||||
echo "📝 备注:"
|
||||
echo " • 绿色 ✓ 表示连接正常"
|
||||
echo " • 红色 ✗ 表示连接失败"
|
||||
echo " • 黄色 ⚠️ 表示需要注意的状态"
|
||||
echo ""
|
||||
echo "✅ 报告生成完成"
|
||||
@@ -1,262 +1,262 @@
|
||||
#!/bin/bash
|
||||
# 安全文件编辑脚本
|
||||
# 基于2026-03-13文件编辑失败的经验教训
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "🔧 安全文件编辑脚本"
|
||||
echo "======================"
|
||||
echo "用法: $0 <文件路径> <旧文本> <新文本>"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " -v, --verbose 详细模式"
|
||||
echo " -b, --backup 保留备份文件(默认编辑成功后删除)"
|
||||
echo " -f, --force 强制编辑(不检查匹配次数)"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 config.yaml 'port: 8080' 'port: 9090'"
|
||||
echo " $0 --verbose README.md '旧版本' '新版本'"
|
||||
echo ""
|
||||
echo "安全特性:"
|
||||
echo " • 自动备份原文件"
|
||||
echo " • 验证文本匹配"
|
||||
echo " • 失败时自动恢复"
|
||||
echo " • 编辑日志记录"
|
||||
}
|
||||
|
||||
# 初始化变量
|
||||
VERBOSE=0
|
||||
KEEP_BACKUP=0
|
||||
FORCE=0
|
||||
FILE=""
|
||||
OLD_TEXT=""
|
||||
NEW_TEXT=""
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-v|--verbose)
|
||||
VERBOSE=1
|
||||
shift
|
||||
;;
|
||||
-b|--backup)
|
||||
KEEP_BACKUP=1
|
||||
shift
|
||||
;;
|
||||
-f|--force)
|
||||
FORCE=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
if [ -z "$FILE" ]; then
|
||||
FILE="$1"
|
||||
elif [ -z "$OLD_TEXT" ]; then
|
||||
OLD_TEXT="$1"
|
||||
elif [ -z "$NEW_TEXT" ]; then
|
||||
NEW_TEXT="$1"
|
||||
else
|
||||
echo -e "${RED}错误:参数过多${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查必要参数
|
||||
if [ -z "$FILE" ] || [ -z "$OLD_TEXT" ] || [ -z "$NEW_TEXT" ]; then
|
||||
echo -e "${RED}错误:缺少必要参数${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查文件是否存在
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo -e "${RED}错误:文件不存在: $FILE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 详细模式输出
|
||||
log() {
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
fi
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo "🔧 开始安全文件编辑"
|
||||
echo "======================"
|
||||
echo "文件: $FILE"
|
||||
echo "旧文本: \"$OLD_TEXT\""
|
||||
echo "新文本: \"$NEW_TEXT\""
|
||||
echo ""
|
||||
|
||||
# 步骤1:备份原文件
|
||||
BACKUP_FILE="${FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
log "创建备份: $BACKUP_FILE"
|
||||
cp "$FILE" "$BACKUP_FILE"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "备份失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤2:检查文件权限
|
||||
PERMISSIONS=$(stat -f "%Sp" "$FILE")
|
||||
log "文件权限: $PERMISSIONS"
|
||||
|
||||
# 步骤3:验证文本匹配
|
||||
log "验证文本匹配..."
|
||||
|
||||
# 检查匹配次数
|
||||
MATCH_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
log "找到 $MATCH_COUNT 处匹配"
|
||||
|
||||
if [ $MATCH_COUNT -eq 0 ]; then
|
||||
error "未找到匹配文本"
|
||||
echo "建议:"
|
||||
echo " 1. 检查文本是否完全匹配(包括空格和换行符)"
|
||||
echo " 2. 使用 cat -A 查看文件特殊字符"
|
||||
echo " 3. 考虑使用 write 工具重新创建文件"
|
||||
|
||||
if [ $FORCE -eq 0 ]; then
|
||||
# 恢复备份
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
else
|
||||
warning "强制模式:继续编辑"
|
||||
fi
|
||||
elif [ $MATCH_COUNT -gt 1 ] && [ $FORCE -eq 0 ]; then
|
||||
warning "找到 $MATCH_COUNT 处匹配,可能不精确"
|
||||
echo "匹配位置:"
|
||||
grep -n "$OLD_TEXT" "$FILE"
|
||||
echo ""
|
||||
echo "建议:"
|
||||
echo " 1. 使用更精确的匹配文本"
|
||||
echo " 2. 使用 -f 参数强制编辑"
|
||||
echo " 3. 或手动编辑文件"
|
||||
|
||||
# 恢复备份
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤4:显示匹配上下文
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo "匹配上下文:"
|
||||
grep -A2 -B2 "$OLD_TEXT" "$FILE" | cat -A
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 步骤5:执行编辑
|
||||
log "执行编辑操作..."
|
||||
edit "$FILE" "$OLD_TEXT" "$NEW_TEXT"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "编辑失败"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤6:验证编辑结果
|
||||
log "验证编辑结果..."
|
||||
|
||||
# 检查新文本是否存在
|
||||
NEW_COUNT=$(grep -c "$NEW_TEXT" "$FILE")
|
||||
if [ $NEW_COUNT -eq 0 ]; then
|
||||
error "新文本未找到,编辑可能失败"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查旧文本是否还存在
|
||||
OLD_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
if [ $OLD_COUNT -gt 0 ]; then
|
||||
warning "仍有 $OLD_COUNT 处旧文本存在"
|
||||
fi
|
||||
|
||||
# 步骤7:文件完整性检查
|
||||
log "检查文件完整性..."
|
||||
|
||||
# 检查文件大小
|
||||
ORIG_SIZE=$(stat -f%z "$BACKUP_FILE")
|
||||
NEW_SIZE=$(stat -f%z "$FILE")
|
||||
log "原始大小: $ORIG_SIZE 字节"
|
||||
log "新大小: $NEW_SIZE 字节"
|
||||
|
||||
if [ $NEW_SIZE -eq 0 ]; then
|
||||
error "文件大小为0,编辑可能损坏了文件"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤8:清理和记录
|
||||
if [ $KEEP_BACKUP -eq 0 ]; then
|
||||
log "删除备份文件"
|
||||
rm "$BACKUP_FILE"
|
||||
else
|
||||
log "保留备份文件: $BACKUP_FILE"
|
||||
fi
|
||||
|
||||
# 记录编辑日志
|
||||
LOG_FILE="$HOME/.openclaw/workspace/managed-systems/logs/edit-log.md"
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
echo "## $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
|
||||
echo "- **文件**: $FILE" >> "$LOG_FILE"
|
||||
echo "- **操作**: 替换文本" >> "$LOG_FILE"
|
||||
echo "- **匹配数**: $MATCH_COUNT" >> "$LOG_FILE"
|
||||
echo "- **结果**: 成功" >> "$LOG_FILE"
|
||||
echo "" >> "$LOG_FILE"
|
||||
|
||||
# 步骤9:完成
|
||||
success "编辑成功完成"
|
||||
echo ""
|
||||
echo "📊 编辑统计:"
|
||||
echo " • 匹配位置: $MATCH_COUNT 处"
|
||||
echo " • 新文本出现: $NEW_COUNT 次"
|
||||
echo " • 文件大小变化: $ORIG_SIZE → $NEW_SIZE 字节"
|
||||
|
||||
if [ $KEEP_BACKUP -eq 1 ]; then
|
||||
echo " • 备份文件: $BACKUP_FILE"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✅ 安全编辑流程完成"
|
||||
}
|
||||
|
||||
# 运行主函数
|
||||
#!/bin/bash
|
||||
# 安全文件编辑脚本
|
||||
# 基于2026-03-13文件编辑失败的经验教训
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "🔧 安全文件编辑脚本"
|
||||
echo "======================"
|
||||
echo "用法: $0 <文件路径> <旧文本> <新文本>"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " -v, --verbose 详细模式"
|
||||
echo " -b, --backup 保留备份文件(默认编辑成功后删除)"
|
||||
echo " -f, --force 强制编辑(不检查匹配次数)"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 config.yaml 'port: 8080' 'port: 9090'"
|
||||
echo " $0 --verbose README.md '旧版本' '新版本'"
|
||||
echo ""
|
||||
echo "安全特性:"
|
||||
echo " • 自动备份原文件"
|
||||
echo " • 验证文本匹配"
|
||||
echo " • 失败时自动恢复"
|
||||
echo " • 编辑日志记录"
|
||||
}
|
||||
|
||||
# 初始化变量
|
||||
VERBOSE=0
|
||||
KEEP_BACKUP=0
|
||||
FORCE=0
|
||||
FILE=""
|
||||
OLD_TEXT=""
|
||||
NEW_TEXT=""
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-v|--verbose)
|
||||
VERBOSE=1
|
||||
shift
|
||||
;;
|
||||
-b|--backup)
|
||||
KEEP_BACKUP=1
|
||||
shift
|
||||
;;
|
||||
-f|--force)
|
||||
FORCE=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
if [ -z "$FILE" ]; then
|
||||
FILE="$1"
|
||||
elif [ -z "$OLD_TEXT" ]; then
|
||||
OLD_TEXT="$1"
|
||||
elif [ -z "$NEW_TEXT" ]; then
|
||||
NEW_TEXT="$1"
|
||||
else
|
||||
echo -e "${RED}错误:参数过多${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查必要参数
|
||||
if [ -z "$FILE" ] || [ -z "$OLD_TEXT" ] || [ -z "$NEW_TEXT" ]; then
|
||||
echo -e "${RED}错误:缺少必要参数${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查文件是否存在
|
||||
if [ ! -f "$FILE" ]; then
|
||||
echo -e "${RED}错误:文件不存在: $FILE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 详细模式输出
|
||||
log() {
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
fi
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo "🔧 开始安全文件编辑"
|
||||
echo "======================"
|
||||
echo "文件: $FILE"
|
||||
echo "旧文本: \"$OLD_TEXT\""
|
||||
echo "新文本: \"$NEW_TEXT\""
|
||||
echo ""
|
||||
|
||||
# 步骤1:备份原文件
|
||||
BACKUP_FILE="${FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
log "创建备份: $BACKUP_FILE"
|
||||
cp "$FILE" "$BACKUP_FILE"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "备份失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤2:检查文件权限
|
||||
PERMISSIONS=$(stat -f "%Sp" "$FILE")
|
||||
log "文件权限: $PERMISSIONS"
|
||||
|
||||
# 步骤3:验证文本匹配
|
||||
log "验证文本匹配..."
|
||||
|
||||
# 检查匹配次数
|
||||
MATCH_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
log "找到 $MATCH_COUNT 处匹配"
|
||||
|
||||
if [ $MATCH_COUNT -eq 0 ]; then
|
||||
error "未找到匹配文本"
|
||||
echo "建议:"
|
||||
echo " 1. 检查文本是否完全匹配(包括空格和换行符)"
|
||||
echo " 2. 使用 cat -A 查看文件特殊字符"
|
||||
echo " 3. 考虑使用 write 工具重新创建文件"
|
||||
|
||||
if [ $FORCE -eq 0 ]; then
|
||||
# 恢复备份
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
else
|
||||
warning "强制模式:继续编辑"
|
||||
fi
|
||||
elif [ $MATCH_COUNT -gt 1 ] && [ $FORCE -eq 0 ]; then
|
||||
warning "找到 $MATCH_COUNT 处匹配,可能不精确"
|
||||
echo "匹配位置:"
|
||||
grep -n "$OLD_TEXT" "$FILE"
|
||||
echo ""
|
||||
echo "建议:"
|
||||
echo " 1. 使用更精确的匹配文本"
|
||||
echo " 2. 使用 -f 参数强制编辑"
|
||||
echo " 3. 或手动编辑文件"
|
||||
|
||||
# 恢复备份
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤4:显示匹配上下文
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo "匹配上下文:"
|
||||
grep -A2 -B2 "$OLD_TEXT" "$FILE" | cat -A
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 步骤5:执行编辑
|
||||
log "执行编辑操作..."
|
||||
edit "$FILE" "$OLD_TEXT" "$NEW_TEXT"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "编辑失败"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤6:验证编辑结果
|
||||
log "验证编辑结果..."
|
||||
|
||||
# 检查新文本是否存在
|
||||
NEW_COUNT=$(grep -c "$NEW_TEXT" "$FILE")
|
||||
if [ $NEW_COUNT -eq 0 ]; then
|
||||
error "新文本未找到,编辑可能失败"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查旧文本是否还存在
|
||||
OLD_COUNT=$(grep -c "$OLD_TEXT" "$FILE")
|
||||
if [ $OLD_COUNT -gt 0 ]; then
|
||||
warning "仍有 $OLD_COUNT 处旧文本存在"
|
||||
fi
|
||||
|
||||
# 步骤7:文件完整性检查
|
||||
log "检查文件完整性..."
|
||||
|
||||
# 检查文件大小
|
||||
ORIG_SIZE=$(stat -f%z "$BACKUP_FILE")
|
||||
NEW_SIZE=$(stat -f%z "$FILE")
|
||||
log "原始大小: $ORIG_SIZE 字节"
|
||||
log "新大小: $NEW_SIZE 字节"
|
||||
|
||||
if [ $NEW_SIZE -eq 0 ]; then
|
||||
error "文件大小为0,编辑可能损坏了文件"
|
||||
log "恢复备份文件"
|
||||
cp "$BACKUP_FILE" "$FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤8:清理和记录
|
||||
if [ $KEEP_BACKUP -eq 0 ]; then
|
||||
log "删除备份文件"
|
||||
rm "$BACKUP_FILE"
|
||||
else
|
||||
log "保留备份文件: $BACKUP_FILE"
|
||||
fi
|
||||
|
||||
# 记录编辑日志
|
||||
LOG_FILE="$HOME/.openclaw/workspace/managed-systems/logs/edit-log.md"
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
echo "## $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
|
||||
echo "- **文件**: $FILE" >> "$LOG_FILE"
|
||||
echo "- **操作**: 替换文本" >> "$LOG_FILE"
|
||||
echo "- **匹配数**: $MATCH_COUNT" >> "$LOG_FILE"
|
||||
echo "- **结果**: 成功" >> "$LOG_FILE"
|
||||
echo "" >> "$LOG_FILE"
|
||||
|
||||
# 步骤9:完成
|
||||
success "编辑成功完成"
|
||||
echo ""
|
||||
echo "📊 编辑统计:"
|
||||
echo " • 匹配位置: $MATCH_COUNT 处"
|
||||
echo " • 新文本出现: $NEW_COUNT 次"
|
||||
echo " • 文件大小变化: $ORIG_SIZE → $NEW_SIZE 字节"
|
||||
|
||||
if [ $KEEP_BACKUP -eq 1 ]; then
|
||||
echo " • 备份文件: $BACKUP_FILE"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✅ 安全编辑流程完成"
|
||||
}
|
||||
|
||||
# 运行主函数
|
||||
main "$@"
|
||||
@@ -1,150 +1,150 @@
|
||||
#!/bin/bash
|
||||
# vaultwarden搜索测试脚本
|
||||
# 用于验证通过item名称查找凭证的概念
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 vaultwarden凭证搜索测试"
|
||||
echo "================================"
|
||||
|
||||
# 检查Bitwarden CLI是否安装
|
||||
if ! command -v bw &> /dev/null; then
|
||||
echo "❌ Bitwarden CLI (bw) 未安装"
|
||||
echo "安装命令: brew install bitwarden-cli"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查jq是否安装(用于JSON解析)
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "❌ jq 未安装"
|
||||
echo "安装命令: brew install jq"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 显示当前配置
|
||||
echo "📊 当前Bitwarden CLI配置:"
|
||||
bw status
|
||||
|
||||
echo ""
|
||||
echo "📝 测试流程说明:"
|
||||
echo "1. 配置连接到vaultwarden服务器"
|
||||
echo "2. 使用API密钥登录"
|
||||
echo "3. 搜索指定名称的项目"
|
||||
echo "4. 提取用户名和密码"
|
||||
echo ""
|
||||
|
||||
# 配置vaultwarden服务器(如果未配置)
|
||||
CURRENT_SERVER=$(bw config server | grep -o 'http://[^ ]*' || echo "")
|
||||
if [ -z "$CURRENT_SERVER" ] || [ "$CURRENT_SERVER" != "http://localhost:8080" ]; then
|
||||
echo "⚙️ 配置连接到vaultwarden服务器..."
|
||||
bw config server http://localhost:8080
|
||||
echo "✅ 服务器配置完成: http://localhost:8080"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔐 登录说明:"
|
||||
echo "需要以下环境变量:"
|
||||
echo " export BW_CLIENTID='你的客户端ID'"
|
||||
echo " export BW_CLIENTSECRET='你的客户端密钥'"
|
||||
echo ""
|
||||
echo "然后运行: bw login --apikey"
|
||||
echo ""
|
||||
|
||||
# 检查是否已登录
|
||||
SESSION=$(bw status | jq -r '.session')
|
||||
if [ -n "$SESSION" ] && [ "$SESSION" != "null" ]; then
|
||||
echo "✅ 已登录,会话有效"
|
||||
export BW_SESSION="$SESSION"
|
||||
else
|
||||
echo "⚠️ 未登录或会话无效"
|
||||
echo "请先设置环境变量并登录"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 测试搜索功能
|
||||
echo ""
|
||||
echo "🧪 测试搜索功能..."
|
||||
echo ""
|
||||
|
||||
# 函数:搜索项目并显示凭证
|
||||
search_vaultwarden_item() {
|
||||
local item_name="$1"
|
||||
|
||||
echo "搜索项目: $item_name"
|
||||
echo "--------------------------------"
|
||||
|
||||
# 搜索项目
|
||||
ITEM_JSON=$(bw list items --search "$item_name" 2>/dev/null || echo "[]")
|
||||
|
||||
if [ "$ITEM_JSON" = "[]" ] || [ -z "$ITEM_JSON" ]; then
|
||||
echo "❌ 未找到项目: $item_name"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 解析第一个项目
|
||||
ITEM_COUNT=$(echo "$ITEM_JSON" | jq '. | length')
|
||||
echo "找到 $ITEM_COUNT 个匹配项目"
|
||||
|
||||
# 显示每个项目的基本信息
|
||||
for i in $(seq 0 $((ITEM_COUNT - 1))); do
|
||||
ITEM=$(echo "$ITEM_JSON" | jq ".[$i]")
|
||||
ITEM_ID=$(echo "$ITEM" | jq -r '.id')
|
||||
ITEM_NAME=$(echo "$ITEM" | jq -r '.name')
|
||||
ITEM_TYPE=$(echo "$ITEM" | jq -r '.type')
|
||||
|
||||
echo ""
|
||||
echo "📋 项目 $((i+1)):"
|
||||
echo " ID: $ITEM_ID"
|
||||
echo " 名称: $ITEM_NAME"
|
||||
echo " 类型: $ITEM_TYPE"
|
||||
|
||||
# 如果是登录类型,显示用户名
|
||||
if [ "$ITEM_TYPE" = "1" ]; then
|
||||
USERNAME=$(echo "$ITEM" | jq -r '.login.username // "未设置"')
|
||||
echo " 用户名: $USERNAME"
|
||||
|
||||
# 注意:不直接显示密码,只显示是否有密码
|
||||
HAS_PASSWORD=$(echo "$ITEM" | jq -r '.login.password != null')
|
||||
if [ "$HAS_PASSWORD" = "true" ]; then
|
||||
echo " 密码: [已设置]"
|
||||
else
|
||||
echo " 密码: [未设置]"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 显示备注(如果有)
|
||||
NOTES=$(echo "$ITEM" | jq -r '.notes // ""')
|
||||
if [ -n "$NOTES" ] && [ "$NOTES" != "null" ]; then
|
||||
echo " 备注: $NOTES"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "✅ 搜索完成"
|
||||
return 0
|
||||
}
|
||||
|
||||
# 如果提供了参数,测试搜索
|
||||
if [ $# -ge 1 ]; then
|
||||
search_vaultwarden_item "$1"
|
||||
else
|
||||
echo "📌 使用方法:"
|
||||
echo " $0 <项目名称>"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 n8n"
|
||||
echo " $0 mysql"
|
||||
echo " $0 ssh"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================"
|
||||
echo "测试脚本完成"
|
||||
echo ""
|
||||
echo "⚠️ 安全提醒:"
|
||||
echo "1. 此脚本不在磁盘上存储任何密码"
|
||||
echo "2. 密码只在内存中临时存在"
|
||||
echo "3. 使用后请清理环境变量:"
|
||||
echo " unset BW_SESSION"
|
||||
echo " unset BW_CLIENTID"
|
||||
#!/bin/bash
|
||||
# vaultwarden搜索测试脚本
|
||||
# 用于验证通过item名称查找凭证的概念
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 vaultwarden凭证搜索测试"
|
||||
echo "================================"
|
||||
|
||||
# 检查Bitwarden CLI是否安装
|
||||
if ! command -v bw &> /dev/null; then
|
||||
echo "❌ Bitwarden CLI (bw) 未安装"
|
||||
echo "安装命令: brew install bitwarden-cli"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查jq是否安装(用于JSON解析)
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "❌ jq 未安装"
|
||||
echo "安装命令: brew install jq"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 显示当前配置
|
||||
echo "📊 当前Bitwarden CLI配置:"
|
||||
bw status
|
||||
|
||||
echo ""
|
||||
echo "📝 测试流程说明:"
|
||||
echo "1. 配置连接到vaultwarden服务器"
|
||||
echo "2. 使用API密钥登录"
|
||||
echo "3. 搜索指定名称的项目"
|
||||
echo "4. 提取用户名和密码"
|
||||
echo ""
|
||||
|
||||
# 配置vaultwarden服务器(如果未配置)
|
||||
CURRENT_SERVER=$(bw config server | grep -o 'http://[^ ]*' || echo "")
|
||||
if [ -z "$CURRENT_SERVER" ] || [ "$CURRENT_SERVER" != "http://localhost:8080" ]; then
|
||||
echo "⚙️ 配置连接到vaultwarden服务器..."
|
||||
bw config server http://localhost:8080
|
||||
echo "✅ 服务器配置完成: http://localhost:8080"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🔐 登录说明:"
|
||||
echo "需要以下环境变量:"
|
||||
echo " export BW_CLIENTID='你的客户端ID'"
|
||||
echo " export BW_CLIENTSECRET='你的客户端密钥'"
|
||||
echo ""
|
||||
echo "然后运行: bw login --apikey"
|
||||
echo ""
|
||||
|
||||
# 检查是否已登录
|
||||
SESSION=$(bw status | jq -r '.session')
|
||||
if [ -n "$SESSION" ] && [ "$SESSION" != "null" ]; then
|
||||
echo "✅ 已登录,会话有效"
|
||||
export BW_SESSION="$SESSION"
|
||||
else
|
||||
echo "⚠️ 未登录或会话无效"
|
||||
echo "请先设置环境变量并登录"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 测试搜索功能
|
||||
echo ""
|
||||
echo "🧪 测试搜索功能..."
|
||||
echo ""
|
||||
|
||||
# 函数:搜索项目并显示凭证
|
||||
search_vaultwarden_item() {
|
||||
local item_name="$1"
|
||||
|
||||
echo "搜索项目: $item_name"
|
||||
echo "--------------------------------"
|
||||
|
||||
# 搜索项目
|
||||
ITEM_JSON=$(bw list items --search "$item_name" 2>/dev/null || echo "[]")
|
||||
|
||||
if [ "$ITEM_JSON" = "[]" ] || [ -z "$ITEM_JSON" ]; then
|
||||
echo "❌ 未找到项目: $item_name"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 解析第一个项目
|
||||
ITEM_COUNT=$(echo "$ITEM_JSON" | jq '. | length')
|
||||
echo "找到 $ITEM_COUNT 个匹配项目"
|
||||
|
||||
# 显示每个项目的基本信息
|
||||
for i in $(seq 0 $((ITEM_COUNT - 1))); do
|
||||
ITEM=$(echo "$ITEM_JSON" | jq ".[$i]")
|
||||
ITEM_ID=$(echo "$ITEM" | jq -r '.id')
|
||||
ITEM_NAME=$(echo "$ITEM" | jq -r '.name')
|
||||
ITEM_TYPE=$(echo "$ITEM" | jq -r '.type')
|
||||
|
||||
echo ""
|
||||
echo "📋 项目 $((i+1)):"
|
||||
echo " ID: $ITEM_ID"
|
||||
echo " 名称: $ITEM_NAME"
|
||||
echo " 类型: $ITEM_TYPE"
|
||||
|
||||
# 如果是登录类型,显示用户名
|
||||
if [ "$ITEM_TYPE" = "1" ]; then
|
||||
USERNAME=$(echo "$ITEM" | jq -r '.login.username // "未设置"')
|
||||
echo " 用户名: $USERNAME"
|
||||
|
||||
# 注意:不直接显示密码,只显示是否有密码
|
||||
HAS_PASSWORD=$(echo "$ITEM" | jq -r '.login.password != null')
|
||||
if [ "$HAS_PASSWORD" = "true" ]; then
|
||||
echo " 密码: [已设置]"
|
||||
else
|
||||
echo " 密码: [未设置]"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 显示备注(如果有)
|
||||
NOTES=$(echo "$ITEM" | jq -r '.notes // ""')
|
||||
if [ -n "$NOTES" ] && [ "$NOTES" != "null" ]; then
|
||||
echo " 备注: $NOTES"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "✅ 搜索完成"
|
||||
return 0
|
||||
}
|
||||
|
||||
# 如果提供了参数,测试搜索
|
||||
if [ $# -ge 1 ]; then
|
||||
search_vaultwarden_item "$1"
|
||||
else
|
||||
echo "📌 使用方法:"
|
||||
echo " $0 <项目名称>"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 n8n"
|
||||
echo " $0 mysql"
|
||||
echo " $0 ssh"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================"
|
||||
echo "测试脚本完成"
|
||||
echo ""
|
||||
echo "⚠️ 安全提醒:"
|
||||
echo "1. 此脚本不在磁盘上存储任何密码"
|
||||
echo "2. 密码只在内存中临时存在"
|
||||
echo "3. 使用后请清理环境变量:"
|
||||
echo " unset BW_SESSION"
|
||||
echo " unset BW_CLIENTID"
|
||||
echo " unset BW_CLIENTSECRET"
|
||||
@@ -1,158 +1,158 @@
|
||||
---
|
||||
title: Ubuntu OpenClaw 技术笔记
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [install, openclaw, ubuntu]
|
||||
---
|
||||
|
||||
# Ubuntu OpenClaw 技术笔记
|
||||
|
||||
#ubuntu #openclaw #install
|
||||
|
||||
> 本文件记录 Ubuntu 服务器上 OpenClaw 的安装、配置和管理命令。
|
||||
|
||||
## 环境概述
|
||||
|
||||
- **系统**: Ubuntu 20.04 / 22.04
|
||||
- **安装方式**: npm 用户级全局安装
|
||||
- **CLI 路径**: `/home/shenwei/.npm-global/bin/openclaw`
|
||||
- **配置目录**: `/home/shenwei/.openclaw`
|
||||
- **systemd 服务**: `/home/shenwei/.config/systemd/user/openclaw-gateway.service`
|
||||
|
||||
---
|
||||
|
||||
## PATH 配置
|
||||
|
||||
```bash
|
||||
# 临时生效
|
||||
export PATH=$HOME/.npm-global/bin:$PATH
|
||||
|
||||
# 永久生效(添加到 ~/.bashrc)
|
||||
echo 'export PATH=$HOME/.npm-global/bin:$PATH' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 安装 OpenClaw
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
npm install -g openclaw clawhub
|
||||
|
||||
# 初始化
|
||||
openclaw onboard
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Gateway 管理
|
||||
|
||||
```bash
|
||||
# 启动/停止/重启
|
||||
systemctl --user start openclaw-gateway
|
||||
systemctl --user stop openclaw-gateway
|
||||
systemctl --user restart openclaw-gateway
|
||||
|
||||
# 查看状态
|
||||
systemctl --user status openclaw-gateway
|
||||
|
||||
# 开机自启
|
||||
systemctl --user enable openclaw-gateway
|
||||
|
||||
# 查看日志
|
||||
journalctl --user -u openclaw-gateway -n 50 --no-pager
|
||||
|
||||
# 修改配置后重载
|
||||
systemctl --user daemon-reload
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Agent 管理
|
||||
|
||||
### 创建 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents add <agent_name> --non-interactive --workspace /home/shenwei/.openclaw/workspace-agent-<agent_name> --model MiniMax-M2.5
|
||||
```
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
openclaw agents add yunhan --non-interactive --workspace /home/shenwei/.openclaw/workspace-agent-yunhan --model MiniMax-M2.5
|
||||
```
|
||||
|
||||
### 列出 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents list
|
||||
```
|
||||
|
||||
### 删除 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents delete <agent_name> --force
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Telegram Bot 绑定
|
||||
|
||||
### 绑定 Bot 到 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents bind --agent <agent_id> --bind telegram:<account_name>
|
||||
```
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
openclaw agents bind --agent yunhan --bind telegram:yunhan
|
||||
```
|
||||
|
||||
绑定后需重启 Gateway:
|
||||
```bash
|
||||
systemctl --user restart openclaw-gateway
|
||||
```
|
||||
|
||||
### 删除 Bot
|
||||
|
||||
```bash
|
||||
openclaw channels remove --channel telegram --account <account_name> --delete
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常用命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|------|------|
|
||||
| `openclaw --version` | 查看版本 |
|
||||
| `openclaw status` | 查看状态 |
|
||||
| `openclaw onboard` | 初始化 |
|
||||
| `openclaw doctor --fix` | 修复配置 |
|
||||
| `openclaw logs --follow` | 查看日志 |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **不要用 root 运行** - 会生成 `/root/.openclaw`,权限混乱
|
||||
2. **统一使用普通用户** (shenwei) 安装和运行
|
||||
3. **通过 systemctl 管理 Gateway**,不要用 tmux
|
||||
4. **Telegram Bot 限制** - 每个账号最多 20 个 bot
|
||||
|
||||
---
|
||||
|
||||
## Ubuntu 服务器列表
|
||||
|
||||
| 服务器 | 内网 IP | 说明 |
|
||||
|--------|---------|------|
|
||||
| ubuntu1 | 192.168.3.47 | - |
|
||||
| ubuntu2 | 192.168.3.45 | - |
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-03-16*
|
||||
---
|
||||
title: Ubuntu OpenClaw 技术笔记
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [install, openclaw, ubuntu]
|
||||
---
|
||||
|
||||
# Ubuntu OpenClaw 技术笔记
|
||||
|
||||
#ubuntu #openclaw #install
|
||||
|
||||
> 本文件记录 Ubuntu 服务器上 OpenClaw 的安装、配置和管理命令。
|
||||
|
||||
## 环境概述
|
||||
|
||||
- **系统**: Ubuntu 20.04 / 22.04
|
||||
- **安装方式**: npm 用户级全局安装
|
||||
- **CLI 路径**: `/home/shenwei/.npm-global/bin/openclaw`
|
||||
- **配置目录**: `/home/shenwei/.openclaw`
|
||||
- **systemd 服务**: `/home/shenwei/.config/systemd/user/openclaw-gateway.service`
|
||||
|
||||
---
|
||||
|
||||
## PATH 配置
|
||||
|
||||
```bash
|
||||
# 临时生效
|
||||
export PATH=$HOME/.npm-global/bin:$PATH
|
||||
|
||||
# 永久生效(添加到 ~/.bashrc)
|
||||
echo 'export PATH=$HOME/.npm-global/bin:$PATH' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 安装 OpenClaw
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
npm install -g openclaw clawhub
|
||||
|
||||
# 初始化
|
||||
openclaw onboard
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Gateway 管理
|
||||
|
||||
```bash
|
||||
# 启动/停止/重启
|
||||
systemctl --user start openclaw-gateway
|
||||
systemctl --user stop openclaw-gateway
|
||||
systemctl --user restart openclaw-gateway
|
||||
|
||||
# 查看状态
|
||||
systemctl --user status openclaw-gateway
|
||||
|
||||
# 开机自启
|
||||
systemctl --user enable openclaw-gateway
|
||||
|
||||
# 查看日志
|
||||
journalctl --user -u openclaw-gateway -n 50 --no-pager
|
||||
|
||||
# 修改配置后重载
|
||||
systemctl --user daemon-reload
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Agent 管理
|
||||
|
||||
### 创建 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents add <agent_name> --non-interactive --workspace /home/shenwei/.openclaw/workspace-agent-<agent_name> --model MiniMax-M2.5
|
||||
```
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
openclaw agents add yunhan --non-interactive --workspace /home/shenwei/.openclaw/workspace-agent-yunhan --model MiniMax-M2.5
|
||||
```
|
||||
|
||||
### 列出 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents list
|
||||
```
|
||||
|
||||
### 删除 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents delete <agent_name> --force
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Telegram Bot 绑定
|
||||
|
||||
### 绑定 Bot 到 Agent
|
||||
|
||||
```bash
|
||||
openclaw agents bind --agent <agent_id> --bind telegram:<account_name>
|
||||
```
|
||||
|
||||
**示例**:
|
||||
```bash
|
||||
openclaw agents bind --agent yunhan --bind telegram:yunhan
|
||||
```
|
||||
|
||||
绑定后需重启 Gateway:
|
||||
```bash
|
||||
systemctl --user restart openclaw-gateway
|
||||
```
|
||||
|
||||
### 删除 Bot
|
||||
|
||||
```bash
|
||||
openclaw channels remove --channel telegram --account <account_name> --delete
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常用命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|------|------|
|
||||
| `openclaw --version` | 查看版本 |
|
||||
| `openclaw status` | 查看状态 |
|
||||
| `openclaw onboard` | 初始化 |
|
||||
| `openclaw doctor --fix` | 修复配置 |
|
||||
| `openclaw logs --follow` | 查看日志 |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **不要用 root 运行** - 会生成 `/root/.openclaw`,权限混乱
|
||||
2. **统一使用普通用户** (shenwei) 安装和运行
|
||||
3. **通过 systemctl 管理 Gateway**,不要用 tmux
|
||||
4. **Telegram Bot 限制** - 每个账号最多 20 个 bot
|
||||
|
||||
---
|
||||
|
||||
## Ubuntu 服务器列表
|
||||
|
||||
| 服务器 | 内网 IP | 说明 |
|
||||
|--------|---------|------|
|
||||
| ubuntu1 | 192.168.3.47 | - |
|
||||
| ubuntu2 | 192.168.3.45 | - |
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-03-16*
|
||||
|
||||
@@ -1,358 +1,358 @@
|
||||
---
|
||||
title: vaultwarden凭证查找研究
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [bitwarden, bitwarden-cli, vaultwarden]
|
||||
---
|
||||
|
||||
# vaultwarden凭证查找研究
|
||||
|
||||
#bitwarden #vaultwarden #bitwarden-cli
|
||||
## 📅 研究日期
|
||||
2026-03-13
|
||||
|
||||
## 🎯 用户需求
|
||||
用户希望:通过item名称从vaultwarden中查找对应的用户名和密码。
|
||||
|
||||
**具体场景**:
|
||||
- 用户说:"从vaultwarden里找出n8n的credential"
|
||||
- 我需要:
|
||||
1. 登录vaultwarden
|
||||
2. 搜索item名称为"n8n"的项目
|
||||
3. 提取对应的用户名和密码
|
||||
|
||||
## 🔍 技术方案研究
|
||||
|
||||
### 方案一:Bitwarden CLI (bw)
|
||||
|
||||
#### 安装和配置
|
||||
```bash
|
||||
# 安装Bitwarden CLI
|
||||
brew install bitwarden-cli
|
||||
|
||||
# 配置连接到vaultwarden实例
|
||||
bw config server http://localhost:8080
|
||||
|
||||
# 登录(需要API密钥)
|
||||
export BW_CLIENTID="your-client-id"
|
||||
export BW_CLIENTSECRET="your-client-secret"
|
||||
bw login --apikey
|
||||
```
|
||||
|
||||
#### 搜索命令示例
|
||||
```bash
|
||||
# 列出所有项目
|
||||
bw list items
|
||||
|
||||
# 搜索特定名称的项目
|
||||
bw list items --search "n8n"
|
||||
|
||||
# 获取特定项目的详细信息
|
||||
bw get item "item-id-here"
|
||||
|
||||
# 获取用户名和密码
|
||||
bw get username "item-id-here"
|
||||
bw get password "item-id-here"
|
||||
```
|
||||
|
||||
#### 自动化脚本示例
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# vaultwarden-search.sh
|
||||
|
||||
ITEM_NAME="$1"
|
||||
|
||||
# 搜索项目
|
||||
ITEM_ID=$(bw list items --search "$ITEM_NAME" | jq -r '.[0].id')
|
||||
|
||||
if [ -z "$ITEM_ID" ] || [ "$ITEM_ID" = "null" ]; then
|
||||
echo "❌ 未找到项目: $ITEM_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取详细信息
|
||||
USERNAME=$(bw get username "$ITEM_ID")
|
||||
PASSWORD=$(bw get password "$ITEM_ID")
|
||||
|
||||
echo "✅ 找到项目: $ITEM_NAME"
|
||||
echo "👤 用户名: $USERNAME"
|
||||
echo "🔑 密码: $PASSWORD"
|
||||
```
|
||||
|
||||
### 方案二:直接REST API调用
|
||||
|
||||
#### API端点
|
||||
```
|
||||
POST /identity/connect/token # 获取访问令牌
|
||||
GET /api/collections # 获取集合列表
|
||||
GET /api/list/object/items # 获取项目列表
|
||||
GET /api/items/{id} # 获取特定项目
|
||||
```
|
||||
|
||||
#### Python示例
|
||||
```python
|
||||
import requests
|
||||
import json
|
||||
|
||||
class VaultwardenClient:
|
||||
def __init__(self, server_url, client_id, client_secret):
|
||||
self.server_url = server_url
|
||||
self.client_id = client_id
|
||||
self.client_secret = client_secret
|
||||
self.access_token = None
|
||||
|
||||
def login(self):
|
||||
"""获取访问令牌"""
|
||||
auth_data = {
|
||||
"grant_type": "client_credentials",
|
||||
"client_id": self.client_id,
|
||||
"client_secret": self.client_secret,
|
||||
"scope": "api"
|
||||
}
|
||||
|
||||
response = requests.post(
|
||||
f"{self.server_url}/identity/connect/token",
|
||||
data=auth_data
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
self.access_token = response.json()["access_token"]
|
||||
return True
|
||||
return False
|
||||
|
||||
def search_item(self, item_name):
|
||||
"""搜索项目"""
|
||||
headers = {"Authorization": f"Bearer {self.access_token}"}
|
||||
|
||||
# 获取所有项目
|
||||
response = requests.get(
|
||||
f"{self.server_url}/api/list/object/items",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
items = response.json()
|
||||
# 搜索匹配的项目
|
||||
for item in items:
|
||||
if item_name.lower() in item["name"].lower():
|
||||
return item
|
||||
return None
|
||||
|
||||
def get_credentials(self, item_name):
|
||||
"""获取项目的凭证"""
|
||||
item = self.search_item(item_name)
|
||||
if item:
|
||||
return {
|
||||
"username": item.get("login", {}).get("username"),
|
||||
"password": item.get("login", {}).get("password")
|
||||
}
|
||||
return None
|
||||
```
|
||||
|
||||
### 方案三:集成到OpenClaw技能系统
|
||||
|
||||
#### 技能结构
|
||||
```
|
||||
vaultwarden-skill/
|
||||
├── SKILL.md # 技能文档
|
||||
├── vaultwarden-client.sh # CLI客户端脚本
|
||||
├── vaultwarden-api.py # Python API客户端
|
||||
└── examples/
|
||||
└── get-credentials.sh # 使用示例
|
||||
```
|
||||
|
||||
#### 技能功能
|
||||
1. **配置管理**:存储vaultwarden连接配置
|
||||
2. **认证处理**:处理API密钥和会话管理
|
||||
3. **搜索功能**:按名称搜索项目
|
||||
4. **凭证提取**:安全获取用户名和密码
|
||||
5. **安全清理**:使用后清理内存中的凭证
|
||||
|
||||
## 🔐 安全考虑
|
||||
|
||||
### 凭证存储
|
||||
- **不存储明文密码**:只在内存中临时使用
|
||||
- **加密配置**:API密钥加密存储
|
||||
- **会话管理**:短期访问令牌,定期刷新
|
||||
|
||||
### 访问控制
|
||||
- **最小权限**:只读取需要的项目
|
||||
- **审计日志**:记录所有访问请求
|
||||
- **手动确认**:重要操作需要用户确认
|
||||
|
||||
### 清理机制
|
||||
```bash
|
||||
# 使用后清理环境变量
|
||||
unset BW_SESSION
|
||||
unset VAULTWARDEN_CREDENTIALS
|
||||
|
||||
# 清理命令行历史
|
||||
history -c
|
||||
```
|
||||
|
||||
## 🚀 实施建议
|
||||
|
||||
### 阶段一:基础测试
|
||||
1. **安装Bitwarden CLI**
|
||||
```bash
|
||||
brew install bitwarden-cli jq
|
||||
```
|
||||
|
||||
2. **测试连接**
|
||||
```bash
|
||||
# 配置服务器
|
||||
bw config server http://localhost:8080
|
||||
|
||||
# 测试API连接
|
||||
bw status
|
||||
```
|
||||
|
||||
3. **创建测试脚本**
|
||||
```bash
|
||||
# 简单的搜索脚本
|
||||
./vaultwarden-search.sh n8n
|
||||
```
|
||||
|
||||
### 阶段二:集成开发
|
||||
1. **创建vaultwarden技能**
|
||||
- 基于1password技能模式
|
||||
- 添加vaultwarden特定功能
|
||||
|
||||
2. **安全封装**
|
||||
- 凭证安全处理
|
||||
- 错误处理和日志
|
||||
- 清理机制
|
||||
|
||||
3. **测试验证**
|
||||
- 单元测试
|
||||
- 集成测试
|
||||
- 安全测试
|
||||
|
||||
### 阶段三:生产部署
|
||||
1. **配置管理**
|
||||
- 环境变量配置
|
||||
- 加密存储
|
||||
- 备份机制
|
||||
|
||||
2. **监控审计**
|
||||
- 访问日志
|
||||
- 异常监控
|
||||
- 定期审计
|
||||
|
||||
3. **文档培训**
|
||||
- 使用文档
|
||||
- 安全指南
|
||||
- 故障排除
|
||||
|
||||
## 📋 使用流程设计
|
||||
|
||||
### 用户指令
|
||||
```
|
||||
"从vaultwarden里找出n8n的credential"
|
||||
```
|
||||
|
||||
### 系统响应
|
||||
1. **解析指令**:识别"vaultwarden"和"n8n"
|
||||
2. **认证登录**:使用API密钥登录vaultwarden
|
||||
3. **搜索项目**:查找名称为"n8n"的项目
|
||||
4. **提取凭证**:获取用户名和密码
|
||||
5. **返回结果**:安全地返回凭证信息
|
||||
6. **清理内存**:清除临时凭证数据
|
||||
|
||||
### 输出格式
|
||||
```
|
||||
✅ 找到vaultwarden项目: n8n
|
||||
📋 项目ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
👤 用户名: admin@example.com
|
||||
🔑 密码: ********
|
||||
📝 备注: n8n工作流平台管理员账户
|
||||
```
|
||||
|
||||
## ⚠️ 风险与缓解
|
||||
|
||||
### 风险1:凭证泄露
|
||||
- **缓解**:不在日志中记录密码,使用后立即清理内存
|
||||
|
||||
### 风险2:API密钥泄露
|
||||
- **缓解**:加密存储,定期轮换,最小权限原则
|
||||
|
||||
### 风险3:未授权访问
|
||||
- **缓解**:IP白名单,访问频率限制,审计日志
|
||||
|
||||
### 风险4:会话劫持
|
||||
- **缓解**:短期令牌,HTTPS加密,定期刷新
|
||||
|
||||
## 🔮 未来扩展
|
||||
|
||||
### 功能扩展
|
||||
1. **批量操作**:一次获取多个项目的凭证
|
||||
2. **自动填充**:在Web表单中自动填充凭证
|
||||
3. **密码生成**:生成安全密码并保存
|
||||
4. **过期提醒**:密码过期前提醒更新
|
||||
|
||||
### 集成扩展
|
||||
1. **Docker集成**:在容器启动时注入凭证
|
||||
2. **CI/CD集成**:在流水线中安全使用凭证
|
||||
3. **监控集成**:监控vaultwarden服务状态
|
||||
4. **备份集成**:自动备份vaultwarden数据
|
||||
|
||||
## 📝 待决策事项
|
||||
|
||||
### 技术决策
|
||||
1. **使用Bitwarden CLI还是直接API?**
|
||||
- CLI更成熟,API更灵活
|
||||
- 建议:从CLI开始,需要时扩展API
|
||||
|
||||
2. **认证方式?**
|
||||
- API密钥 vs 用户名密码
|
||||
- 建议:API密钥,更安全可控
|
||||
|
||||
3. **凭证存储方式?**
|
||||
- 环境变量 vs 配置文件 vs 密钥管理服务
|
||||
- 建议:加密配置文件+环境变量覆盖
|
||||
|
||||
### 安全决策
|
||||
1. **访问控制粒度?**
|
||||
- 只读访问 vs 读写访问
|
||||
- 建议:只读访问,最小权限
|
||||
|
||||
2. **审计日志级别?**
|
||||
- 基本日志 vs 详细日志
|
||||
- 建议:详细日志但脱敏敏感信息
|
||||
|
||||
3. **会话超时时间?**
|
||||
- 短期(分钟) vs 长期(小时)
|
||||
- 建议:短期会话,自动刷新
|
||||
|
||||
## ✅ 下一步行动
|
||||
|
||||
### 立即行动
|
||||
1. **安装测试工具**
|
||||
```bash
|
||||
brew install bitwarden-cli jq
|
||||
```
|
||||
|
||||
2. **获取API密钥**
|
||||
- 从vaultwarden Web界面生成API密钥
|
||||
|
||||
3. **创建测试脚本**
|
||||
- 实现基本的搜索功能
|
||||
|
||||
### 短期计划(1周内)
|
||||
1. **创建vaultwarden技能原型**
|
||||
2. **安全测试和验证**
|
||||
3. **文档编写**
|
||||
|
||||
### 中期计划(1个月内)
|
||||
1. **集成到OpenClaw系统**
|
||||
2. **实现完整的凭证管理流程**
|
||||
3. **用户培训和部署**
|
||||
|
||||
---
|
||||
|
||||
**研究完成时间**: 2026-03-13 22:30 GMT+8
|
||||
**研究人员**: 星曜 (OpenClaw助手)
|
||||
---
|
||||
title: vaultwarden凭证查找研究
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [bitwarden, bitwarden-cli, vaultwarden]
|
||||
---
|
||||
|
||||
# vaultwarden凭证查找研究
|
||||
|
||||
#bitwarden #vaultwarden #bitwarden-cli
|
||||
## 📅 研究日期
|
||||
2026-03-13
|
||||
|
||||
## 🎯 用户需求
|
||||
用户希望:通过item名称从vaultwarden中查找对应的用户名和密码。
|
||||
|
||||
**具体场景**:
|
||||
- 用户说:"从vaultwarden里找出n8n的credential"
|
||||
- 我需要:
|
||||
1. 登录vaultwarden
|
||||
2. 搜索item名称为"n8n"的项目
|
||||
3. 提取对应的用户名和密码
|
||||
|
||||
## 🔍 技术方案研究
|
||||
|
||||
### 方案一:Bitwarden CLI (bw)
|
||||
|
||||
#### 安装和配置
|
||||
```bash
|
||||
# 安装Bitwarden CLI
|
||||
brew install bitwarden-cli
|
||||
|
||||
# 配置连接到vaultwarden实例
|
||||
bw config server http://localhost:8080
|
||||
|
||||
# 登录(需要API密钥)
|
||||
export BW_CLIENTID="your-client-id"
|
||||
export BW_CLIENTSECRET="your-client-secret"
|
||||
bw login --apikey
|
||||
```
|
||||
|
||||
#### 搜索命令示例
|
||||
```bash
|
||||
# 列出所有项目
|
||||
bw list items
|
||||
|
||||
# 搜索特定名称的项目
|
||||
bw list items --search "n8n"
|
||||
|
||||
# 获取特定项目的详细信息
|
||||
bw get item "item-id-here"
|
||||
|
||||
# 获取用户名和密码
|
||||
bw get username "item-id-here"
|
||||
bw get password "item-id-here"
|
||||
```
|
||||
|
||||
#### 自动化脚本示例
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# vaultwarden-search.sh
|
||||
|
||||
ITEM_NAME="$1"
|
||||
|
||||
# 搜索项目
|
||||
ITEM_ID=$(bw list items --search "$ITEM_NAME" | jq -r '.[0].id')
|
||||
|
||||
if [ -z "$ITEM_ID" ] || [ "$ITEM_ID" = "null" ]; then
|
||||
echo "❌ 未找到项目: $ITEM_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取详细信息
|
||||
USERNAME=$(bw get username "$ITEM_ID")
|
||||
PASSWORD=$(bw get password "$ITEM_ID")
|
||||
|
||||
echo "✅ 找到项目: $ITEM_NAME"
|
||||
echo "👤 用户名: $USERNAME"
|
||||
echo "🔑 密码: $PASSWORD"
|
||||
```
|
||||
|
||||
### 方案二:直接REST API调用
|
||||
|
||||
#### API端点
|
||||
```
|
||||
POST /identity/connect/token # 获取访问令牌
|
||||
GET /api/collections # 获取集合列表
|
||||
GET /api/list/object/items # 获取项目列表
|
||||
GET /api/items/{id} # 获取特定项目
|
||||
```
|
||||
|
||||
#### Python示例
|
||||
```python
|
||||
import requests
|
||||
import json
|
||||
|
||||
class VaultwardenClient:
|
||||
def __init__(self, server_url, client_id, client_secret):
|
||||
self.server_url = server_url
|
||||
self.client_id = client_id
|
||||
self.client_secret = client_secret
|
||||
self.access_token = None
|
||||
|
||||
def login(self):
|
||||
"""获取访问令牌"""
|
||||
auth_data = {
|
||||
"grant_type": "client_credentials",
|
||||
"client_id": self.client_id,
|
||||
"client_secret": self.client_secret,
|
||||
"scope": "api"
|
||||
}
|
||||
|
||||
response = requests.post(
|
||||
f"{self.server_url}/identity/connect/token",
|
||||
data=auth_data
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
self.access_token = response.json()["access_token"]
|
||||
return True
|
||||
return False
|
||||
|
||||
def search_item(self, item_name):
|
||||
"""搜索项目"""
|
||||
headers = {"Authorization": f"Bearer {self.access_token}"}
|
||||
|
||||
# 获取所有项目
|
||||
response = requests.get(
|
||||
f"{self.server_url}/api/list/object/items",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
items = response.json()
|
||||
# 搜索匹配的项目
|
||||
for item in items:
|
||||
if item_name.lower() in item["name"].lower():
|
||||
return item
|
||||
return None
|
||||
|
||||
def get_credentials(self, item_name):
|
||||
"""获取项目的凭证"""
|
||||
item = self.search_item(item_name)
|
||||
if item:
|
||||
return {
|
||||
"username": item.get("login", {}).get("username"),
|
||||
"password": item.get("login", {}).get("password")
|
||||
}
|
||||
return None
|
||||
```
|
||||
|
||||
### 方案三:集成到OpenClaw技能系统
|
||||
|
||||
#### 技能结构
|
||||
```
|
||||
vaultwarden-skill/
|
||||
├── SKILL.md # 技能文档
|
||||
├── vaultwarden-client.sh # CLI客户端脚本
|
||||
├── vaultwarden-api.py # Python API客户端
|
||||
└── examples/
|
||||
└── get-credentials.sh # 使用示例
|
||||
```
|
||||
|
||||
#### 技能功能
|
||||
1. **配置管理**:存储vaultwarden连接配置
|
||||
2. **认证处理**:处理API密钥和会话管理
|
||||
3. **搜索功能**:按名称搜索项目
|
||||
4. **凭证提取**:安全获取用户名和密码
|
||||
5. **安全清理**:使用后清理内存中的凭证
|
||||
|
||||
## 🔐 安全考虑
|
||||
|
||||
### 凭证存储
|
||||
- **不存储明文密码**:只在内存中临时使用
|
||||
- **加密配置**:API密钥加密存储
|
||||
- **会话管理**:短期访问令牌,定期刷新
|
||||
|
||||
### 访问控制
|
||||
- **最小权限**:只读取需要的项目
|
||||
- **审计日志**:记录所有访问请求
|
||||
- **手动确认**:重要操作需要用户确认
|
||||
|
||||
### 清理机制
|
||||
```bash
|
||||
# 使用后清理环境变量
|
||||
unset BW_SESSION
|
||||
unset VAULTWARDEN_CREDENTIALS
|
||||
|
||||
# 清理命令行历史
|
||||
history -c
|
||||
```
|
||||
|
||||
## 🚀 实施建议
|
||||
|
||||
### 阶段一:基础测试
|
||||
1. **安装Bitwarden CLI**
|
||||
```bash
|
||||
brew install bitwarden-cli jq
|
||||
```
|
||||
|
||||
2. **测试连接**
|
||||
```bash
|
||||
# 配置服务器
|
||||
bw config server http://localhost:8080
|
||||
|
||||
# 测试API连接
|
||||
bw status
|
||||
```
|
||||
|
||||
3. **创建测试脚本**
|
||||
```bash
|
||||
# 简单的搜索脚本
|
||||
./vaultwarden-search.sh n8n
|
||||
```
|
||||
|
||||
### 阶段二:集成开发
|
||||
1. **创建vaultwarden技能**
|
||||
- 基于1password技能模式
|
||||
- 添加vaultwarden特定功能
|
||||
|
||||
2. **安全封装**
|
||||
- 凭证安全处理
|
||||
- 错误处理和日志
|
||||
- 清理机制
|
||||
|
||||
3. **测试验证**
|
||||
- 单元测试
|
||||
- 集成测试
|
||||
- 安全测试
|
||||
|
||||
### 阶段三:生产部署
|
||||
1. **配置管理**
|
||||
- 环境变量配置
|
||||
- 加密存储
|
||||
- 备份机制
|
||||
|
||||
2. **监控审计**
|
||||
- 访问日志
|
||||
- 异常监控
|
||||
- 定期审计
|
||||
|
||||
3. **文档培训**
|
||||
- 使用文档
|
||||
- 安全指南
|
||||
- 故障排除
|
||||
|
||||
## 📋 使用流程设计
|
||||
|
||||
### 用户指令
|
||||
```
|
||||
"从vaultwarden里找出n8n的credential"
|
||||
```
|
||||
|
||||
### 系统响应
|
||||
1. **解析指令**:识别"vaultwarden"和"n8n"
|
||||
2. **认证登录**:使用API密钥登录vaultwarden
|
||||
3. **搜索项目**:查找名称为"n8n"的项目
|
||||
4. **提取凭证**:获取用户名和密码
|
||||
5. **返回结果**:安全地返回凭证信息
|
||||
6. **清理内存**:清除临时凭证数据
|
||||
|
||||
### 输出格式
|
||||
```
|
||||
✅ 找到vaultwarden项目: n8n
|
||||
📋 项目ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
👤 用户名: admin@example.com
|
||||
🔑 密码: ********
|
||||
📝 备注: n8n工作流平台管理员账户
|
||||
```
|
||||
|
||||
## ⚠️ 风险与缓解
|
||||
|
||||
### 风险1:凭证泄露
|
||||
- **缓解**:不在日志中记录密码,使用后立即清理内存
|
||||
|
||||
### 风险2:API密钥泄露
|
||||
- **缓解**:加密存储,定期轮换,最小权限原则
|
||||
|
||||
### 风险3:未授权访问
|
||||
- **缓解**:IP白名单,访问频率限制,审计日志
|
||||
|
||||
### 风险4:会话劫持
|
||||
- **缓解**:短期令牌,HTTPS加密,定期刷新
|
||||
|
||||
## 🔮 未来扩展
|
||||
|
||||
### 功能扩展
|
||||
1. **批量操作**:一次获取多个项目的凭证
|
||||
2. **自动填充**:在Web表单中自动填充凭证
|
||||
3. **密码生成**:生成安全密码并保存
|
||||
4. **过期提醒**:密码过期前提醒更新
|
||||
|
||||
### 集成扩展
|
||||
1. **Docker集成**:在容器启动时注入凭证
|
||||
2. **CI/CD集成**:在流水线中安全使用凭证
|
||||
3. **监控集成**:监控vaultwarden服务状态
|
||||
4. **备份集成**:自动备份vaultwarden数据
|
||||
|
||||
## 📝 待决策事项
|
||||
|
||||
### 技术决策
|
||||
1. **使用Bitwarden CLI还是直接API?**
|
||||
- CLI更成熟,API更灵活
|
||||
- 建议:从CLI开始,需要时扩展API
|
||||
|
||||
2. **认证方式?**
|
||||
- API密钥 vs 用户名密码
|
||||
- 建议:API密钥,更安全可控
|
||||
|
||||
3. **凭证存储方式?**
|
||||
- 环境变量 vs 配置文件 vs 密钥管理服务
|
||||
- 建议:加密配置文件+环境变量覆盖
|
||||
|
||||
### 安全决策
|
||||
1. **访问控制粒度?**
|
||||
- 只读访问 vs 读写访问
|
||||
- 建议:只读访问,最小权限
|
||||
|
||||
2. **审计日志级别?**
|
||||
- 基本日志 vs 详细日志
|
||||
- 建议:详细日志但脱敏敏感信息
|
||||
|
||||
3. **会话超时时间?**
|
||||
- 短期(分钟) vs 长期(小时)
|
||||
- 建议:短期会话,自动刷新
|
||||
|
||||
## ✅ 下一步行动
|
||||
|
||||
### 立即行动
|
||||
1. **安装测试工具**
|
||||
```bash
|
||||
brew install bitwarden-cli jq
|
||||
```
|
||||
|
||||
2. **获取API密钥**
|
||||
- 从vaultwarden Web界面生成API密钥
|
||||
|
||||
3. **创建测试脚本**
|
||||
- 实现基本的搜索功能
|
||||
|
||||
### 短期计划(1周内)
|
||||
1. **创建vaultwarden技能原型**
|
||||
2. **安全测试和验证**
|
||||
3. **文档编写**
|
||||
|
||||
### 中期计划(1个月内)
|
||||
1. **集成到OpenClaw系统**
|
||||
2. **实现完整的凭证管理流程**
|
||||
3. **用户培训和部署**
|
||||
|
||||
---
|
||||
|
||||
**研究完成时间**: 2026-03-13 22:30 GMT+8
|
||||
**研究人员**: 星曜 (OpenClaw助手)
|
||||
**状态**: 研究完成,等待用户决策
|
||||
@@ -1,169 +1,169 @@
|
||||
---
|
||||
title: x-UI 管理文档
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# x-UI 管理文档
|
||||
|
||||
> 最后更新: 2026-03-15
|
||||
|
||||
## 概述
|
||||
|
||||
x-UI 是一个基于 Xray 核心的图形化代理服务管理面板,用于科学上网。
|
||||
|
||||
## 服务器信息
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 服务器 | VPS2 (Bandwagon) |
|
||||
| IP | 104.194.92.188 |
|
||||
| SSH | `ssh vps2` |
|
||||
| 域名 | kiwi.ishenwei.online |
|
||||
|
||||
## 访问方式
|
||||
|
||||
### 命令行管理
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
```
|
||||
|
||||
### Web 管理界面
|
||||
|
||||
- 地址: `https://kiwi.ishenwei.online:2053/`
|
||||
- 或: `https://104.194.92.188:2053/`
|
||||
- (端口可能需要确认)
|
||||
|
||||
---
|
||||
|
||||
## 命令行菜单说明
|
||||
|
||||
连接 VPS2 后运行 `x-ui` 命令,显示主菜单:
|
||||
|
||||
```
|
||||
╔────────────────────────────────────────────────╗
|
||||
│ 3X-UI Panel Management Script │
|
||||
│ 0. Exit Script │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 1. Install │
|
||||
│ 2. Update │
|
||||
│ 3. Update Menu │
|
||||
│ 4. Legacy Version │
|
||||
│ 5. Uninstall │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 6. Reset Username & Password │
|
||||
│ 7. Reset Web Base Path │
|
||||
│ 8. Reset Settings │
|
||||
│ 9. Change Port │
|
||||
│ 10. View Current Settings │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 11. Start │
|
||||
│ 12. Stop │
|
||||
│ 13. Restart │
|
||||
│ 14. Check Status │
|
||||
│ 15. Logs Management │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 16. Enable Autostart │
|
||||
│ 17. Disable Autostart │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 18. SSL Certificate Management │
|
||||
│ 19. Cloudflare SSL Certificate │
|
||||
│ 20. IP Limit Management │
|
||||
│ 21. Firewall Management │
|
||||
│ 22. SSH Port Forwarding Management │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 23. Enable BBR │
|
||||
│ 24. Update Geo Files │
|
||||
│ 25. Speedtest by Ookla │
|
||||
╚────────────────────────────────────────────────╝
|
||||
```
|
||||
|
||||
## 常用操作
|
||||
|
||||
### 启动/停止/重启
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
# 输入数字进行操作
|
||||
11 # Start
|
||||
12 # Stop
|
||||
13 # Restart
|
||||
```
|
||||
|
||||
### 检查状态
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
14 # Check Status
|
||||
```
|
||||
|
||||
当前状态显示:
|
||||
- **Panel state**: Running
|
||||
- **Start automatically**: Yes
|
||||
- **xray state**: Running
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
15 # Logs Management
|
||||
```
|
||||
|
||||
### 更新 Geo 文件 (推荐定期更新)
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
24 # Update Geo Files
|
||||
```
|
||||
|
||||
### 启用 BBR 加速
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
23 # Enable BBR
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Web 管理界面功能
|
||||
|
||||
(待补充 - 需要比利哥提供后台登录信息)
|
||||
|
||||
预计可管理:
|
||||
- 入站规则配置
|
||||
- 用户/流量管理
|
||||
- 节点信息
|
||||
- 传输协议设置 (VMess, VLESS, Trojan, Shadowsocks 等)
|
||||
|
||||
---
|
||||
|
||||
## 快速命令汇总
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| SSH 登录 | `ssh vps2` |
|
||||
| 打开管理菜单 | `x-ui` |
|
||||
| 查看状态 | `ssh vps2 "echo '14' \| x-ui"` |
|
||||
| 重启 x-ui | `ssh vps2 "echo '13' \| x-ui"` |
|
||||
| 停止 x-ui | `ssh vps2 "echo '12' \| x-ui"` |
|
||||
| 启动 x-ui | `ssh vps2 "echo '11' \| x-ui"` |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 所有操作需要 SSH 登录到 vps2
|
||||
2. 修改配置前建议先检查状态 (选项 14)
|
||||
3. 定期更新 Geo 文件 (选项 24) 以获得最新节点路由数据
|
||||
4. Web 管理界面端口默认 2053 (需确认)
|
||||
---
|
||||
title: x-UI 管理文档
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: []
|
||||
---
|
||||
|
||||
# x-UI 管理文档
|
||||
|
||||
> 最后更新: 2026-03-15
|
||||
|
||||
## 概述
|
||||
|
||||
x-UI 是一个基于 Xray 核心的图形化代理服务管理面板,用于科学上网。
|
||||
|
||||
## 服务器信息
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 服务器 | VPS2 (Bandwagon) |
|
||||
| IP | 104.194.92.188 |
|
||||
| SSH | `ssh vps2` |
|
||||
| 域名 | kiwi.ishenwei.online |
|
||||
|
||||
## 访问方式
|
||||
|
||||
### 命令行管理
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
```
|
||||
|
||||
### Web 管理界面
|
||||
|
||||
- 地址: `https://kiwi.ishenwei.online:2053/`
|
||||
- 或: `https://104.194.92.188:2053/`
|
||||
- (端口可能需要确认)
|
||||
|
||||
---
|
||||
|
||||
## 命令行菜单说明
|
||||
|
||||
连接 VPS2 后运行 `x-ui` 命令,显示主菜单:
|
||||
|
||||
```
|
||||
╔────────────────────────────────────────────────╗
|
||||
│ 3X-UI Panel Management Script │
|
||||
│ 0. Exit Script │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 1. Install │
|
||||
│ 2. Update │
|
||||
│ 3. Update Menu │
|
||||
│ 4. Legacy Version │
|
||||
│ 5. Uninstall │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 6. Reset Username & Password │
|
||||
│ 7. Reset Web Base Path │
|
||||
│ 8. Reset Settings │
|
||||
│ 9. Change Port │
|
||||
│ 10. View Current Settings │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 11. Start │
|
||||
│ 12. Stop │
|
||||
│ 13. Restart │
|
||||
│ 14. Check Status │
|
||||
│ 15. Logs Management │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 16. Enable Autostart │
|
||||
│ 17. Disable Autostart │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 18. SSL Certificate Management │
|
||||
│ 19. Cloudflare SSL Certificate │
|
||||
│ 20. IP Limit Management │
|
||||
│ 21. Firewall Management │
|
||||
│ 22. SSH Port Forwarding Management │
|
||||
│────────────────────────────────────────────────│
|
||||
│ 23. Enable BBR │
|
||||
│ 24. Update Geo Files │
|
||||
│ 25. Speedtest by Ookla │
|
||||
╚────────────────────────────────────────────────╝
|
||||
```
|
||||
|
||||
## 常用操作
|
||||
|
||||
### 启动/停止/重启
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
# 输入数字进行操作
|
||||
11 # Start
|
||||
12 # Stop
|
||||
13 # Restart
|
||||
```
|
||||
|
||||
### 检查状态
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
14 # Check Status
|
||||
```
|
||||
|
||||
当前状态显示:
|
||||
- **Panel state**: Running
|
||||
- **Start automatically**: Yes
|
||||
- **xray state**: Running
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
15 # Logs Management
|
||||
```
|
||||
|
||||
### 更新 Geo 文件 (推荐定期更新)
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
24 # Update Geo Files
|
||||
```
|
||||
|
||||
### 启用 BBR 加速
|
||||
|
||||
```bash
|
||||
ssh vps2
|
||||
x-ui
|
||||
23 # Enable BBR
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Web 管理界面功能
|
||||
|
||||
(待补充 - 需要比利哥提供后台登录信息)
|
||||
|
||||
预计可管理:
|
||||
- 入站规则配置
|
||||
- 用户/流量管理
|
||||
- 节点信息
|
||||
- 传输协议设置 (VMess, VLESS, Trojan, Shadowsocks 等)
|
||||
|
||||
---
|
||||
|
||||
## 快速命令汇总
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| SSH 登录 | `ssh vps2` |
|
||||
| 打开管理菜单 | `x-ui` |
|
||||
| 查看状态 | `ssh vps2 "echo '14' \| x-ui"` |
|
||||
| 重启 x-ui | `ssh vps2 "echo '13' \| x-ui"` |
|
||||
| 停止 x-ui | `ssh vps2 "echo '12' \| x-ui"` |
|
||||
| 启动 x-ui | `ssh vps2 "echo '11' \| x-ui"` |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 所有操作需要 SSH 登录到 vps2
|
||||
2. 修改配置前建议先检查状态 (选项 14)
|
||||
3. 定期更新 Geo 文件 (选项 24) 以获得最新节点路由数据
|
||||
4. Web 管理界面端口默认 2053 (需确认)
|
||||
|
||||
@@ -1,193 +1,193 @@
|
||||
---
|
||||
title: Zipline-Stack 配置分析报告
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, minio, zipline]
|
||||
---
|
||||
|
||||
# Zipline-Stack 配置分析报告
|
||||
**分析时间:** 2026-03-14 03:04 (Asia/Shanghai)
|
||||
**文件位置:** `/volume1/docker/zipline-stack/docker-compose.yml`
|
||||
|
||||
#zipline #minio #docker
|
||||
## 📋 总体架构
|
||||
|
||||
Zipline-Stack 是一个**三服务微服务架构**,包含:
|
||||
1. **MinIO** - 对象存储服务 (S3兼容)
|
||||
2. **PostgreSQL** - 数据库服务
|
||||
3. **Zipline** - 文件分享应用
|
||||
|
||||
## 🔧 详细配置分析
|
||||
|
||||
### 1. MinIO 服务 (对象存储)
|
||||
```yaml
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: Abcd_1234
|
||||
ports:
|
||||
- "9000:9000" # API端口
|
||||
- "9001:9001" # 控制台端口
|
||||
volumes:
|
||||
- /volume1/docker/zipline-stack/minio/minio_data:/data
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||
```
|
||||
|
||||
**配置特点:**
|
||||
- **认证信息**: 用户名`admin`,密码`Abcd_1234`
|
||||
- **数据存储**: `/volume1/docker/zipline-stack/minio/minio_data`
|
||||
- **健康检查**: 通过HTTP端点检查服务状态
|
||||
- **资源限制**: 内存限制1GB,预留256MB
|
||||
|
||||
### 2. PostgreSQL 服务 (数据库)
|
||||
```yaml
|
||||
postgres:
|
||||
image: postgres:16
|
||||
container_name: zipline_postgres
|
||||
environment:
|
||||
POSTGRES_USER: zipline
|
||||
POSTGRES_PASSWORD: zipline
|
||||
POSTGRES_DB: zipline
|
||||
volumes:
|
||||
- /volume1/docker/zipline-stack/zipline/pg_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U zipline"]
|
||||
```
|
||||
|
||||
**配置特点:**
|
||||
- **版本**: PostgreSQL 16
|
||||
- **数据库**: `zipline`,用户`zipline`,密码`zipline`
|
||||
- **数据存储**: `/volume1/docker/zipline-stack/zipline/pg_data`
|
||||
- **健康检查**: 使用`pg_isready`检查数据库连接
|
||||
- **资源限制**: 内存限制512MB
|
||||
|
||||
### 3. Zipline 服务 (文件分享)
|
||||
```yaml
|
||||
zipline:
|
||||
image: ghcr.io/diced/zipline:latest
|
||||
container_name: zipline
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DATABASE_URL: postgres://zipline:zipline@postgres:5432/zipline
|
||||
CORE_SECRET: 22d5d3159d5ed51743bc8c8ef007f836
|
||||
ZPLINE_ADMIN_USERNAME: admin
|
||||
ZPLINE_ADMIN_PASSWORD: Abcd_1234
|
||||
STORAGE_ENGINE: s3
|
||||
S3_BUCKET: zipline-bucket
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
S3_ACCESS_KEY: admin
|
||||
S3_SECRET_KEY: Abcd_1234
|
||||
S3_REGION: us-east-1
|
||||
S3_FORCE_PATH_STYLE: "true"
|
||||
PORT: 3000
|
||||
ports:
|
||||
- "3333:3000"
|
||||
```
|
||||
|
||||
**配置特点:**
|
||||
- **依赖关系**: 依赖MinIO和PostgreSQL健康状态
|
||||
- **管理员账户**: 用户名`admin`,密码`Abcd_1234`
|
||||
- **存储配置**: 使用S3存储引擎,连接到MinIO
|
||||
- **核心密钥**: `22d5d3159d5ed51743bc8c8ef007f836`
|
||||
- **端口映射**: 主机3333端口映射到容器3000端口
|
||||
- **资源限制**: 内存限制512MB
|
||||
|
||||
## 🔐 安全配置分析
|
||||
|
||||
### 凭证信息
|
||||
1. **MinIO管理员**: `admin` / `Abcd_1234`
|
||||
2. **PostgreSQL**: `zipline` / `zipline`
|
||||
3. **Zipline管理员**: `admin` / `Abcd_1234`
|
||||
4. **S3访问密钥**: `admin` / `Abcd_1234`
|
||||
5. **核心密钥**: `22d5d3159d5ed51743bc8c8ef007f836`
|
||||
|
||||
### 安全建议
|
||||
1. **密码强度**: 当前密码`Abcd_1234`强度中等,建议加强
|
||||
2. **密钥管理**: 核心密钥应定期轮换
|
||||
3. **网络隔离**: 建议使用内部网络,减少外部暴露
|
||||
|
||||
## 📊 网络架构
|
||||
|
||||
```
|
||||
外部访问 (3333) → Zipline (3000)
|
||||
↓
|
||||
MinIO (9000-9001)
|
||||
↓
|
||||
PostgreSQL (5432)
|
||||
```
|
||||
|
||||
**端口映射:**
|
||||
- `3333` → Zipline Web界面
|
||||
- `9000` → MinIO API
|
||||
- `9001` → MinIO控制台
|
||||
|
||||
## 💾 存储架构
|
||||
|
||||
```
|
||||
/volume1/docker/zipline-stack/
|
||||
├── minio/
|
||||
│ └── minio_data/ # MinIO对象存储数据
|
||||
└── zipline/
|
||||
└── pg_data/ # PostgreSQL数据库数据
|
||||
```
|
||||
|
||||
## ⚙️ 优化配置
|
||||
|
||||
### 已实施的优化
|
||||
1. **健康检查**: 所有服务都有健康检查机制
|
||||
2. **资源限制**: 合理的内存限制,避免资源耗尽
|
||||
3. **依赖管理**: 服务启动顺序控制
|
||||
4. **数据持久化**: 所有数据都持久化到卷
|
||||
|
||||
### 可考虑的优化
|
||||
1. **备份策略**: 数据库和对象存储的定期备份
|
||||
2. **监控集成**: 集成到Prometheus监控系统
|
||||
3. **日志管理**: 集中日志收集和分析
|
||||
4. **SSL/TLS**: 启用HTTPS加密传输
|
||||
|
||||
## 🔍 技术细节
|
||||
|
||||
### Docker Compose版本
|
||||
- **版本**: 3.9 (支持资源限制和健康检查)
|
||||
|
||||
### 容器命名
|
||||
- `minio` - MinIO对象存储
|
||||
- `zipline_postgres` - PostgreSQL数据库
|
||||
- `zipline` - Zipline文件分享应用
|
||||
|
||||
### 重启策略
|
||||
- **策略**: `unless-stopped` (除非手动停止,否则自动重启)
|
||||
- **优势**: 系统重启后自动恢复服务
|
||||
|
||||
## 📈 性能配置
|
||||
|
||||
### 内存分配
|
||||
1. **MinIO**: 限制1GB,预留256MB
|
||||
2. **PostgreSQL**: 限制512MB
|
||||
3. **Zipline**: 限制512MB
|
||||
|
||||
### CPU配置
|
||||
- **已移除CPU限制**: 注释显示之前有CPU限制导致问题,现已移除
|
||||
|
||||
## 🚀 部署状态
|
||||
|
||||
根据之前的检查,所有三个服务都在正常运行:
|
||||
- **运行时间**: 2个月以上
|
||||
- **健康状态**: 所有服务健康
|
||||
- **稳定性**: 无重启记录,运行稳定
|
||||
|
||||
---
|
||||
*分析完成时间: 2026-03-14 03:05*
|
||||
---
|
||||
title: Zipline-Stack 配置分析报告
|
||||
source:
|
||||
author: shenwei
|
||||
published:
|
||||
created:
|
||||
description:
|
||||
tags: [docker, minio, zipline]
|
||||
---
|
||||
|
||||
# Zipline-Stack 配置分析报告
|
||||
**分析时间:** 2026-03-14 03:04 (Asia/Shanghai)
|
||||
**文件位置:** `/volume1/docker/zipline-stack/docker-compose.yml`
|
||||
|
||||
#zipline #minio #docker
|
||||
## 📋 总体架构
|
||||
|
||||
Zipline-Stack 是一个**三服务微服务架构**,包含:
|
||||
1. **MinIO** - 对象存储服务 (S3兼容)
|
||||
2. **PostgreSQL** - 数据库服务
|
||||
3. **Zipline** - 文件分享应用
|
||||
|
||||
## 🔧 详细配置分析
|
||||
|
||||
### 1. MinIO 服务 (对象存储)
|
||||
```yaml
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: Abcd_1234
|
||||
ports:
|
||||
- "9000:9000" # API端口
|
||||
- "9001:9001" # 控制台端口
|
||||
volumes:
|
||||
- /volume1/docker/zipline-stack/minio/minio_data:/data
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||
```
|
||||
|
||||
**配置特点:**
|
||||
- **认证信息**: 用户名`admin`,密码`Abcd_1234`
|
||||
- **数据存储**: `/volume1/docker/zipline-stack/minio/minio_data`
|
||||
- **健康检查**: 通过HTTP端点检查服务状态
|
||||
- **资源限制**: 内存限制1GB,预留256MB
|
||||
|
||||
### 2. PostgreSQL 服务 (数据库)
|
||||
```yaml
|
||||
postgres:
|
||||
image: postgres:16
|
||||
container_name: zipline_postgres
|
||||
environment:
|
||||
POSTGRES_USER: zipline
|
||||
POSTGRES_PASSWORD: zipline
|
||||
POSTGRES_DB: zipline
|
||||
volumes:
|
||||
- /volume1/docker/zipline-stack/zipline/pg_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U zipline"]
|
||||
```
|
||||
|
||||
**配置特点:**
|
||||
- **版本**: PostgreSQL 16
|
||||
- **数据库**: `zipline`,用户`zipline`,密码`zipline`
|
||||
- **数据存储**: `/volume1/docker/zipline-stack/zipline/pg_data`
|
||||
- **健康检查**: 使用`pg_isready`检查数据库连接
|
||||
- **资源限制**: 内存限制512MB
|
||||
|
||||
### 3. Zipline 服务 (文件分享)
|
||||
```yaml
|
||||
zipline:
|
||||
image: ghcr.io/diced/zipline:latest
|
||||
container_name: zipline
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DATABASE_URL: postgres://zipline:zipline@postgres:5432/zipline
|
||||
CORE_SECRET: 22d5d3159d5ed51743bc8c8ef007f836
|
||||
ZPLINE_ADMIN_USERNAME: admin
|
||||
ZPLINE_ADMIN_PASSWORD: Abcd_1234
|
||||
STORAGE_ENGINE: s3
|
||||
S3_BUCKET: zipline-bucket
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
S3_ACCESS_KEY: admin
|
||||
S3_SECRET_KEY: Abcd_1234
|
||||
S3_REGION: us-east-1
|
||||
S3_FORCE_PATH_STYLE: "true"
|
||||
PORT: 3000
|
||||
ports:
|
||||
- "3333:3000"
|
||||
```
|
||||
|
||||
**配置特点:**
|
||||
- **依赖关系**: 依赖MinIO和PostgreSQL健康状态
|
||||
- **管理员账户**: 用户名`admin`,密码`Abcd_1234`
|
||||
- **存储配置**: 使用S3存储引擎,连接到MinIO
|
||||
- **核心密钥**: `22d5d3159d5ed51743bc8c8ef007f836`
|
||||
- **端口映射**: 主机3333端口映射到容器3000端口
|
||||
- **资源限制**: 内存限制512MB
|
||||
|
||||
## 🔐 安全配置分析
|
||||
|
||||
### 凭证信息
|
||||
1. **MinIO管理员**: `admin` / `Abcd_1234`
|
||||
2. **PostgreSQL**: `zipline` / `zipline`
|
||||
3. **Zipline管理员**: `admin` / `Abcd_1234`
|
||||
4. **S3访问密钥**: `admin` / `Abcd_1234`
|
||||
5. **核心密钥**: `22d5d3159d5ed51743bc8c8ef007f836`
|
||||
|
||||
### 安全建议
|
||||
1. **密码强度**: 当前密码`Abcd_1234`强度中等,建议加强
|
||||
2. **密钥管理**: 核心密钥应定期轮换
|
||||
3. **网络隔离**: 建议使用内部网络,减少外部暴露
|
||||
|
||||
## 📊 网络架构
|
||||
|
||||
```
|
||||
外部访问 (3333) → Zipline (3000)
|
||||
↓
|
||||
MinIO (9000-9001)
|
||||
↓
|
||||
PostgreSQL (5432)
|
||||
```
|
||||
|
||||
**端口映射:**
|
||||
- `3333` → Zipline Web界面
|
||||
- `9000` → MinIO API
|
||||
- `9001` → MinIO控制台
|
||||
|
||||
## 💾 存储架构
|
||||
|
||||
```
|
||||
/volume1/docker/zipline-stack/
|
||||
├── minio/
|
||||
│ └── minio_data/ # MinIO对象存储数据
|
||||
└── zipline/
|
||||
└── pg_data/ # PostgreSQL数据库数据
|
||||
```
|
||||
|
||||
## ⚙️ 优化配置
|
||||
|
||||
### 已实施的优化
|
||||
1. **健康检查**: 所有服务都有健康检查机制
|
||||
2. **资源限制**: 合理的内存限制,避免资源耗尽
|
||||
3. **依赖管理**: 服务启动顺序控制
|
||||
4. **数据持久化**: 所有数据都持久化到卷
|
||||
|
||||
### 可考虑的优化
|
||||
1. **备份策略**: 数据库和对象存储的定期备份
|
||||
2. **监控集成**: 集成到Prometheus监控系统
|
||||
3. **日志管理**: 集中日志收集和分析
|
||||
4. **SSL/TLS**: 启用HTTPS加密传输
|
||||
|
||||
## 🔍 技术细节
|
||||
|
||||
### Docker Compose版本
|
||||
- **版本**: 3.9 (支持资源限制和健康检查)
|
||||
|
||||
### 容器命名
|
||||
- `minio` - MinIO对象存储
|
||||
- `zipline_postgres` - PostgreSQL数据库
|
||||
- `zipline` - Zipline文件分享应用
|
||||
|
||||
### 重启策略
|
||||
- **策略**: `unless-stopped` (除非手动停止,否则自动重启)
|
||||
- **优势**: 系统重启后自动恢复服务
|
||||
|
||||
## 📈 性能配置
|
||||
|
||||
### 内存分配
|
||||
1. **MinIO**: 限制1GB,预留256MB
|
||||
2. **PostgreSQL**: 限制512MB
|
||||
3. **Zipline**: 限制512MB
|
||||
|
||||
### CPU配置
|
||||
- **已移除CPU限制**: 注释显示之前有CPU限制导致问题,现已移除
|
||||
|
||||
## 🚀 部署状态
|
||||
|
||||
根据之前的检查,所有三个服务都在正常运行:
|
||||
- **运行时间**: 2个月以上
|
||||
- **健康状态**: 所有服务健康
|
||||
- **稳定性**: 无重启记录,运行稳定
|
||||
|
||||
---
|
||||
*分析完成时间: 2026-03-14 03:05*
|
||||
*分析者: 星曜*
|
||||
Reference in New Issue
Block a user