企业云平台部署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)
相关推荐
砍材农夫5 分钟前
spring-ai 第三结构化输出
java·人工智能·spring
tHeya06II12 分钟前
.NET AI 核心构建块:重塑智能应用开发的架构范式与生态
人工智能·架构·.net
m0_7372469817 分钟前
B端&企业内部产品AI赋能的机会点识别和落地
人工智能
comedate22 分钟前
【OpenClaw】图像配置指南
人工智能·openclaw·图像修改
王忘杰24 分钟前
0基础CUDA炼丹、增加断点保存,从零开始训练自己的AI大模型 87owo/EasyGPT Python CUDA
开发语言·人工智能·python
枫叶林FYL29 分钟前
第 7 章 感知不确定性估计
人工智能·机器学习
沪漂阿龙32 分钟前
从感知机到GPT:一个1957年的“神经元”如何引爆2026年的AI革命?
人工智能·gpt·机器学习
AI视觉网奇34 分钟前
‘figurecanvasInteragg‘ object has no attribute ‘tostring_rgb‘
人工智能
fof92039 分钟前
Base LLM | 从 NLP 到 LLM 的算法全栈教程 第七天
人工智能·深度学习
缘友一世1 小时前
当LLM Agent遇上真实渗透测试:从失败分类到难度感知规划的系统性突破
人工智能·渗透测试