5.5 KiB
5.5 KiB
created, type, tags, source
| created | type | tags | source | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-03-22 | resource |
|
xiaohongshu-mcp 项目部署实践 |
Xiaohongshu MCP - K8s 基础设施
概述
小红书 MCP (Model Context Protocol) 服务器的 Kubernetes 部署。通过 go-rod 浏览器自动化让 AI 助手直接操作小红书平台(发帖、搜索、评论、点赞等)。
- 上游仓库: xpzouying/xiaohongshu-mcp
- Gitea 仓库:
ssh://git@git.colacoder.com:2200/kai/xiaohongshu-mcp.git - 本地路径:
C:\Users\yaoji\git\OpenSource\xiaohongshu-mcp
架构
AI 助手 → MCP 协议 → Go 服务 (Gin + go-rod) → 无头 Chrome → 小红书网页版
核心技术栈:
- Go 1.24 + Gin HTTP 框架
- go-rod (Chrome DevTools Protocol) 浏览器自动化
- go-rod/stealth 反检测插件
- MCP Go SDK v0.7.0
部署方案
镜像选择
由于集群节点内存有限(每节点 ~2GB),无法在集群内用 Kaniko 构建镜像(Go 编译 + Chrome 安装会 OOM,Exit Code 137)。直接使用 Docker Hub 预构建镜像:
xpzouying/xiaohongshu-mcp:latest
K8s Manifests (k8s/base/)
| 文件 | 作用 |
|---|---|
namespace.yaml |
xiaohongshu-mcp 命名空间 |
pvc.yaml |
持久卷: cookies 数据 (1Gi) + 图片存储 (5Gi) |
deployment.yaml |
Deployment + Chrome 共享内存 + 健康检查 |
service.yaml |
ClusterIP Service (18060) |
ingress.yaml |
Ingress: xiaohongshu-mcp.k8s.home |
drone-rbac.yaml |
Drone CI RBAC 权限 |
kustomization.yaml |
Kustomize 资源索引 |
Deployment 关键配置
image: xpzouying/xiaohongshu-mcp:latest
ports: [18060]
env:
ROD_BROWSER_BIN: /usr/bin/google-chrome
COOKIES_PATH: /app/data/cookies.json
TZ: Asia/Shanghai
resources:
requests: { cpu: 200m, memory: 512Mi }
limits: { cpu: "1", memory: 2Gi }
volumes:
- /app/data → PVC xiaohongshu-mcp-data (1Gi, cookies 持久化)
- /app/images → PVC xiaohongshu-mcp-images (5Gi, 图片上传)
- /dev/shm → emptyDir Memory (256Mi, Chrome 共享内存)
Chrome 无头浏览器需要 /dev/shm 共享内存,否则会崩溃。通过 emptyDir: { medium: Memory } 挂载。
Ingress
host: xiaohongshu-mcp.k8s.home
annotations:
proxy-body-size: "50m" # 支持图片/视频上传
proxy-read-timeout: "300" # 浏览器操作耗时长
proxy-send-timeout: "300"
DNS 通过路由器通配符 *.k8s.home → 192.168.68.240 (MetalLB) 自动解析,无需额外配置。
健康检查
GET /health → {"success":true,"data":{"status":"healthy"},"message":"服务正常"}
livenessProbe: initialDelay=30s, period=30s
readinessProbe: initialDelay=10s, period=10s
Git Remote 配置
origin → ssh://git@git.colacoder.com:2200/kai/xiaohongshu-mcp.git (Gitea, 主仓库)
upstream → (已移除,需要时手动添加 GitHub 上游)
CI/CD
Drone CI (.drone.yml)
由于不在集群内构建镜像,Drone 只负责触发 rollout restart:
kind: pipeline
type: kubernetes
name: deploy
trigger:
branch: [main]
event: [push, custom]
steps:
- name: restart-deployment
image: bitnami/kubectl:latest
commands:
- kubectl rollout restart deploy/xiaohongshu-mcp -n xiaohongshu-mcp
ArgoCD (k8s/argocd-app.yaml)
source:
repoURL: https://git.colacoder.com/kai/xiaohongshu-mcp.git
targetRevision: main
path: k8s/base
syncPolicy:
automated: { prune: true, selfHeal: true }
syncOptions: [CreateNamespace=true]
部署流程
git push origin main
↓
Gitea webhook → Drone CI
↓
kubectl rollout restart (拉取最新镜像)
↓
ArgoCD 自动同步 k8s/base/ 配置变更
镜像更新依赖 Docker Hub 上游作者发布新版本,本地只做配置变更和重启。
初始部署步骤
# 1. 添加 Gitea remote
git remote add origin ssh://git@git.colacoder.com:2200/kai/xiaohongshu-mcp.git
# 2. 首次手动部署(Drone SA 无权创建命名空间)
kubectl apply -k k8s/base/
# 3. 验证
curl -sk https://xiaohongshu-mcp.k8s.home/health
# 4. 推送代码到 Gitea(后续由 Drone + ArgoCD 自动化)
git push -u origin main
# 5. 在 Drone UI 中 Sync 仓库列表并 Activate
踩坑记录
- Kaniko OOM (Exit Code 137): 节点仅 2GB 内存,Go 编译 + Chrome 安装超出限制。解决: 直接用 Docker Hub 预构建镜像。
- Drone RBAC 权限不足: Drone SA 只有
invest-api命名空间的权限,新命名空间需手动kubectl apply创建资源后,Drone 才能操作。 - SSH Agent 问题: Git 内置 SSH 客户端无法连接 1Password SSH Agent,需通过终端手动 push 或配置
core.sshCommand指向 Windows OpenSSH。 - Chrome /dev/shm: 容器内 Chrome 默认
/dev/shm仅 64MB,不够用会崩溃。必须挂载emptyDir: { medium: Memory }。
MCP 功能
| 功能 | 说明 |
|---|---|
| 登录 | QR 码扫码 + Cookie 持久化 |
| 发图文 | 多图上传、定时发布、话题标签 |
| 发视频 | 本地视频上传 |
| 搜索 | 关键词 + 多维筛选 |
| 互动 | 点赞/收藏/评论/回复 |
| 用户 | 获取个人资料和推荐 Feed |
访问地址
| 服务 | URL |
|---|---|
| MCP 服务 | https://xiaohongshu-mcp.k8s.home |
| 健康检查 | https://xiaohongshu-mcp.k8s.home/health |
| MCP 端点 | https://xiaohongshu-mcp.k8s.home/mcp |
| API | https://xiaohongshu-mcp.k8s.home/api/v1/ |