企业云平台部署Openclaw的实践

在企业内部有一个研发云平台,可以启动Docker容器,并通过端口映射的服务给用户访问。我想在该平台上参考各大云厂商的做法,让用户可以基于Openclaw来启动自己的容器,提供个人助手的服务。目前Openclaw的版本迭代演进很快,基于最新的3.8版本,测试一下应如何在云平台通过安全的方式来提供Openclaw服务给用户。

由于Openclaw的功能很强大,同时不可避免的有很多安全漏洞,如果不注意安全问题,那么用户自己部署的Openclaw服务很容易受到攻击。结合Openclaw官网中对安全这部分的介绍,我打算在Openclaw容器中配置Nginx服务,通过https的方式来给外部提供连接。

生成云平台IP的自签证书

1. 创建 OpenSSL 配置文件

因为Openclaw不是在本地运行,要通过云平台的IP和端口访问,因此需要开启https。为云平台生成自签证书,首先创建一个openssl.cnf的配置文件

复制代码
[req]
default_bits        = 2048
distinguished_name  = req_distinguished_name
req_extensions      = req_ext
x509_extensions     = v3_req  # 生成自签名证书时使用的扩展
prompt              = no

[req_distinguished_name]
countryName             = CN
stateOrProvinceName     = Beijing
localityName            = Beijing
organizationName        = Example Inc.
organizationalUnitName  = IT
commonName              = 192.168.1.100  # 这里填写云平台IP 或一个描述名称

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.1.100  # 云平台IP
# 如果有多个 IP 可以继续添加 IP.2, IP.3...
# 也可以添加 DNS 名称,例如 DNS.1 = internal.example.com

2. 生成私钥和自签名证书

为云平台生成证书,执行以下命令

复制代码
# 生成私钥
openssl genrsa -out myip.key 2048

# 使用配置文件生成证书(有效期 365 天)
openssl req -x509 -new -nodes \
  -key myip.key \
  -sha256 -days 365 \
  -out myip.crt \
  -config openssl.cnf \
  -extensions v3_req

3. 验证证书是否包含正确 IP

执行以下命令

复制代码
openssl x509 -in myip.crt -text -noout | grep -A 1 "Subject Alternative Name"

生成Nginx配置文件

可以通过Nginx来处理Https协议,在Openclaw容器内监听https端口并转发到对应的服务。创建一个default.conf文件,内容如下:

复制代码
server {
    listen 18999 ssl http2;  # 关键:监听 443 端口并启用 SSL
    server_name 172.18.193.247;

    # SSL 证书配置
    ssl_certificate     /etc/nginx/certs/myip.crt;  # 证书文件路径(容器内)
    ssl_certificate_key /etc/nginx/certs/myip.key;  # 私钥文件路径(容器内)

    # 推荐的安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 根路径配置
    location / {
        #root   /usr/share/nginx/html;  # 或你的静态文件路径
        #index  index.html index.htm;
        # 如果是反向代理到后端服务,使用 proxy_pass
        proxy_pass http://localhost:18789;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 增加超时时间,防止长连接意外断开
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

server {
    listen 3001 ssl http2;  # 关键:监听 443 端口并启用 SSL
    server_name 172.18.193.247;

    # SSL 证书配置
    ssl_certificate     /etc/nginx/certs/myip.crt;  # 证书文件路径(容器内)
    ssl_certificate_key /etc/nginx/certs/myip.key;  # 私钥文件路径(容器内)

    # 推荐的安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 根路径配置
    location / {
        #root   /usr/share/nginx/html;  # 或你的静态文件路径
        #index  index.html index.htm;
        # 如果是反向代理到后端服务,使用 proxy_pass
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 增加超时时间,防止长连接意外断开
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

在这个配置文件里面,监听了两个https端口,其中18999这个端口会转发服务到openclaw的本地服务端口18789,另一个3001端口会转发到OpenClaw-bot-review的服务端口3000。这是一个轻量级 Web 仪表盘,用于一览所有openclaw机器人/Agent/模型/会话的运行状态,其内置像素风动画办公室,让openclaw的 Agent 化身像素角色在办公室里行走、就座、互动,为枯燥的运维增添一份趣味。另外配置文件里面也设置了使用刚才生成的证书和Key。

生成Openclaw配置文件

为了便利用户部署Openclaw,可以把常用的大模型,channel都先配置好。另外还需要设置配置文件openclaw.json中的gateway部分的设置,内容如下:

复制代码
{
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "loopback",
    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789",
        "https://云IP:18999"
      ],
    },
    "auth": {
      "mode": "token",
      "token": "xxxxxxxxxxxxxxxxxxx"
    },
    ...
}

在这个设置中,限定了openclaw只能通过本地localhost来访问。如果是远程访问,只允许在allowedOrigins里面的源才可访问。

构建私有Openclaw镜像

在本地创建一个目录,拷贝default.conf、openclaw.json文件到该目录,另外创建一个名为certs的子目录,把之前生成的证书和Key拷贝到该目录。在该目录下创建一个debian.sources文件,定义要用到的国内源。

复制代码
Types: deb deb-src
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian
Suites: trixie trixie-updates trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb deb-src
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

在目录中运行git clone命令,拉取OpenClaw-bot-review代码

复制代码
git clone https://github.com/xmanrui/OpenClaw-bot-review.git

新建一个Dockerfile文件,内容如下:

复制代码
FROM m.daocloud.io/ghcr.io/openclaw/openclaw:2026.3.8

USER root
#复制Debian国内源设置
COPY debian.sources /etc/apt/sources.list.d/

#安装Nginx
RUN apt-get update && apt-get install nginx nano -y
COPY default.conf /etc/nginx/conf.d/default.conf
COPY certs/ /etc/nginx/certs/

COPY OpenClaw-bot-review/ /app/OpenClaw-bot-review/
RUN chown -R node:node /app/OpenClaw-bot-review

USER node
#设置npm国内源
RUN npm config set registry https://registry.npmmirror.com
WORKDIR /app/OpenClaw-bot-review
RUN npm install

WORKDIR /app

最后运行以下命令构建镜像

复制代码
docker build -t openclaw:local .

服务验证

在本地可以进行验证,例如查询本地docker服务的IP地址是172.18.193.247,在以上的配置中设置该IP,然后拉取openclaw的代码,然后通过docker compose up来运行。

复制代码
git clone https://github.com/openclaw.git
git checkout v2026.3.8
cd openclaw
export OPENCLAW_IMAGE=openclaw:local
docker compose up -d

容器启动之后,可以通过以下命令进入gateway容器,然后启动nginx

复制代码
docker exec -it -u root openclaw-openclaw-gateway-1
nginx

之后在浏览器中输入https://172.18.193.247:18999/?token=XXXXXX接口打开页面,这时会提示说deivce pairing require,以下命令进入容器,然后批准pair即可

复制代码
docker exec -it openclaw-openclaw-gateway-1 bash
openclaw devices list
openclaw devices approve XXXXX(requestid)
相关推荐
小鱼~~15 小时前
GRU模型简介
人工智能·深度学习
互联网推荐官15 小时前
上海APP开发公司的技术路径选择:从架构设计到工程落地
大数据·人工智能·物联网·软件工程
AI袋鼠帝15 小时前
开源Turix,你可以把任何App当Agent Skill用!比如微信..
人工智能
小鱼~~15 小时前
DataLoader简介
人工智能·深度学习
qq_4112624215 小时前
四博AI智能音响方案(基于四博小助手AITOYO2)
人工智能·macos·xcode
AI木马人15 小时前
7.计算机视觉:让AI拥有一双“火眼金睛”
人工智能·计算机视觉
亿电连接器替代品网15 小时前
工业防水连接器选型:Amphenol LTW替代方案详解
大数据·网络·人工智能·硬件工程·材料工程
多年小白15 小时前
谷歌第八代 TPU 来了:性能提升 124%
网络·人工智能·科技·深度学习·ai
带娃的IT创业者15 小时前
Claude Code Routines 深度解析:重新定义 AI 辅助编程的工作流自动化
运维·人工智能·自动化·ai编程·工作流·anthropic·claude code
冬至喵喵15 小时前
本体论在数仓 Data Agent 中的应用
人工智能