阅读视图

发现新文章,点击刷新页面。
🔲 ⭐

容器部署 ClickHouse

1. ClickHouse 单节点 配置环境变量 1 2 3 4 5 6 7 8 export CONTAINER_CLI=nerdctl export IMAGE=clickhouse/clickhouse-server:24 export CLICKHOUSE_INSTANCE_NAME=clickhouse export CH_DATA=/data/ops/clickhouse/$CLICKHOUSE_INSTANCE_NAME mkdir -p $CH_DATA/data $CH_DATA/log export CLICKHOUSE_PORT=9000 export CLICKHOUSE_USER=default export CLICKHOUSE_PASSWORD=xxxxxx 启动服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $CONTAINER_CLI run -d \ --name $CLICKHOUSE_INSTANCE_NAME \ --restart always \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ --cap-add=SYS_NICE \ --cap-add=SYS_RESOURCE \ -v $CH_DATA/data:/var/lib/clickhouse \ -v $CH_DATA/log:/var/log/clickhouse-server \ -e CLICKHOUSE_USER=$CLICKHOUSE_USER \ -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD \ -e CLICKHOUSE_PORT=$CLICKHOUSE_PORT \ $IMAGE 测试连接 1 $CONTAINER_CLI exec -it $CLICKHOUSE_INSTANCE_NAME clickhouse-client --host 127.0.0.1 --port $CLICKHOUSE_PORT 打印交付结
🔲 ⭐

容器化部署 Redis

1. Redis 主从模式 配置环境变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 export CONTAINER_CLI=nerdctl export IMAGE=redis:7 export REDIS_INSTANCE_NAME=redis-instance export REDIS_MASTER_INSTANCE_NAME="${REDIS_INSTANCE_NAME}-master" export REDIS_REPLICA_INSTANCE_NAME="${REDIS_INSTANCE_NAME}-replica" export REDIS_PASSWORD=xxxxxx export REDIS_MASTER_PORT=6379 export REDIS_MASTER_IP=10.0.0.1 export REDIS_REPLICA_PORT=6380 export REDIS_DATA=/data/ops/redis/$REDIS_INSTANCE_NAME mkdir -p $REDIS_DATA/data $REDIS_DATA/log 启动主节点 1 2 3 4 5 6 7 8 9 10 11 $CONTAINER_CLI run -d \ --name $REDIS_MASTER_INSTANCE_NAME \ --restart always \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ -v $REDIS_DATA/data:/data \ -v $REDIS_DATA/log:/var/log/redis \ $IMAGE redis-server --port $REDIS_MASTER_PORT --requirepass $REDIS_PASSWORD 应该可以这样的日志: 1 Ready to accept connections tcp 启动
🔲 ☆

部署 JuiceFS CSI Driver

1. 安装部署 下载部署文件 1 wget https://raw.githubusercontent.com/juicedata/juicefs-csi-driver/master/deploy/k8s.yaml 任意非 master 节点查看 kubelet 的安装目录 1 ps -ef|grep kubelet |grep root-dir 如果有值,则需要执行替换;否则直接安装。 1 sed 's@/var/lib/kubelet@{{KUBELET_DIR}}@g' k8s.yaml 1 kubectl apply -f k8s.yaml 查看 Pod 状态 1 kubectl -n kube-system get pods -l app.kubernetes.io/name=juicefs-csi-driver 2. 创建存储 静态绑定 1 2 3 4 5 6 7 8 9 10 11 12 13 14 apiVersion: v1 metadata: name: juicefs-secret namespace: default labels: juicefs.com/validate-secret: "true" kind: Secret type: Opaque stringData: name: ${JUICEFS_NAME} token: ${JUICEFS_TOKEN} access-key: ${ACCESS_KEY}
🔲 ☆

容器化部署 Hermes Agent

1. 启动容器 设置镜像 1 export IMAGE=nousresearch/hermes-agent:v2026.4.16 设置目录权限 1 2 mkdir -p hermes-agent-home chmod -R 777 hermes-agent-home 设置环境变量 1 2 3 cat <<EOF > hermes-agent-home/.env GATEWAY_ALLOW_ALL_USERS=true EOF 创建网络 1 nerdctl network create hermes-net 启动 hermes-agent 1 2 3 4 5 6 7 8 nerdctl run -d \ --name hermes-agent \ --restart always \ --network hermes-net \ -v $(pwd)/hermes-agent-home:/opt/data \ -v $(pwd)/openclaw-home/.openclaw:/root/.openclaw \ -p 8642:8642 \ $IMAGE gateway run 启动 hermes-agent dashboard 1 2 3 4 5 6 7 8 nerdctl run -d \ --name hermes-dashboard \ --restart always \ --network hermes-net \ -p 9119:9119 \ -v $(pwd)/hermes-agent-home:/opt/data \ -e GATEWAY_HEALTH_URL=http://hermes-net:8642
🔲 ☆

使用 A2A Gateway 打通多 OpenClaw

1. 架构 1 2 3 4 5 6 7 ┌──────────────────────┐ A2A/JSON-RPC ┌──────────────────────┐ │ OpenClaw 服务器 A │ ◄──────────────────────────► │ OpenClaw 服务器 B │ │ │ (Tailscale / 内网) │ │ │ Agent: AGI │ │ Agent: Coco │ │ A2A
🔲 ☆

Loggie 部署与配置

1. 下载 Chart 包 1 git clone https://github.com/loggie-io/installation 2. 安装 loggie 1 cd installation/helm-chart 1 helm install loggie ./ -nloggie --create-namespace 3. 全局配置修改 1 kubectl -n loggie edit cm loggie-config-loggie 将 parseStdout 改为 true,移除标准输出前面的时间戳。 1 2 3 4 5 6 config: loggie: discovery: enabled: true kubernetes: parseStdout: true 4. 业务快速配置 配置环境变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 export NAMESPACE="" export ES_INDEX="" export ES_PORT="" export ES_HOSTS="" export ES_USERNAME="" export ES_PASSWORD="" export POD_LABEL_KEY="" export POD_LABEL_VALUE="" ES_HOSTS_YAML=""
🔲 ☆

OpenClaw 运维 - 让飞轮转起来

1. 生产案例 清理节点 重启节点 删除异常 Pod 巡检集群 2. 两步快速配置 第一步,配置 mcp 将这段配置丢给 OpenClaw,OpenClaw 会帮你配置好。 1 2 3 4 5 6 7 8 { "mcpServers": { "ops-mcp-server": { "baseUrl": "http://ops-mcp-server/mcp", "headers": { "Authorization": "Bearer xxx" } } } } 第二步,安装 skills 告诉 OpenClaw 安装一个 ops-mcp-server 的 skills。 1 clawhub install ops-mcp-server 这样
🔲 ☆

面向 AI Agent 的文件系统 - AGFS

1. AGFS 简介 简介 AGFS 是一个通过 RESTful API 对外提供存储服务的项目。它支持多种存储后端,包括内存、文件、数据库、消息队列等。 由于不需要 POSIX 接口的支持,可以通过远程调用的方式存储数据,这在 AI Agent 中非常有用。 AI Agent 在执行一些工作流时,经常会产生一些中间结果。这些结果
🔲 ☆

OpenViking 使用与 OpenClaw 集成

1. OpenViking 简介 1.1 适用场景 问题 OpenViking 的做法 上下文碎片化 用文件系统范式统一管理:记忆、资源、技能都映射到 viking:// 虚拟目录,像管理文件一样管理上下文 Token 消耗大 L0/L1/L2 分层:L0 摘要约 100 token 做检索,L1 概览约 2k token 做决策,L2 按需加载全文,显著节省成本 检索效果差 目录递归检索:
🔲 ☆

如何远程给OpenClaw发送消息

1. 配置 hooks 在 openclaw.json 中配置 hooks 1 2 3 4 5 6 7 "hooks": { "enabled": true, "token": "xxx", "path": "/openclaw/hooks", "allowRequestSessionKey": true, "allowedAgentIds": ["*"] }, 参考 https://docs.openclaw.ai/automation/webhook 这里的 token 不能与 gateway 的 token 相同。 2. 发送消息 1 2 3 4 5 6 7 8 9 10 11 12 curl --location 'https://xxx.com/openclaw/hooks/agent' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer xxx' \ --data '{ "message": "介绍下自己,将消息发送到 https://xxx.com/api/v1/webhook/send?key=xxx", "agentId": "main", "sessionKey": "hooks-api-002", "wakeMode": "now", "deliver": true, "thinking": "low", "timeoutSeconds": 120 }' 由于以上请求是异步的
🔲 ☆

容器化部署 OpenClaw

1. 启动容器 设置镜像 1 export IMAGE=ghcr.io/openclaw/openclaw:2026.3.2 生成随机 token 1 openssl rand -hex 32 设置网关 token 1 export OPENCLAW_GATEWAY_TOKEN=xxx 这个 token 会用于远程 Web 端,本地 Tui 端的认证。 设置目录权限 1 2 mkdir -p openclaw-home chmod -R 777 openclaw-home 启动容器 1 2 3 4 5 6 7 nerdctl run -d --user root \ --name openclaw \ --restart always \ -p 18789:18789 \ -v $(pwd)/openclaw-home:/root/ \ $IMAGE \ sleep infinity 删除容器 1 nerdctl rm openclaw --force 2. 启动服务 创建配置文件 1 2 3
🔲 ☆

使用 Skills 和 MCP 扩展 OpenClaw

1. 什么是 Skills 1 2 3 openclaw skills list Skills (7/51 ready) OpenClaw 内置有一些 skills,可以通过 openclaw skills list 查看。 在 https://github.com/openclaw/openclaw/tree/main/skills 可以查看到这些 Skills 具体实现。Skills 文件中主要描述的是 Skills 的元数据、什么时候适用、什么时候不适用、怎么配置和使用。 2. 使用 clawhub 安装 Skills ClawHub 是 OpenClaw 的公共 Skills 注册中心, 默认 Skills 安装
🔲 ☆

LVM 日常运维

1. 基本概念 物理卷 PV (Physical Volume) 由一个或者多个物理硬盘组成,也可以是一个 RAID 设备。 卷组 VG (Volume Group) 由一个或者多个 PV 组成。 逻辑卷 LV (Logical Volume) 从 VG 中划分出来的空间,格式化之后,挂载目录使用。 数据安全 LVM 自带 RAID 功能,也可以提前组建 RAID 设备,交给 LVM 管理。 2. 管理物理卷 查看存储设
🔲 ☆

MinIO 基础设施选型与优化

1. 硬件 1.1 CPU 支持 AVX/AVX-512,用于纠删码计算、SIMD 操作 支持 AES-NI,用于加密对象 单机存储总量 推荐的 vCPU 数 最多 1 TB 8 最多 10 TB 16 最多 100 TB 32 最多 1 PB 64 大于 1 PB 128 1.2 内存 尽可能大一点能提高并发,增加 Page Cache 命中率。 磁盘数量 32 GiB 64 GiB 内存 128 GiB 内
🔲 ☆

容器部署中间件

1. ClickHouse 单节点 配置环境变量 1 2 3 4 5 6 7 8 export CONTAINER_CLI=nerdctl export IMAGE=clickhouse/clickhouse-server:24 export CLICKHOUSE_INSTANCE_NAME=clickhouse export CH_DATA=/data/ops/clickhouse/$CLICKHOUSE_INSTANCE_NAME mkdir -p $CH_DATA/data $CH_DATA/log export CLICKHOUSE_PORT=9000 export CLICKHOUSE_USER=default export CLICKHOUSE_PASSWORD=xxxxxx 启动服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $CONTAINER_CLI run -d \ --name $CLICKHOUSE_INSTANCE_NAME \ --restart always \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ --cap-add=SYS_NICE \ --cap-add=SYS_RESOURCE \ -v $CH_DATA/data:/var/lib/clickhouse \ -v $CH_DATA/log:/var/log/clickhouse-server \ -e CLICKHOUSE_USER=$CLICKHOUSE_USER \ -e CLICKHOUSE_PASSWORD=$CLICKHOUSE_PASSWORD \ -e CLICKHOUSE_PORT=$CLICKHOUSE_PORT \ $IMAGE 测试连接 1 $CONTAINER_CLI exec -it $CLICKHOUSE_INSTANCE_NAME clickhouse-client --host 127.0.0.1 --port $CLICKHOUSE_PORT 打印交付结
🔲 ☆

容器化部署多节点 FoundationDB 及运维

1. 生成集群ID 1 cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1 下面以 CLUSTER_ID=fKbIga9RHP79OIx1 为例 2. 第一个节点上 清理旧数据 1 2 3 $CONTAINER_CLI rm -f $FDB_INSTANCE_NAME mv $FDB_DIR $FDB_DIR.$(date +%Y%m%d%H%M%S).bak mkdir -p $FDB_DIR 配置环境变量 1 2 3 4 5 6 7 8 9 export CONTAINER_CLI=nerdctl export IMAGE=foundationdb/foundationdb:7.1.26 export CLUSTER_ID=fKbIga9RHP79OIx1 export FDB_INSTANCE_NAME=fdb_server export FDB_CLUSTER_FIRST_IP=$(hostname -I | awk '{print $1}') export FDB_PORT=4500 export FDB_DIR=/data/ops/fdb/$FDB_INSTANCE_NAME 创建 cluster 文件 1 2 3 mkdir -p $FDB_DIR echo "${FDB_INSTANCE_NAME}:${CLUSTER_ID}@${FDB_CLUSTER_FIRST_IP}:4500" > $FDB_DIR/fdb.cluster cat $FDB_DIR/fdb.cluster 启动服务器节点 1 2 3 4 5 6 7 8
🔲 ⭐

多机多盘 minio 集群不同纠删码配置在 IPoIB 下的性能测试

前面测试的发现瓶颈在网卡,本篇在 IPoIB 下进行补充测试。 1. minio 集群环境 1.1 创建 minio 集群 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 export CONTAINER_CLI=nerdctl export IMAGE=minio/minio:RELEASE.2025-04-22T22-12-26Z export ROOT_USER=minioadmin export ROOT_PASSWORD=minioadmin export MINIO_ERASURE_SET_DRIVE_COUNT=16 export MINIO_STORAGE_CLASS_STANDARD=EC:4 export POOL_0="http://minioib{1...4}/mnt/data{0...3}" $CONTAINER_CLI run -d \ --net host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ --name minio \ -v /mnt/data0:/mnt/data0 \ -v /mnt/data1:/mnt/data1 \ -v /mnt/data2:/mnt/data2 \ -v /mnt/data3:/mnt/data3 \ -e "MINIO_ROOT_USER=$ROOT_USER" \ -e "MINIO_ROOT_PASSWORD=$ROOT_PASSWORD" \ -e "MINIO_ERASURE_SET_DRIVE_COUNT=$MINIO_ERASURE_SET_DRIVE_COUNT" \
🔲 ☆

多机多盘 MinIO 集群在不同纠删码配置下的性能测试

1. 纠删码配置 默认的纠删位配置如下: Erasure Set Size Default Parity (EC:M) 1 EC:0 2-3 EC:1 4-5 EC:2 6 - 7 EC:3 8 - 16 EC:4 Parity 最大值是 ERASURE_SET_SIZE/2,也就是校验位不能超过数据位。 参考 https://docs.min.io/enterprise/aistor-object-store/reference/aistor-server/settings/storage-class/ 2. minio 集群环境 2.1 创建 minio 集群 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
🔲 ☆

MinIO 多节点多盘部署与运维

1. 环境准备 1.1 数据盘准备 查看数据盘 1 lsblk -d -o NAME,SIZE,TYPE | grep nvme 1 2 3 4 nvme0n1 745.2G disk nvme1n1 745.2G disk nvme2n1 745.2G disk nvme3n1 745.2G disk 准备存储目录 1 2 3 for i in {0..3}; do mkdir -p /mnt/data${i} done 格式化数据盘 1 2 3 for i in {0..3}; do mkfs.xfs -f /dev/nvme${i}n1 done 挂载数据盘 1 2 3 for i in {0..3}; do mount /dev/nvme${i}n1 /mnt/data${i} done 清空数据盘 1 2 3 4 for i in {0..3}; do rm -rf /mnt/data${i}/* rm -rf /mnt/data${i}/.minio.sys done 查看挂载情况
❌