OpenClaw Docker部署怎么配置HTTPS?
为OpenClaw Docker部署配置HTTPS,说白了就是给容器加一把SSL/TLS的锁,让Web界面和API请求全程走加密通道。这样一来,凭证、日志、敏感操作数据就不会在网络里裸奔了。下面直接上干货,从自签名证书到正式证书,一步步来。

生成自签名证书(开发/测试环境)
先在宿主机项目根目录下创建一个ssl子目录,用来放证书文件:
mkdir -p ./ssl
然后执行OpenSSL命令,生成私钥和证书。注意,这一步必须在宿主机上执行,而且证书路径必须跟后续Docker卷挂载的路径严格一致,否则容器里找不到文件会报错。
openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout ./ssl/openclaw.key
-out ./ssl/openclaw.crt
-subj "/C=CN/ST=Beijing/L=Beijing/O=OpenClaw/CN=localhost"
如果计划用通配符域名(比如CN=*.example.com),记得确保DNS解析指向当前服务器IP,否则浏览器会毫不留情地甩个“NET::ERR_CERT_COMMON_NAME_INVALID”错误。
修改OpenClaw配置文件启用HTTPS
找到config.yaml或app.conf(具体文件名看OpenClaw版本),定位到server模块:
- 把
http_port: 8080改成https_port: 443 - 添加证书路径字段:
ssl_key_path: /app/ssl/openclaw.key和ssl_cert_path: /app/ssl/openclaw.crt
这里有个容易踩的坑:路径中的/app/ssl/是容器内部的路径,必须跟下一步-v挂载的目标路径保持一致。千万别写成./ssl/或者宿主机上的绝对路径,否则容器根本找不到证书。
启动容器并映射443端口
有两种方式,选一个就行。
方法一:直接使用docker run
docker run -d
--name openclaw-https
-p 80:80
-p 443:443
-v $(pwd)/ssl:/app/ssl:ro
-v $(pwd)/config.yaml:/app/config.yaml:ro
openclaw/web:v2.4.1
方法二:使用docker-compose.yml(多服务协同场景更推荐)
在docker-compose.yml中定义服务时,ports必须包含"443:443",volumes段要加上证书挂载项:
volumes:
- ./ssl:/app/ssl:ro
- ./config.yaml:/app/config.yaml:ro
启动后,访问https://your-server-ip,浏览器地址栏应该会显示小锁图标。如果还是跳转到HTTP或者提示不安全,先检查宿主机防火墙是否放行了443端口:sudo ufw allow 443(Ubuntu)或 sudo firewall-cmd --add-port=443/tcp --permanent(CentOS)。
替换为Let’s Encrypt正式证书(生产环境)
测试环境搞定了,生产环境当然要用正规证书。Let’s Encrypt免费、自动续期,是最省心的选择。
第一步:在宿主机安装certbot。以Ubuntu为例:
curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER
sudo apt install certbot python3-certbot-nginx -y
第二步:申请证书。前提是域名A记录已经指向当前服务器IP。
sudo certbot certonly --standalone -d claw.example.com
第三步:把签发的证书复制到OpenClaw预期的路径。
sudo cp /etc/letsencrypt/live/claw.example.com/privkey.pem ./ssl/openclaw.key
sudo cp /etc/letsencrypt/live/claw.example.com/fullchain.pem ./ssl/openclaw.crt
第四步:重启容器,让新证书生效。
docker restart openclaw-https
至此,HTTPS配置完成。浏览器里再也不会出现“不安全”的警告,生产环境可以放心用了。