---
name: tailscale-share
description: "Manage Tailscale Funnel (public internet) and Serve (tailnet-only) rules on this machine. Use when user wants to expose a local port to the internet, share a service over Tailscale, check what's published, or remove a public URL."
metadata: { "openclaw": { "emoji": "🌐" } }
---

# Tailscale Share Skill

把 web 页面发布到公网，让外部用户访问。

---

## 本机架构

这台机器已有一个共享文件服务器（`share_server.py`）常驻运行，通过 Tailscale Funnel 对外暴露：

- **公网入口**：`https://russellmac-mini.tail998716.ts.net/`（443 端口）
- **根目录**：`/Users/Shared/openclaw-share/`
- **tailnet 入口**：`http://russellmac-mini.tail998716.ts.net:18080/`（内网访问）

任何放到 `/Users/Shared/openclaw-share/` 下的文件，都可以直接通过公网 URL 访问。

---

## 发布 web 页面（核心场景）

### 步骤

```bash
# 1. 创建自己的目录（用你的名字，避免冲突）
mkdir -p /Users/Shared/openclaw-share/xunan/my-project

# 2. 把做好的 HTML/CSS/JS 文件复制进去
cp -r /path/to/your/web/dist/ /Users/Shared/openclaw-share/xunan/my-project/
# 或者直接写文件
cp index.html /Users/Shared/openclaw-share/xunan/my-project/

# 3. 公网访问地址
# https://russellmac-mini.tail998716.ts.net/xunan/my-project/
```

### 目录规范

| 用户 | 目录 | 公网地址 |
|------|------|---------|
| xunan | `/Users/Shared/openclaw-share/xunan/` | `https://russellmac-mini.tail998716.ts.net/xunan/` |
| russell | `/Users/Shared/openclaw-share/russell/` | `https://russellmac-mini.tail998716.ts.net/russell/` |

---

## 常见操作

### 发布单个 HTML 文件

```bash
cp mypage.html /Users/Shared/openclaw-share/xunan/mypage.html
# 访问：https://russellmac-mini.tail998716.ts.net/xunan/mypage.html
```

### 发布整个 web 项目

```bash
# 假设项目 build 产物在 ./dist/
cp -r ./dist/ /Users/Shared/openclaw-share/xunan/my-app/
# 访问：https://russellmac-mini.tail998716.ts.net/xunan/my-app/
```

### 查看已发布的内容

```bash
ls /Users/Shared/openclaw-share/xunan/
```

### 更新已发布的文件

直接覆盖写入即可，服务器设置了 `Cache-Control: no-store`，刷新浏览器立即生效：

```bash
cp -r ./dist/ /Users/Shared/openclaw-share/xunan/my-app/
```

### 删除已发布的内容

```bash
rm -rf /Users/Shared/openclaw-share/xunan/my-project/
```

---

## 查看服务器状态

```bash
# 确认 share_server 在跑
ps aux | grep share_server | grep -v grep

# 确认端口监听正常
lsof -i :18180 | grep LISTEN

# 查看 tailscale funnel 状态
tailscale serve status
```

---

## 注意事项

- `/Users/Shared/openclaw-share/` 是共享目录，**用自己名字的子目录**，不要直接往根目录写
- 服务器对所有路径开放 CORS（`Access-Control-Allow-Origin: *`），前端跨域请求没问题
- 服务器不做鉴权，放上去的文件**任何人都能访问**，不要放敏感内容
- 只支持静态文件（HTML/CSS/JS/图片等），不支持后端逻辑
- 如果需要后端 API，需另外起服务并配置 tailscale serve（找 Russell 操作）
