diff --git a/openclaw/deployment.yaml b/openclaw/deployment.yaml new file mode 100644 index 0000000..79f88f5 --- /dev/null +++ b/openclaw/deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: openclaw +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: openclaw + template: + metadata: + labels: + app: openclaw + spec: + volumes: + - name: data + hostPath: + path: /data/openclaw + - name: tools + hostPath: + path: /data/openclaw/tools + - name: projects + hostPath: + path: /data/code-server/coder + type: DirectoryOrCreate + - name: tmp + emptyDir: {} + containers: + - name: openclaw + # ghcr.io/openclaw/openclaw:2026.5.7-slim + image: openclaw-image + env: + - name: PATH + value: /home/node/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + resources: + limits: + memory: "4Gi" + cpu: "2" + requests: + memory: "128Mi" + cpu: "500m" + command: + - node + - /app/dist/index.js + - gateway + - run + volumeMounts: + - mountPath: /home/node/.openclaw + name: data + - mountPath: /home/node/.openclaw/workspace/Projects + name: projects + - mountPath: /home/node/.local + name: tools + - mountPath: /tmp + name: tmp + livenessProbe: + exec: + command: + - node + - -e + - "require('http').get('http://127.0.0.1:18789/healthz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))" + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 10 + readinessProbe: + exec: + command: + - node + - -e + - "require('http').get('http://127.0.0.1:18789/readyz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))" + initialDelaySeconds: 15 + periodSeconds: 10 + timeoutSeconds: 5 + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: + - ALL \ No newline at end of file diff --git a/openclaw/kustomization.yaml b/openclaw/kustomization.yaml new file mode 100644 index 0000000..8ba9c17 --- /dev/null +++ b/openclaw/kustomization.yaml @@ -0,0 +1,11 @@ +# yaml-language-server: $schema=https://json.schemastore.org/kustomization.json + +kind: Kustomization +namespace: openclaw +resources: +- deployment.yaml +- services.yaml +images: +- name: openclaw-image + newName: cr.wetofu.me/ghcr.io/openclaw/openclaw + newTag: 2026.5.7-slim diff --git a/openclaw/services.yaml b/openclaw/services.yaml new file mode 100644 index 0000000..60374e3 --- /dev/null +++ b/openclaw/services.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: openclaw +spec: + selector: + app: openclaw + ports: + - port: 8080 + targetPort: 18789 diff --git a/xiaohongshu-mcp/cookies.json b/xiaohongshu-mcp/cookies.json new file mode 100644 index 0000000..c5a9f49 --- /dev/null +++ b/xiaohongshu-mcp/cookies.json @@ -0,0 +1,240 @@ +[ + { + "name": "loadts", + "value": "1778460006675", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809996006, + "storeId": null + }, + { + "name": "xsecappid", + "value": "xhs-pc-web", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809996006, + "storeId": null + }, + { + "name": "acw_tc", + "value": "0a00d76417784600042951338e0a8044a3f47a592b92ed6c1cfbd9f926c0ff", + "domain": "www.xiaohongshu.com", + "hostOnly": true, + "path": "/", + "secure": false, + "httpOnly": true, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1778461804.859, + "storeId": null + }, + { + "name": "websectiga", + "value": "cffd9dcea65962b05ab048ac76962acee933d26157113bb223105a116241fa6c", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1778719207, + "storeId": null + }, + { + "name": "x-rednote-datactry", + "value": "CN", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": true, + "httpOnly": true, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957743.891, + "storeId": null + }, + { + "name": "webBuild", + "value": "6.9.1", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": true, + "firstPartyDomain": "", + "partitionKey": null, + "storeId": null + }, + { + "name": "sec_poison_id", + "value": "fca0c925-ed61-494b-9763-29fb27bd66ab", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1778460612, + "storeId": null + }, + { + "name": "web_session", + "value": "040069b01e8e125ba06687c735384b31930288", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": true, + "httpOnly": true, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957743.891, + "storeId": null + }, + { + "name": "gid", + "value": "yjdyJq8yddKdyjdyJq8yylkWSyUqJM7D2kDVCqSVVfT79E48v1hWU78884WjY8y8YWyW2000", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1813020010.592, + "storeId": null + }, + { + "name": "a1", + "value": "19e123011c1p32sub5gbjjjdkutylv7p6oxwug73c40000479801", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957600, + "storeId": null + }, + { + "name": "abRequestId", + "value": "14b9d6ff-6adc-5bf5-aad0-2e2817697bbe", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957596.934, + "storeId": null + }, + { + "name": "ets", + "value": "1778421600674", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1781013600.674, + "storeId": null + }, + { + "name": "id_token", + "value": "VjEAAPk4gK2wvkooDZ9BYhE9sPPzpw/gK3AAQ1C6wyfixKrt2cfVJewgDEXgXG9Xxw69LILQZPn0U0X4k7FR4uL5Q01Jqq7dQtPS2WRZIGi1i3RnSeKM5FxG/ChXt95ypt8/tAdk", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": true, + "httpOnly": true, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957743.891, + "storeId": null + }, + { + "name": "unread", + "value": "{%22ub%22:%2269f86a6d000000002202578f%22%2C%22ue%22:%226a00846f000000003802364f%22%2C%22uc%22:25}", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": true, + "firstPartyDomain": "", + "partitionKey": null, + "storeId": null + }, + { + "name": "webId", + "value": "6e87f8205933bfa03f238baadb820e01", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": false, + "httpOnly": false, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957600, + "storeId": null + }, + { + "name": "x-rednote-holderctry", + "value": "CN", + "domain": ".xiaohongshu.com", + "hostOnly": false, + "path": "/", + "secure": true, + "httpOnly": true, + "sameSite": null, + "session": false, + "firstPartyDomain": "", + "partitionKey": null, + "expirationDate": 1809957743.891, + "storeId": null + } +] \ No newline at end of file diff --git a/xiaohongshu-mcp/deployment.yaml b/xiaohongshu-mcp/deployment.yaml new file mode 100644 index 0000000..0b792e2 --- /dev/null +++ b/xiaohongshu-mcp/deployment.yaml @@ -0,0 +1,76 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: xiaohongshu-mcp + labels: + app: xiaohongshu-mcp +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app: xiaohongshu-mcp + template: + metadata: + labels: + app: xiaohongshu-mcp + spec: + # Docker Compose 中 init: true 的等效设置 + shareProcessNamespace: false + # 国内镜像源(阿里云) + # imagePullSecrets: + # - name: aliyun-regcred + containers: + - name: xhs-mcp + # Docker Hub 镜像 + image: image + # 国内用户可换阿里云镜像(需要先拉取到本地仓库) + # image: crpi-hocnvtkomt7w9v8t.cn-beijing.personal.cr.aliyuncs.com/xpzouying/xiaohongshu-mcp + ports: + - containerPort: 18060 + protocol: TCP + env: + - name: ROD_BROWSER_BIN + value: /usr/bin/google-chrome + - name: COOKIES_PATH + value: /app/data/cookies.json + volumeMounts: + - name: cookies + mountPath: /app/data/cookies.json + subPath: cookies.json + - name: data + mountPath: /app/data + - name: images + mountPath: /app/images + resources: + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "1Gi" + cpu: "500m" + # Chrome 在容器内需要 --no-sandbox 等参数 + # 项目 rod 默认会处理,这里加安全上下文确保 Chrome 能跑 + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: ["SYS_ADMIN"] + seccompProfile: + type: Unconfined + # Chrome 需要一些额外的系统调用权限 + runAsNonRoot: false + lifecycle: + preStop: + exec: + command: ["/bin/sh", "-c", "killall -TERM chrome || true"] + volumes: + - name: cookies + configMap: + name: xhs-cookies + - name: data + hostPath: + type: DirectoryOrCreate + path: /data/xiaohongshu-mcp + - name: images + emptyDir: {} \ No newline at end of file diff --git a/xiaohongshu-mcp/kustomization.yaml b/xiaohongshu-mcp/kustomization.yaml new file mode 100644 index 0000000..97441f7 --- /dev/null +++ b/xiaohongshu-mcp/kustomization.yaml @@ -0,0 +1,15 @@ +# yaml-language-server: $schema=https://json.schemastore.org/kustomization.json + +kind: Kustomization +namespace: openclaw +resources: +- deployment.yaml +- service.yaml +images: +- name: image + newName: cr.wetofu.me/xpzouying/xiaohongshu-mcp + newTag: v1.2.4 +configMapGenerator: +- name: xhs-cookies + files: + - cookies.json \ No newline at end of file diff --git a/xiaohongshu-mcp/service.yaml b/xiaohongshu-mcp/service.yaml new file mode 100644 index 0000000..608850f --- /dev/null +++ b/xiaohongshu-mcp/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: xiaohongshu-mcp +spec: + type: ClusterIP + ports: + - port: 18060 + targetPort: 18060 + protocol: TCP + name: mcp-http + selector: + app: xiaohongshu-mcp \ No newline at end of file