--- created: "2026-03-22" type: resource tags: [resource, kubernetes, infrastructure, devops, drone-ci, argocd, mcp, homelab] source: "xiaohongshu-mcp 项目部署实践" --- # Xiaohongshu MCP - K8s 基础设施 ## 概述 小红书 MCP (Model Context Protocol) 服务器的 Kubernetes 部署。通过 go-rod 浏览器自动化让 AI 助手直接操作小红书平台(发帖、搜索、评论、点赞等)。 - 上游仓库: [xpzouying/xiaohongshu-mcp](https://github.com/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 关键配置 ```yaml 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 ```yaml 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: ```yaml 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) ```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 上游作者发布新版本,本地只做配置变更和重启。 ## 初始部署步骤 ```bash # 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/` | ## Related - [[OpenBB Invest API - K8s Infrastructure]] - [[HomeLab Infrastructure]]