3.7 KiB
3.7 KiB
XHS Cloud 稳定版(Docker,自建服务器)
适用:自建服务器固定 IP、一个采集账号;每周拉取 500~600 个发布账号的笔记/数据;需要 Web 界面 + 实时日志 + 一键触发登录(noVNC)。
端口约定(可改)
- Web:28000(容器 8000)
- noVNC:26080(容器 6080)
你们只开放 10000-50000 端口的话,把这两个端口改到范围内即可。
一、首次部署(非 1Panel)
cd /opt
sudo mkdir -p xhs_cloud && sudo chown -R $USER:$USER xhs_cloud
# 上传并解压本 zip 到 /opt/xhs_cloud
cd /opt/xhs_cloud
1)构建镜像(首次)
如遇到 Docker Hub 网络超时,先保证 build 已完成;运行 compose 时加
--pull never避免再拉取。
sudo docker build --provenance=false --no-cache -t xhs-cloud-web:stable -f Dockerfile .
sudo docker build --provenance=false --no-cache -t xhs-cloud-novnc:stable -f Dockerfile.novnc .
2)启动
sudo docker compose up -d --pull never
sudo docker ps
3)访问
- Web 控制台:
http://<服务器IP>:28000 - noVNC:
http://<服务器IP>:26080/vnc_auto.html
二、登录(Web 一键触发)
- 打开 Web 控制台 → 点击【启动登录】
- Web 会提示打开 noVNC(或自动打开)
- 进入 noVNC 桌面后,会自动弹出 Chromium → 扫码登录小红书
- 登录成功后会写入:
data/storage_state.json,浏览器会自动关闭
登录流程状态文件:
data/.login_status.json
三、采集(正常情况无需 noVNC)
- 直接在 Web 控制台点【开始采集】即可
- 日志通过 WebSocket 推送到页面
四、验证命令(排错时用)
1)确认端口映射
sudo docker port xhs-web
sudo docker port xhs-novnc
sudo ss -lntp | egrep "(:28000|:26080)\b"
2)确认 login watcher 在跑
sudo docker exec -it xhs-novnc bash -lc "ps aux | grep login_watcher | grep -v grep"
3)手工触发一次登录(等价于 Web 按钮)
echo '{"ts":'$(date +%s)'}' | sudo tee ./data/.login_request.json > /dev/null
五、我们踩过的坑(必读)
- Dockerfile 不能以
ENV开头:必须先FROM ...,否则报no build stage/unknown instruction。 - 把命令行记录误写进 Dockerfile:例如
cd /opt/xhs_cloud会导致unknown instruction: cd。 - Docker Hub 拉取超时:
docker compose up会尝试 pull;本地已 build 时用--pull never。 - Playwright 缺失:web/novnc 镜像要基于
mcr.microsoft.com/playwright/python:*或在镜像内pip install playwright+playwright install。 - headed 浏览器需要 XServer:在容器里
headless=False必须配Xvfb;noVNC 方案需要DISPLAY=:99。 xvfb-run -a的 display 不是 :99:会导致你在 noVNC 里看不到浏览器;正确做法是直接export DISPLAY=:99。- noVNC 访问根路径只会看到目录列表:要访问
/vnc.html或/vnc_auto.html。 - watcher 放在
tail -f /dev/null后面永远不会执行:必须在 tail 之前启动。 - 镜像更新但容器没更新:
docker build后要docker compose up -d --force-recreate <service>,否则容器还在用旧 sha。 - 端口混淆导致 curl 000:容器监听 8000,但宿主机映射可能是 28000;curl 要打宿主机端口。
- 静态文件路径不对:页面实际在
/app/app/static/index.html,不是/app/static。
六、升级/更新
- 更新代码后:
sudo docker build --provenance=false --no-cache -t xhs-cloud-web:stable -f Dockerfile .
sudo docker build --provenance=false --no-cache -t xhs-cloud-novnc:stable -f Dockerfile.novnc .
sudo docker compose up -d --pull never --force-recreate xhs-web xhs-novnc