first build nexus

This commit is contained in:
billyshen
2026-03-23 20:57:45 +08:00
parent acb58c5684
commit e312026141
400 changed files with 52448 additions and 0 deletions

View File

@@ -0,0 +1,389 @@
# OpenClaw 技能笔记
> 创建时间: 2026-03-19
> 整理者: 星辉
---
## 📋 技能清单总览
本文档记录 OpenClaw 中所有可用的技能Skills
---
## 🔐 账号与密码
### 1. 1password
- **描述:** 1Password CLI (op) 工具
- **用途:** 安装CLI、桌面应用集成、单/多账户登录、读写/运行密码
- **路径:** `~/.agents/skills/1password-1.0.1/SKILL.md`
---
## 🍎 Apple 生态
### 2. apple-notes
- **描述:** Apple Notes 管理 via `memo` CLI
- **用途:** 创建、查看、编辑、删除、搜索、移动、导出笔记
- **路径:** `~/.openclaw/skills/apple-notes/SKILL.md`
### 3. apple-reminders
- **描述:** Apple Reminders via `remindctl` CLI
- **用途:** 列出、添加、编辑、完成、删除提醒支持列表、日期过滤、JSON/纯文本输出
- **路径:** `~/.openclaw/skills/apple-reminders/SKILL.md`
### 4. accli
- **描述:** Apple Calendar CLI
- **用途:** 列出日历、查看事件、创建/更新/删除日历事件、检查空闲时间
- **触发词:** "查看日历"、"安排会议"、"我今天有什么安排"、"明天我有空吗"
- **路径:** `~/.openclaw/skills/accli/SKILL.md`
---
## ☁️ 云服务与协作
### 5. gog
- **描述:** Google Workspace CLI
- **用途:** Gmail、日历、云盘、联系人、表格、文档
- **路径:** `~/.agents/skills/gog/SKILL.md`
### 6. feishu-chat-history
- **描述:** 获取飞书群聊历史
- **用途:** 读取、回顾、总结飞书群聊消息
- **触发词:** "看群聊记录"、"群里聊了啥"、"chat history"
- **路径:** `~/.agents/skills/feishu-chat-history/SKILL.md`
### 7. feishu-cron-reminder
- **描述:** 飞书定时提醒
- **用途:** 创建定时发送消息到飞书聊天的cron任务
- **触发词:** "飞书定时提醒"、"定时任务发飞书"、"每小时提醒"
- **路径:** `~/.agents/skills/feishu-cron-reminder/SKILL.md`
### 8. feishu-doc
- **描述:** 飞书文档获取
- **用途:** 获取飞书Wiki、文档、表格、Bitable内容自动转换为Markdown
- **路径:** `~/.agents/skills/feishu-doc-1.2.7/SKILL.md`
### 9. feishu-perm
- **描述:** 飞书权限管理
- **用途:** 文档和文件的分享、权限、协作者管理
- **触发词:** 分享、权限、协作者
- **路径:** `~/.agents/skills/feishu-perm/SKILL.md`
### 10. feishu-screenshot
- **描述:** 截屏并发送到飞书
- **用途:** 截取屏幕并通过飞书分享
- **触发词:** "截个屏发飞书"、"截屏"、"screenshot"
- **路径:** `~/.agents/skills/feishu-screenshot/SKILL.md`
### 11. feishu-send-file
- **描述:** 发送文件到飞书
- **用途:** 通过REST API发送文件、附件到飞书群或个人
- **触发词:** "发文件到飞书"、"send file to feishu"
- **路径:** `~/.agents/skills/feishu-send-file/SKILL.md`
---
## 💬 通讯工具
### 12. slack
- **描述:** Slack 控制
- **用途:** 通过 slack 工具控制Slack包括消息反应、pin/unpin
- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/slack/SKILL.md`
---
## 🌐 网络与浏览器
### 13. agent-browser
- **描述:** 无头浏览器自动化CLI
- **用途:** 为AI代理优化的浏览器自动化支持无障碍树快照和基于引用的元素选择
- **路径:** `~/.openclaw/skills/agent-browser-clawdbot/SKILL.md`
### 14. tavily-search
- **描述:** Tavily 搜索API
- **用途:** 网页搜索替代Brave返回相关结果标题、URL、摘要
- **路径:** `~/.openclaw/skills/openclaw-tavily-search/SKILL.md`
---
## 🛠️ 开发工具
### 15. Docker
- **描述:** Docker 容器、镜像、Compose、网络、卷、调试
- **用途:** Docker相关操作、生产环境加固、命令保持稳定
- **路径:** `~/.openclaw/skills/docker/SKILL.md`
### 16. Code
- **描述:** 编码工作流
- **用途:** 规划、实现、验证、测试的清洁软件开发流程
- **路径:** `~/.agents/skills/code-1.0.4/SKILL.md`
### 17. git-essentials
- **描述:** 基础Git命令
- **用途:** 版本控制、分支、协作
- **路径:** `~/.agents/skills/git-essentials-1.0.0/SKILL.md`
### 18. frontend-design
- **描述:** 前端界面设计
- **用途:** 创建独特、生产级的前端界面,高设计质量
- **路径:** `~/.agents/skills/frontend-design-3-0.1.0/SKILL.md`
### 19. security-auditor
- **描述:** 安全审计
- **用途:** 代码安全漏洞审查、身份验证流程、OWASP Top 10审计、CORS/CSP配置、敏感数据处理、输入验证、SQL注入预防、XSS保护
- **路径:** `~/.agents/skills/security-auditor-1.0.0/SKILL.md`
### 20. architecture-designer
- **描述:** 系统架构设计
- **用途:** 设计新系统架构、审查现有设计、架构决策、ADRs、可扩展性规划
- **路径:** `~/.agents/skills/architecture-designer-0.1.0/SKILL.md`
### 21. supabase-postgres-best-practices
- **描述:** Supabase Postgres 最佳实践
- **用途:** Postgres性能优化和最佳实践
- **路径:** `~/.agents/skills/supabase-postgres-best-practices/SKILL.md`
### 22. tmux
- **描述:** Tmux 远程控制
- **用途:** 远程控制tmux会话发送按键和抓取面板输出
- **路径:** `~/.agents/skills/tmux-1.0.0/SKILL.md`
---
## 📝 笔记与知识管理
### 23. obsidian
- **描述:** Obsidian 保险库
- **用途:** 处理Obsidian纯文本Markdown笔记通过obsidian-cli自动化
- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/obsidian/SKILL.md`
### 24. ontology
- **描述:** 知识图谱
- **用途:** 结构化代理记忆和可组合技能,创建/查询实体Person、Project、Task、Event、Document链接相关对象执行约束多步骤动作规划
- **触发词:** "记住"、"关于X我知道什么"、"链接X到Y"、"显示依赖"
- **路径:** `~/.agents/skills/ontology/SKILL.md`
### 25. Memory
- **描述:** 无限有序记忆
- **用途:** 补充代理内置记忆的无限分类存储
- **路径:** `~/.agents/skills/memory-1.0.2/SKILL.md`
### 26. obsidian-ontology-sync
- **描述:** Obsidian与 Ontology 双向同步
- **用途:** 从markdown自动提取实体和关系维护本体图谱提供反馈改进笔记结构
- **路径:** `~/.agents/skills/obsidian-ontology-sync-1.0.1/SKILL.md`
---
## 🎨 内容创作
### 27. blog-writer
- **描述:** 博客文章写作
- **用途:** 以作家独特风格写博客文章、长篇内容从研究到Notion发布的完整工作流
- **路径:** `~/.agents/skills/blog-writer-0.1.0/SKILL.md`
### 28. copywriting
- **描述:** 文案写作
- **用途:** 为落地页、邮件、广告、销售页、营销材料写 persuasive copy标题、CTA、产品描述、广告文案、邮件序列
- **触发词:** "写文案"、"copywriting"、"landing page copy"、"headline"
- **路径:** `~/.agents/skills/copywriting-0.1.0/SKILL.md`
### 29. content-strategy
- **描述:** 内容营销策略
- **用途:** 为solopreneur业务构建和执行内容营销策略
- **触发词:** "内容策略"、"content marketing"、"内容计划"、"内容日历"
- **路径:** `~/.agents/skills/content-strategy-0.1.0/SKILL.md`
### 30. seo-content-writer
- **描述:** SEO内容写作
- **用途:** 写SEO优化内容、创建博客文章、文章
- **触发词:** "写SEO内容"、"创建博客文章"、"内容写作"
- **路径:** `~/.agents/skills/seo-content-writer-2.0.0/SKILL.md`
### 31. social-content
- **描述:** 社交媒体内容
- **用途:** 创建、安排、优化LinkedIn、Twitter/X、Instagram、TikTok、Facebook等内容
- **触发词:** "LinkedIn post"、"Twitter thread"、"社交媒体"、"内容日历"
- **路径:** `~/.agents/skills/social-content-generator-0.1.0/SKILL.md`
### 32. Social Media Scheduler
- **描述:** 社交媒体排程
- **用途:** 计划、起草、跨平台组织社交媒体内容,创建内容日历
- **路径:** `~/.agents/skills/social-media-scheduler-1.0.0/SKILL.md`
### 33. research-paper-writer
- **描述:** 研究论文写作
- **用途:** 创建遵循IEEE/ACM格式标准的正式学术论文
- **路径:** `~/.agents/skills/research-paper-writer-0.1.0/SKILL.md`
### 34. Powerpoint / PPTX
- **描述:** PowerPoint 演示文稿
- **用途:** 创建、检查、编辑Microsoft PowerPoint演示文稿可靠的布局、模板、占位符、笔记、图表
- **路径:** `~/.openclaw/skills/powerpoint-pptx/SKILL.md`
---
## 📊 商业与分析
### 35. Market Research
- **描述:** 市场研究
- **用途:** 规模市场、分析竞争对手、用实际框架和数据源验证机会
- **路径:** `~/.agents/skills/market-research-1.0.0/SKILL.md`
### 36. interview-designer
- **描述:** 面试设计
- **用途:** 分析简历,使用基于证据的方法设计面试策略
- **路径:** `~/.agents/skills/interview-designer-1.0.0/SKILL.md`
### 37. backtest-expert
- **描述:** 回测专家
- **用途:** 系统交易策略回测的专家指导
- **触发词:** 回测、策略验证、鲁棒性测试、避免过度拟合
- **路径:** `~/.agents/skills/backtest-expert-0.1.0/SKILL.md`
### 38. automation-workflows
- **描述:** 自动化工作流
- **用途:** 设计和实施自动化工作流以节省时间和扩展运营
- **触发词:** "自动化"、"automation workflow"、"save time"、"reduce manual work"
- **路径:** `~/.agents/skills/automation-workflows-0.1.0/SKILL.md`
---
## 🧠 AI 代理能力
### 39. proactive-agent-lite
- **描述:** 主动代理Lite
- **用途:** 将AI代理从任务追随者转变为积极主动的伙伴具有记忆架构、reverse prompting和自愈模式
- **路径:** `~/.openclaw/skills/proactive-agent-lite/SKILL.md`
### 40. self-improvement
- **描述:** 自我改进
- **用途:** 捕获学习、错误、纠正以实现持续改进
- **触发词:** 命令/操作失败、用户纠正、请求不存在的功能、外部API失败、知识过时
- **路径:** `~/.openclaw/skills/self-improving-agent/SKILL.md`
### 41. self-reflection
- **描述:** 自我反思
- **用途:** 定期自我反思,分析近期会话,写简洁可行的见解
- **路径:** `~/.agents/skills/agent-self-reflection-1.0.0/SKILL.md`
### 42. brainstorming
- **描述:** 头脑风暴
- **用途:** 在任何创造性工作之前必须使用 - 创建功能、构建组件、添加功能或修改行为
- **路径:** `~/.agents/skills/brainstorming-0.1.0/SKILL.md`
### 43. writing-plans
- **描述:** 写作计划
- **用途:** 有规范/需求的多步骤任务规范
- **路径:** `~/.agents/skills/writing-plans-0.1.0/SKILL.md`
### 44. executing-plans
- **描述:** 执行计划
- **用途:** 在单独会话中执行包含审查检查点的书面实施计划
- **路径:** `~/.agents/skills/executing-plans-0.1.0/SKILL.md`
### 45. task-summary
- **描述:** 任务总结
- **用途:** 任务完成后生成结构化总结,记录目标、步骤、结果、经验教训
- **路径:** `~/.openclaw/skills/task-summary/SKILL.md`
---
## 🔧 工具与系统
### 46. clawhub
- **描述:** ClawHub CLI
- **用途:** 从clawhub.com搜索、安装、更新、发布代理技能
- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/clawhub/SKILL.md`
### 47. find-skills
- **描述:** 发现技能
- **用途:** 当用户询问"如何做X"、"找X的技能"、"有能...的技能吗"时帮助用户发现和安装技能
- **路径:** `~/.agents/skills/find-skills/SKILL.md`
### 48. skill-creator
- **描述:** 技能创建器
- **用途:** 创建有效技能的指南
- **路径:** `~/.agents/skills/skill-creator-0.1.0/SKILL.md`
### 49. skill-vetter
- **描述:** 技能审核
- **用途:** AI代理的安全优先技能审核安装来自ClawHub、GitHub或其他来源的技能之前检查
- **路径:** `~/.agents/skills/skill-vetter-1.0.0/SKILL.md`
### 50. clawdefender
- **描述:** 安全防御
- **用途:** AI代理的安全扫描器和输入清理器检测prompt注入、命令注入、SSRF、凭证外泄、路径遍历攻击
- **路径:** `~/.agents/skills/clawdefender-1/SKILL.md`
### 51. opencode-controller
- **描述:** Opencode 控制器
- **用途:** 通过斜杠命令控制Opencode管理会话、选择模型、切换代理
- **路径:** `~/.agents/skills/opencode-controller-1.0.0/SKILL.md`
---
## 🌤️ 生活与娱乐
### 52. weather
- **描述:** 天气
- **用途:** 通过wttr.in或Open-Meteo获取当前天气和预报
- **触发词:** 天气、温度、预报
- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/weather/SKILL.md`
### 53. video-frames
- **描述:** 视频帧提取
- **用途:** 使用ffmpeg从视频提取帧或短片段
- **路径:** `~/.agents/skills/video-frames-1.0.0/SKILL.md`
### 54. FFmpeg Video Editor
- **描述:** FFmpeg 视频编辑器
- **用途:** 从自然语言视频编辑请求生成FFmpeg命令 - 剪切、裁剪、转换、压缩、改变宽高比、提取音频等
- **路径:** `~/.agents/skills/ffmpeg-video-editor-1.0.0/SKILL.md`
### 55. UI/UX Pro Max
- **描述:** UI/UX 设计
- **用途:** UI/UX设计智能和实现指导构建精美界面
- **路径:** `~/.agents/skills/ui-ux-pro-max-0.1.0/SKILL.md`
---
## 🛡️ 系统与运维
### 56. healthcheck
- **描述:** 主机安全检查
- **用途:** 主机安全加固和风险容忍配置
- **触发词:** 安全审计、防火墙/SSH/更新加固、风险态势、暴露审查、OpenClaw cron调度
- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/healthcheck/SKILL.md`
### 57. node-connect
- **描述:** OpenClaw 节点连接
- **用途:** 诊断Android、iOS、macOS companion app的配对失败
- **触发词:** QR/设置码手动连接失败、本地Wi-Fi正常但VPS/tailnet不正常、配对要求、未经授权、bootstrap token无效/过期
- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/node-connect/SKILL.md`
---
## 📊 技能分类汇总
| 分类 | 数量 | 技能 |
|------|------|------|
| Apple 生态 | 3 | apple-notes, apple-reminders, accli |
| 云服务/协作 | 7 | gog, feishu-*(6个) |
| 通讯工具 | 1 | slack |
| 网络/浏览器 | 2 | agent-browser, tavily-search |
| 开发工具 | 8 | Docker, Code, git-essentials, frontend-design, security-auditor, architecture-designer, supabase-postgres-best-practices, tmux |
| 笔记/知识管理 | 5 | obsidian, ontology, Memory, obsidian-ontology-sync, task-summary |
| 内容创作 | 8 | blog-writer, copywriting, content-strategy, seo-content-writer, social-content, Social Media Scheduler, research-paper-writer, Powerpoint/PPTX |
| 商业/分析 | 4 | Market Research, interview-designer, backtest-expert, automation-workflows |
| AI代理能力 | 7 | proactive-agent-lite, self-improvement, self-reflection, brainstorming, writing-plans, executing-plans, task-summary |
| 工具/系统 | 6 | clawhub, find-skills, skill-creator, skill-vetter, clawdefender, opencode-controller |
| 生活/娱乐 | 4 | weather, video-frames, FFmpeg Video Editor, UI/UX Pro Max |
| 系统/运维 | 2 | healthcheck, node-connect |
**总计: 57 个技能**
---
*笔记创建于 2026-03-19 by 星辉*

View File

@@ -0,0 +1,87 @@
# 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 免密登录配置: [[macmini-nas-ssh-config]]
- Ubuntu2 SSH 配置: [[openclaw/knowledgebase/ubuntu2-ssh-config]]

View File

View File

@@ -0,0 +1,122 @@
# Mac Mini 配置 SSH 免密登录到 NAS
## 概述
本文档记录 Mac Mini (192.168.3.189) 配置 SSH 免密登录到 NAS (192.168.3.17) 的详细步骤。
## 前提条件
- Mac Mini 已安装 SSH 客户端(内置)
- NAS 已开启 SSH 服务
- 拥有 NAS 用户名和密码
## SSH 密钥配置
### 1. 生成 SSH 密钥(如不存在)
```bash
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
```
### 2. 传输公钥到 NAS
```bash
# 方法1使用 sshpass需要安装
sshpass -p 'NAS密码' ssh -o StrictHostKeyChecking=no shenwei@192.168.3.17 'cat >> ~/.ssh/authorized_keys'
# 方法2手动复制
# 1. 查看公钥
cat ~/.ssh/id_ed25519.pub
# 2. 登录 NAS
ssh shenwei@192.168.3.17
# 3. 追加公钥到 authorized_keys
echo '公钥内容' >> ~/.ssh/authorized_keys
```
## ~/.ssh/config 配置
### 完整配置示例
```bash
# NAS
Host nas
HostName 192.168.3.17
User shenwei
IdentityFile ~/.ssh/id_ed25519
ProxyCommand none
# Ubuntu1
Host ubuntu1
HostName 192.168.3.47
User shenwei
IdentityFile ~/.ssh/id_ed25519
ProxyCommand none
# Ubuntu2
Host ubuntu2
HostName 192.168.3.45
User shenwei
IdentityFile ~/.ssh/id_ed25519
ProxyCommand none
# Mac Mini (本地)
Host macmini
HostName 192.168.3.189
User weishen
IdentityFile ~/.ssh/id_ed25519
ProxyCommand none
# VPS1
Host vps1
HostName 192.227.222.142
User root
IdentityFile ~/.ssh/id_ed25519
ProxyCommand none
# VPS2
Host vps2
HostName 104.194.92.188
User root
IdentityFile ~/.ssh/id_ed25519
ProxyCommand none
```
## 测试免密登录
```bash
# 测试 NAS 连接
ssh nas "echo success"
# 测试所有服务器
for server in macmini ubuntu1 ubuntu2 nas; do
ssh $server "echo $server OK"
done
```
## 已配置的服务器
| 主机 | IP | 用户 | 状态 |
|------|-----|------|------|
| nas | 192.168.3.17 | shenwei | ✅ 已配置 |
| ubuntu1 | 192.168.3.47 | shenwei | ✅ 已配置 |
| ubuntu2 | 192.168.3.45 | shenwei | ✅ 已配置 |
| macmini | 192.168.3.189 | weishen | ✅ 已配置 |
| vps1 | 192.227.222.142 | root | ✅ 已配置 |
| vps2 | 104.194.92.188 | root | ✅ 已配置 |
## 故障排查
### 问题Could not resolve hostname nas
**解决**:确保 ~/.ssh/config 中已添加 nas 别名配置
### 问题Permission denied
**解决**
1. 检查公钥是否已添加到目标服务器的 ~/.ssh/authorized_keys
2. 检查 ~/.ssh 目录权限应为 700
3. 检查 ~/.ssh/authorized_keys 权限应为 600
## 相关文档
- Ubuntu2 SSH 配置: [[openclaw/knowledgebase/ubuntu2-ssh-config]]

View File

@@ -0,0 +1,445 @@
# 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
# 重启 FRPCMac 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 认证密码明文传输,建议仅在内网使用
- 外网访问建议配合 HTTPSCaddy 自动提供 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*

View File

@@ -0,0 +1,35 @@
# Ubuntu2 SSH 配置
## 背景
Ubuntu2 需要能够通过 "ssh nas" 免密登录到 NAS。
## 步骤
### 1. 生成 SSH 密钥(如不存在)
```bash
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
```
### 2. 配置 ~/.ssh/config
```bash
Host nas
HostName 192.168.3.17
User shenwei
IdentityFile ~/.ssh/id_ed25519
```
### 3. 传输公钥到 NAS
```bash
# 方法1使用 sshpass需要安装
sshpass -p '密码' ssh -o StrictHostKeyChecking=no shenwei@192.168.3.17 'cat >> ~/.ssh/authorized_keys'
# 方法2手动复制公钥内容
cat ~/.ssh/id_ed25519.pub
# 然后登录 NAS 追加到 ~/.ssh/authorized_keys
```
### 4. 测试
```bash
ssh nas "echo success"
```