公司动态
腾讯云部署OpenClaw:Docker容器化与HTTPS域名配置实战
1. 项目概述为什么选择云端部署OpenClaw最近在折腾AI智能体OpenClaw小龙虾这个项目热度一直很高。它是一个开源的AI智能体框架能让你用自然语言指挥AI去完成一系列复杂的任务比如自动处理邮件、分析数据、甚至管理你的服务器。很多朋友在本地部署时会遇到硬件资源不足、网络环境复杂、维护麻烦等问题尤其是想让它7x24小时稳定运行或者从外部随时访问时本地环境的局限性就凸显出来了。这时候云端部署就成了一个非常自然的选择。把OpenClaw放到云服务器上相当于给它安了一个永不关机的家你随时随地都能通过网页访问它而且云服务器的算力通常比个人电脑更稳定、扩展性也更强。在众多云服务商里腾讯云对国内开发者比较友好网络稳定配套服务如域名、对象存储集成度高文档也相对齐全所以这次我们就以腾讯云为例手把手走一遍从零开始的OpenClaw云端部署。简单来说这篇指南的目标是让你在腾讯云的一台服务器上快速、稳定地搭建起一个属于你自己的OpenClaw服务并能通过域名安全地访问它。无论你是想尝鲜AI智能体还是打算搭建一个长期可用的自动化助手这个方案都值得一试。2. 核心思路与方案选型为什么是Docker 腾讯云轻量服务器在开始敲命令之前我们先理清整个部署的架构和为什么这么选。一个典型的、可外部访问的OpenClaw服务至少需要几个部分运行OpenClaw的应用服务器、一个Web访问入口、以及可选但强烈推荐的域名与HTTPS加密。2.1 技术栈选择Docker化部署是首选OpenClaw的官方和社区提供了多种安装方式比如直接pip install、使用conda环境或者用一键脚本。但对于云端生产环境我强烈推荐使用Docker。为什么是Docker环境隔离与一致性OpenClaw依赖特定的Python版本、系统库和模型文件。Docker容器能把所有依赖打包在一起确保你在任何一台安装了Docker的机器上运行起来的环境都是一模一样的彻底杜绝了“在我机器上好好的”这种问题。部署与更新极其简单部署就是一条docker run命令。更新版本时拉取新镜像重新运行即可旧容器删除后不留任何垃圾文件非常干净。资源控制与安全性你可以方便地限制容器使用的CPU、内存资源并且容器与宿主机系统是隔离的提高了安全性。社区支持好OpenClaw在Docker Hub上有官方及社区维护的镜像通常比手动安装更稳定也集成了最佳实践。所以我们的核心方案就是在腾讯云服务器上安装Docker然后通过Docker运行OpenClaw。2.2 服务器选型腾讯云轻量应用服务器腾讯云提供了多种产品对于OpenClaw这类个人项目或中小型应用轻量应用服务器是最划算、最省心的选择。轻量服务器 vs 云服务器CVM开箱即用轻量服务器默认集成了应用镜像如WordPress或系统镜像并且流量包模式更适合个人每月有固定免费流量额度。对于我们选择一个纯净的Linux系统镜像如Ubuntu 22.04即可。性价比高相同配置下轻量服务器通常比CVM便宜并且包含了负载均衡、防火墙等基础功能管理界面更简洁。足够使用OpenClaw本身对CPU要求不高但运行大语言模型LLM需要内存。建议选择至少2核4GB内存的配置。如果你打算在服务器上直接运行中等规模的模型如7B参数模型4核8GB或更高配置会更流畅。轻量服务器最高提供到8核16GB的配置完全足够。购买与初始化建议在腾讯云控制台选择轻量应用服务器地域选离你或你的目标用户近的如上海、广州。系统镜像选择Ubuntu 22.04 LTS。记得在购买时或购买后在控制台设置好防火墙规则至少放行SSH端口22、我们后续要用到的Web端口如3000和HTTPS端口443。设置一个复杂的root密码或直接使用SSH密钥对登录后者更安全。2.3 网络与访问域名、反向代理与HTTPS直接在服务器上运行OpenClaw并暴露端口虽然能访问但不够安全HTTP明文传输也不够优雅需要带端口号访问。因此我们需要域名购买一个域名腾讯云即可购买将域名解析到你的服务器公网IP。这样你就可以用https://your-domain.com这样的漂亮地址访问而不是http://123.123.123.123:3000。反向代理使用Nginx或Caddy这样的Web服务器作为反向代理。它接收外部对域名的访问请求然后转发给内部运行的OpenClaw容器。这样做的好处是端口管理可以让OpenClaw运行在内部的任意端口如localhost:8080对外只暴露80/443标准端口。负载均衡与缓存为后续扩展留有余地。SSL终端方便集中管理HTTPS证书。HTTPS使用Let‘s Encrypt等机构提供的免费SSL证书为你的域名启用HTTPS加密。这是现代网站的标配能保护通信安全部分浏览器功能如某些Web API也要求HTTPS。我们将使用Caddy作为反向代理服务器因为它能自动申请和续签Let’s Encrypt证书配置极其简单堪称“懒人福音”。最终架构图逻辑层面用户浏览器 --HTTPS(443)-- Caddy运行在服务器80/443端口 --HTTP(内部)-- OpenClaw Docker容器运行在服务器8080端口理清了思路接下来我们就进入实操环节。3. 服务器基础环境准备拿到一台崭新的腾讯云Ubuntu服务器后我们首先需要通过SSH登录并完成基础环境的搭建。3.1 初始登录与系统更新使用你的SSH客户端如Terminal, PuTTY, Xshell用服务器的公网IP、用户名通常是ubuntu或root和密码/密钥登录。ssh ubuntu你的服务器公网IP登录后第一件事是更新系统软件包列表并升级现有软件这是一个好习惯。sudo apt update sudo apt upgrade -y升级完成后建议重启一下以确保所有更新生效sudo reboot。稍等一分钟再重新连接。3.2 安装Docker与Docker Compose我们将使用Docker官方提供的一键安装脚本这是最可靠的方法。安装Docker Enginecurl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh安装完成后将当前用户加入docker用户组这样以后运行docker命令就不需要每次都加sudo了。sudo usermod -aG docker $USER注意执行此命令后你需要完全退出当前的SSH会话并重新登录用户组变更才会生效。你可以输入exit退出然后重新ssh连接。验证Docker安装重新登录后运行以下命令如果能看到客户端和服务端的版本信息说明安装成功。docker --version docker run hello-worldhello-world镜像会下载并运行一个测试容器输出一段欢迎信息后退出。安装Docker ComposeDocker Compose是一个用于定义和运行多容器Docker应用的工具。虽然我们单容器部署OpenClaw不一定需要但用它来管理配置非常方便。我们安装其独立版本v2。# 下载最新稳定版的Docker Compose DOCKER_CONFIG${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose # 赋予执行权限 chmod x $DOCKER_CONFIG/cli-plugins/docker-compose # 验证安装 docker compose version看到版本号输出即表示成功。3.3 安装并配置Caddy反向代理与HTTPS如前所述我们将使用Caddy来处理域名和HTTPS。它的配置比Nginx简单太多。安装CaddyUbuntu有官方的Caddy仓库安装很方便。sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy配置CaddyCaddy的主配置文件是/etc/caddy/Caddyfile。我们先备份原始文件然后编辑它。sudo cp /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak sudo nano /etc/caddy/Caddyfile将文件内容全部删除替换为以下配置请将your-domain.com替换为你自己的域名your-domain.com { reverse_proxy localhost:8080 encode gzip }这个配置的意思是Caddy监听对your-domain.com的访问请求。reverse_proxy localhost:8080将所有请求转发到本机服务器内部的8080端口这正是我们后续要运行OpenClaw的端口。encode gzip启用Gzip压缩加快传输速度。关键点Caddy看到这个配置后会自动为your-domain.com申请Let‘s Encrypt的SSL证书并强制将HTTP请求重定向到HTTPS。这一切都是自动的启动并设置Caddy开机自启sudo systemctl start caddy sudo systemctl enable caddy sudo systemctl status caddy # 检查运行状态应该是active (running)配置域名解析前往你的域名注册商如腾讯云域名控制台为域名添加一条A记录将主机记录通常为或www指向你的腾讯云服务器的公网IP地址。解析生效需要几分钟到几小时不等你可以用ping your-domain.com命令来检查是否已指向你的服务器IP。实操心得在编辑Caddyfile之前务必确保你的服务器防火墙腾讯云轻量控制台叫“防火墙”CVM叫“安全组”已经放行了80HTTP和443HTTPS端口。否则Caddy无法被外界访问证书申请也会失败。如果证书申请失败可以查看Caddy的日志找原因sudo journalctl -u caddy -f。常见原因是域名解析未生效、或者80/443端口被占用或屏蔽。Caddy默认会从Let‘s Encrypt的生产环境申请证书。如果你只是在测试不想触发证书申请频率限制可以在Caddyfile的域名前加上http://前缀如http://your-domain.com这样Caddy就只使用HTTP。但正式使用务必用HTTPS。至此我们的Web网关就准备好了。接下来是主角OpenClaw的部署。4. 部署与配置OpenClaw容器OpenClaw的Docker镜像通常来自Docker Hub。我们可以直接使用docker run命令但为了配置的持久化和可管理性我推荐使用docker-compose.yml文件。4.1 创建项目目录与配置文件在家目录下创建一个专门的项目文件夹并进入。mkdir ~/openclaw-deploy cd ~/openclaw-deploy创建docker-compose.yml文件nano docker-compose.yml将以下内容粘贴进去。这是一个基于社区流行镜像的配置示例你需要根据实际情况调整。version: 3.8 services: openclaw: image: somewheresoftware/openclaw:latest # 示例镜像请替换为实际可用的镜像 container_name: openclaw restart: unless-stopped ports: - 127.0.0.1:8080:3000 # 将容器内3000端口映射到宿主机的8080端口且仅限本机访问 environment: - OPENCLAW_API_KEYyour_super_secret_api_key_here # 设置一个访问API的密钥 - OPENCLAW_MODEL_PROVIDERollama # 指定模型提供商例如使用本地ollama - OPENCLAW_BASE_URLhttp://host.docker.internal:11434 # 如果模型在宿主机这样连接 - OPENCLAW_DEFAULT_MODELllama3.2:latest # 指定默认使用的模型 - NODE_ENVproduction volumes: - ./data:/app/data # 持久化存储数据 - ./logs:/app/logs # 持久化存储日志 networks: - openclaw-net networks: openclaw-net: driver: bridge配置详解与注意事项镜像源 (image)这是最大的一个坑somewheresoftware/openclaw:latest只是一个占位符。OpenClaw的官方镜像可能不在Docker Hub或者社区有更活跃的镜像。你必须去OpenClaw的官方GitHub仓库或文档查找推荐的Docker镜像地址。可能是ghcr.io/openclaw/openclaw:latest或其它。用错镜像会导致无法启动。端口映射 (ports)127.0.0.1:8080:3000是关键。它把容器内的3000端口OpenClaw默认Web端口映射到了宿主机的8080端口并且只绑定在127.0.0.1localhost上。这意味着外部网络无法直接访问8080端口只能通过我们前面配置的Caddy运行在宿主机上来访问增加了安全性。环境变量 (environment)OPENCLAW_API_KEY务必设置一个强密码这是调用OpenClaw API的凭证。OPENCLAW_MODEL_PROVIDER指定OpenClaw从哪里获取AI模型。常见的有ollama连接本地部署的Ollama服务推荐模型管理方便。openai连接OpenAI的API如GPT-4。anthropic连接Claude的API。OPENCLAW_BASE_URL当使用ollama时需要指定Ollama服务的地址。host.docker.internal是一个特殊的DNS名称指向宿主机方便容器内访问宿主机的服务。OPENCLAW_DEFAULT_MODEL指定默认使用的模型名称需要与你的模型提供商中的模型名对应。数据卷 (volumes)将容器内的/app/data和/app/logs目录挂载到宿主机的当前目录下的data和logs文件夹。这样即使容器被删除你的配置、对话历史等数据也不会丢失。网络 (networks)创建一个独立的Docker网络为后续可能添加其他服务如数据库、Redis做好准备。4.2 准备模型服务以Ollama为例OpenClaw是一个框架它本身不包含大语言模型LLM需要连接一个模型服务。在服务器上本地运行Ollama来托管模型是一个经济且可控的方案。在宿主机上安装Ollamacurl -fsSL https://ollama.com/install.sh | sh安装完成后Ollama服务会自动启动。你可以运行ollama serve来启动服务或者用sudo systemctl status ollama检查服务状态。拉取一个模型Ollama安装后需要拉取一个模型文件。我们从一个小模型开始比如Llama 3.2的3B参数版本它对服务器资源要求较低。ollama pull llama3.2:3b这个命令会从Ollama仓库下载模型可能需要一些时间取决于你的服务器带宽和模型大小几个GB。下载完成后你可以运行ollama list查看已安装的模型。测试Ollamaollama run llama3.2:3b在出现的提示符后输入问题如“Hello, how are you?”看模型是否能正常回复。按CtrlD退出对话。重要提示确保Ollama服务正在运行并且监听端口默认11434。OpenClaw容器将通过http://host.docker.internal:11434这个地址来访问它。如果你的Ollama配置了不同的端口或需要API密钥需要在OpenClaw的环境变量中相应调整。4.3 启动OpenClaw服务一切准备就绪现在可以启动OpenClaw容器了。在~/openclaw-deploy目录下运行docker compose up -d-d参数表示在后台运行。Docker会拉取镜像如果本地没有然后创建并启动容器。使用以下命令查看容器状态和日志docker compose ps # 查看状态应为Up docker compose logs -f openclaw # 查看并实时跟踪OpenClaw容器的日志观察日志如果没有报错并且出现类似“Server running on port 3000”或“OpenClaw is ready”的消息说明服务启动成功。4.4 验证与访问现在打开你的浏览器访问https://你的域名.com或者你在Caddyfile里配置的域名。你应该能看到OpenClaw的Web用户界面。第一次访问可能会让你输入API Key这个Key就是你在docker-compose.yml里设置的OPENCLAW_API_KEY的值。输入密钥后你应该就能进入OpenClaw的主界面开始创建智能体Agent、配置技能Skill和进行对话了。至此一个基于腾讯云、通过域名HTTPS访问、并连接了本地Ollama模型的OpenClaw服务就部署完成了。5. 进阶配置与优化基础服务跑起来后我们可以进行一些优化和个性化配置让服务更稳定、更好用。5.1 配置OpenClaw的技能与模型OpenClaw的强大之处在于其“技能”系统。你需要通过Web界面或API来配置。登录Web界面使用你的API Key登录。模型设置在设置中检查“Model Provider”是否已经正确识别为Ollama并且“Default Model”是否是你拉取的模型如llama3.2:3b。如果环境变量传递正确这里应该已经自动填好了。技能配置OpenClaw预置和社区提供了很多技能比如网络搜索、读取文件、执行代码等。你可以在技能商店浏览并启用你需要的技能。启用某些技能可能需要额外的API密钥如Serper的搜索API。创建智能体智能体是执行任务的主体。你可以创建一个新智能体为它选择模型、赋予一系列技能并设定系统提示词System Prompt来定义它的角色和行为准则。5.2 数据持久化与备份我们通过Docker卷将数据挂载到了宿主机的./data目录。你应该定期备份这个目录。# 假设你在家目录备份到当前用户目录下的backup文件夹 cd ~/openclaw-deploy tar -czf ~/backup/openclaw-data-$(date %Y%m%d).tar.gz ./data你可以将这条命令加入服务器的crontab实现自动定期备份。5.3 性能监控与日志管理查看容器资源使用情况docker stats openclaw这可以实时查看容器的CPU、内存占用。管理日志日志存储在./logs目录。如果日志文件过大可以配置日志轮转logrotate或者使用Docker的日志驱动将日志发送到集中式日志服务。服务器监控腾讯云控制台提供了基础的服务器监控CPU、内存、带宽。对于更细致的监控可以考虑安装htop(sudo apt install htop)、nmon等工具或者使用PrometheusGrafana等专业监控方案。5.4 安全加固建议定期更新定期更新Docker镜像、系统包和Ollama模型。docker compose pull # 拉取服务的最新镜像 docker compose up -d --force-recreate # 用新镜像重新创建容器 sudo apt update sudo apt upgrade -y # 更新系统 ollama pull model-name # 更新模型强化API密钥确保OPENCLAW_API_KEY是足够复杂的长字符串并妥善保管。不要在代码或日志中明文暴露。限制访问除了Caddy确保服务器防火墙没有开放其他不必要的端口。可以考虑在Caddy层面配置简单的HTTP Basic认证为Web界面再加一把锁。使用非root用户运行可以考虑在Docker Compose文件中使用user: “1000:1000”这样的配置让容器以非root用户身份运行减少潜在风险。6. 常见问题与故障排查部署过程中难免会遇到问题这里记录一些常见坑点和排查思路。6.1 网络与连接问题问题现象可能原因排查步骤浏览器无法访问域名连接超时1. 域名解析未生效或错误。2. 服务器防火墙未放行80/443端口。3. Caddy服务未运行。1.ping 你的域名看IP是否正确。2. 在腾讯云控制台检查轻量服务器“防火墙”规则。3.sudo systemctl status caddy检查Caddy状态。访问域名显示“502 Bad Gateway”Caddy能收到请求但无法连接到后端的OpenClaw服务localhost:8080。1.curl http://localhost:8080在服务器上测试OpenClaw端口是否通。2.docker compose ps检查OpenClaw容器是否运行。3.docker compose logs openclaw查看OpenClaw容器日志是否有错误。OpenClaw日志显示连接Ollama失败1. Ollama服务未运行。2. 容器内无法解析host.docker.internal。3. 端口或模型名错误。1.sudo systemctl status ollama。2. 在OpenClaw容器内ping host.docker.internal或curl http://host.docker.internal:11434。3. 确认Ollama模型名与OPENCLAW_DEFAULT_MODEL一致。关于host.docker.internal这个主机名在Linux上的Docker中可能需要额外配置。如果无法解析可以改用宿主机的实际内网IP在服务器上运行hostname -I查看。修改docker-compose.yml中的OPENCLAW_BASE_URL为http://宿主机内网IP:11434。6.2 容器与依赖问题问题现象可能原因排查步骤docker compose up时拉取镜像失败1. 镜像名称错误或不存在。2. 网络问题无法访问Docker Hub或GHCR。1. 确认镜像名来自官方文档。2. 尝试docker pull 镜像名看具体错误。3. 配置Docker国内镜像加速器。容器启动后立即退出1. 环境变量配置错误导致应用崩溃。2. 端口冲突。3. 启动命令错误。1.docker compose logs openclaw查看退出前的错误日志。2. netstat -tlnpOpenClaw Web界面提示“Invalid API Key”环境变量OPENCLAW_API_KEY未正确传入或Web界面输入的Key不对。1. 进入容器检查环境变量docker exec openclaw env6.3 性能与资源问题问题现象可能原因排查步骤与建议对话响应非常慢1. 服务器配置尤其是CPU/内存不足。2. 模型太大如70B参数。3. 网络延迟高。1. 使用htop或docker stats查看资源使用率如果内存或Swap频繁打满需要升级配置。2. 换用更小的模型如3B, 7B。3. 考虑使用云厂商的GPU实例来获得质的提升。服务器磁盘空间不足模型文件、Docker镜像、日志文件占用大量空间。1.df -h查看磁盘使用情况。2. 清理无用的Docker镜像和容器docker system prune -a谨慎操作。3. 定期清理或轮转日志文件。6.4 证书与HTTPS问题如果Caddy自动申请证书失败除了检查域名解析和端口还可以手动检查证书申请sudo caddy validate --config /etc/caddy/Caddyfile检查配置语法。查看详细日志sudo journalctl -u caddy -n 50 --no-pager查看最近50条日志。使用临时HTTP测试将Caddyfile暂时改为http://your-domain.com { ... }重启Caddy (sudo systemctl reload caddy)先确保HTTP能通再排查HTTPS问题。可能是Let‘s Encrypt的速率限制可以等一段时间再试。部署完成后一个常见的需求是如何让OpenClaw“记住”上下文。这通常需要在创建智能体时在系统提示词中明确指令或者选择支持长上下文的模型。另一个问题是技能执行失败这需要仔细查看OpenClaw的日志检查技能所需的API密钥是否正确配置以及网络连接是否正常。整个部署过程最花时间的往往是拉取模型镜像和调试网络连接。保持耐心按照日志提示一步步排查大部分问题都能解决。这个基于腾讯云和Docker的部署方案在稳定运行后几乎不需要维护Caddy会自动续签证书Docker Compose也方便管理服务状态你可以把更多精力放在探索OpenClaw智能体的各种玩法上。