10分钟搞定AI应用部署:宝塔面板+Docker实战OpenClaw
2026/8/9 1:52:37 网站建设 项目流程

1. 项目概述:为什么选择宝塔面板部署OpenClaw?

最近在折腾AI应用本地化部署的朋友,估计没少被各种复杂的命令行、环境依赖和网络配置搞得头大。我自己也是,从最早手动编译到后来用Docker,虽然灵活,但每次想调整个端口、加个SSL证书或者做反向代理,都得去翻Nginx的配置文件,一个符号错了服务就起不来,排查起来特别费时间。直到我开始用宝塔面板来管理这类服务,才发现原来部署可以这么“无脑”——特别是对于像OpenClaw这样功能强大但初始配置略显繁琐的AI工具链。

OpenClaw是什么?简单说,它是一个开源的、模块化的AI智能体(Agent)框架,你可以把它理解为一个“大脑”,它能调用各种工具(比如搜索、计算、文件操作)并结合大语言模型(LLM)的能力来完成复杂的任务。它的潜力很大,但官方文档通常面向开发者,假设你熟悉Python虚拟环境、懂得处理依赖冲突,并且对Web服务部署有经验。这对于想快速尝鲜或者专注于应用而非运维的普通用户来说,门槛不低。

而宝塔面板,恰恰是降低这个门槛的“神器”。它把服务器管理的各种操作——安装软件、配置网站、设置数据库、管理文件、申请SSL证书——都做成了图形化界面。你不需要记住systemctl的命令,也不用去/etc/nginx/sites-available/下面写配置,点几下鼠标就能完成。这次要做的,就是把这两者结合起来:用宝塔面板,在10分钟内,把一个OpenClaw服务端部署起来,并且搞定最让人头疼的HTTPS加密和反向代理配置,让你能通过一个安全的、好看的域名来访问你的AI助手。

这不仅仅是“部署成功”那么简单。很多教程只教到docker-compose up -d就跑路了,但真正要用起来,你需要解决:如何让服务在公网安全访问(必须HTTPS)?如何让宝塔上已有的网站和OpenClaw共存?如何管理服务的生命周期(开机自启、日志查看)?这篇教程就是来解决这些实际问题的。我会把每一步的操作意图、背后的原理,以及我踩过的坑都讲清楚,让你不仅能部署成功,还能理解为什么这么做,以后遇到类似服务(比如其他AI模型的Web UI)也能举一反三。

2. 核心需求与方案选型解析

2.1 核心需求拆解:我们到底要达成什么目标?

部署一个软件,尤其是开源项目,最怕的就是目标模糊。上来就敲命令,很容易陷入“教程里行,我这就报错”的困境。所以,我们先明确这次部署OpenClaw的四个核心需求:

  1. 快速可用的服务:目标是在一台服务器(云服务器或本地NAS/软路由)上,让OpenClaw的后端服务稳定运行起来。它应该能响应API请求,并能与前端界面(如果有)或第三方应用(如飞书、钉钉机器人)正常通信。
  2. 安全的公网访问:如果我们需要从外部网络(比如公司内网其他电脑、甚至互联网)访问这个服务,那么HTTP明文传输是绝对不可接受的。任何API密钥、对话内容在传输中都会被窃听。因此,必须启用HTTPS(SSL/TLS加密)。
  3. 灵活的路径管理:服务器上可能已经运行了其他网站(比如你的个人博客、导航页)。我们不想为OpenClaw单独占用一个端口(比如http://服务器IP:8080),这样既不美观也不安全。更理想的方式是使用一个子路径或子域名,例如https://ai.yourdomain.comhttps://yourdomain.com/openclaw。这就需要反向代理功能。
  4. 便捷的运维管理:服务不能部署完就撒手不管。我们需要能方便地查看日志(排查错误)、重启服务(更新后)、设置开机自启,并且管理相关的环境变量和配置文件。

2.2 方案对比:为什么是“宝塔 + Docker”?

要实现上述需求,有几种常见路径:

  • 纯手动部署(源码 + 虚拟环境):从GitHub克隆代码,创建Python虚拟环境,pip install -r requirements.txt,然后手动启动。优点是控制力最强,对资源占用最小。缺点是环境依赖问题极多(尤其是CUDA、PyTorch版本),隔离性差,且后续配置HTTPS和反向代理需要手动编写Nginx配置,对新手极不友好。
  • 纯Docker部署:使用项目官方或社区维护的Docker镜像。docker run一行命令就能跑起来。优点是环境隔离,几乎无视宿主机环境,部署最干净。缺点是默认情况下,它只解决了“运行”问题。配置HTTPS和反向代理依然需要你手动去操作宿主机的Nginx或Traefik,并且管理多个容器时,端口映射、数据卷挂载等命令会变得冗长。
  • 宝塔面板 + Docker:这正是本教程选择的方案。它融合了二者的优势:
    • Docker负责“运行”:利用Docker的镜像,我们一键获得一个完整、隔离、可复现的OpenClaw运行环境,完美避开了Python环境的地狱。
    • 宝塔面板负责“接入与管理”:通过宝塔的网站管理功能,我们以图形化方式创建网站、一键申请并部署SSL证书(来自Let‘s Encrypt)、配置反向代理规则。所有复杂的Nginx配置都被封装成了简单的表单填写。此外,宝塔的应用商店或计划任务功能,可以辅助我们管理Docker容器的生命周期。

简单来说,Docker帮我们跳过了“构建环境”这个最坑的步骤,宝塔则帮我们跳过了“配置网络和安全”这个最繁琐的步骤。两者结合,才能实现“10分钟搞定”的承诺。你不需要成为Docker专家或Nginx大师,只需要跟着步骤点一点,就能得到一个生产级可用的OpenClaw服务。

2.3 环境准备清单

在开始点击鼠标之前,请确保你的服务器已经满足以下条件。这些是成功的基石,缺一不可。

  1. 一台服务器:可以是云服务器(腾讯云、阿里云等),也可以是本地有公网IP的电脑或NAS。系统推荐Ubuntu 20.04/22.04 LTSCentOS 7.9/8。我本次演示环境是Ubuntu 22.04。
  2. 宝塔面板:已在服务器上安装完毕。建议安装最新的稳定版(如7.9.0)。安装命令通常为(根据官网最新指示):
    # 针对Ubuntu/Debian wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh # 针对CentOS yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    安装完成后,记住你的宝塔面板登录地址、用户名和密码。
  3. 域名一个:你需要有一个已备案(如果服务器在国内)且解析到本服务器IP地址的域名。例如,我们将使用ai.yourdomain.com。这是申请SSL证书的必备条件。
  4. 基础软件:确保宝塔面板内已安装以下软件(通常在安装宝塔时会默认或推荐安装):
    • Nginx 1.20+:作为Web服务器和反向代理。
    • Docker 管理器:在宝塔的“软件商店”中搜索“Docker”并安装。或者,你也可以通过SSH命令行安装Docker,宝塔的插件可以更方便地管理。
  5. 开放端口:确保服务器的安全组(云服务器控制台)和防火墙(宝塔面板的“安全”页面)已放行以下端口:
    • 8888:宝塔面板默认端口(可在面板设置中修改)。
    • 80443:HTTP和HTTPS服务的标准端口。
    • (可选)OpenClaw容器映射的端口:例如我们后面会用到的3000端口,仅在初期测试时需要,配置好反向代理后可以关闭其公网访问。

注意:如果你在本地局域网部署,且不需要从外网访问,域名和SSL证书不是必须的,你可以使用IP地址和HTTP。但为了安全性和最佳实践,我强烈建议即使在内网也配置好域名和自签名证书,流程是类似的。

3. 核心细节解析与实操要点

3.1 理解关键概念:HTTPS与反向代理是如何工作的?

在动手之前,花两分钟理解这两个概念,能让你在配置时心里有底,遇到问题也知道该查哪里。

HTTPS(SSL/TLS):你可以把它想象成给HTTP明文通信套上一个“加密隧道”。当你的浏览器访问https://ai.yourdomain.com时,会发生一次“握手”:服务器向浏览器出示它的“身份证”(SSL证书)。浏览器验证这张身份证是否由可信的“发证机构”(如Let‘s Encrypt)签发,并且身份证上的名字(域名)是否就是ai.yourdomain.com。验证通过后,双方才用只有它们知道的密钥开始加密通信。宝塔面板做的,就是自动帮我们向Let‘s Encrypt这个免费的“发证机构”申请一张合法的“身份证”,并自动配置到Nginx上。

反向代理:这是本教程的核心魔法。通常,我们的OpenClaw Docker容器运行在服务器内部的某个端口(比如3000)。我们不想让用户直接访问http://服务器IP:3000。反向代理就像一个“前台接待”。

  • 用户访问的是https://ai.yourdomain.com(标准HTTPS端口443)。
  • Nginx(反向代理)接收到这个请求,根据我们设定的规则,发现这个域名对应的请求应该转发给内部某个“员工”(容器)。
  • Nginx把请求原样(或稍作修改)转发到http://localhost:3000(容器内部地址)。
  • OpenClaw容器处理完请求,把结果给Nginx,Nginx再返回给用户。

这样做的好处太多了:

  1. 安全:用户不直接接触后端服务,容器可以藏在防火墙后面。
  2. 灵活:可以在同一个80/443端口上,通过不同的域名或路径,代理无数个后端服务。
  3. 便利:SSL证书只需在Nginx(前台)配置一次,所有后端服务都自动获得了HTTPS。

3.2 Docker部署OpenClaw:选对镜像与参数

OpenClaw项目可能提供多个镜像,或者社区有优化版本。我们的首要任务是找到一个稳定、更新及时、文档清晰的镜像。通常,在Docker Hub上搜索openclaw或查看项目官方GitHub仓库的README是最好起点。

假设我们找到一个名为somecoder/openclaw:latest的镜像(请务必替换为实际可用的官方或可靠镜像)。部署时,有几个关键参数和概念必须理解:

  • 端口映射 (-p):-p 宿主机端口:容器内端口。我们将容器的服务端口(假设是3000)映射到宿主机的某个端口(例如3001)。这样,我们就能通过http://服务器IP:3001临时访问服务,以验证容器是否运行正常。注意:在配置好宝塔反向代理后,这个宿主机映射端口应该被防火墙阻止公网访问,只允许本地(127.0.0.1)访问,增加安全性。
  • 数据卷挂载 (-v):-v 宿主机目录:容器内目录。这是持久化数据的关键。OpenClaw的配置、数据库、缓存文件都应该挂载出来。否则,容器一旦删除,所有数据就没了。常见的挂载点包括/app/config,/app/data等,具体需查阅镜像文档。
  • 环境变量 (-e): 这是配置容器行为的主要方式。例如,设置API密钥、模型端点地址、日志级别等。一个典型的启动命令可能包含多个-e参数。

实操心得:不要直接使用latest标签。在Docker Hub的镜像标签页,查看具体的版本号,如somecoder/openclaw:v1.2.3。使用具体版本号可以确保部署的一致性,避免因镜像自动更新到不兼容版本导致服务崩溃。你可以先拉取(pull)镜像,然后再运行(run)。

3.3 宝塔配置的核心:站点、SSL与反向代理

这是将Docker容器“接入”互联网的关键步骤。宝塔将此过程极大地简化了:

  1. 创建站点:在宝塔面板的“网站”菜单中,添加一个站点。域名填写你准备好的,例如ai.yourdomain.com。根目录可以随意指定一个(比如/www/wwwroot/ai.yourdomain.com),因为后续我们几乎不会用到这个目录下的文件,所有流量都被反向代理走了。创建时,宝塔会自动在Nginx配置目录生成一个对应的配置文件。
  2. 申请SSL证书:站点创建成功后,点击站点设置,找到“SSL”选项。选择“Let‘s Encrypt”证书,勾选你要绑定的域名,点击“申请”。宝塔会自动完成域名验证(通常是通过在网站根目录创建临时文件的方式)并部署证书。成功后,你会看到“强制HTTPS”的选项,强烈建议开启,这样所有HTTP请求都会被自动跳转到HTTPS。
  3. 配置反向代理:在同一个站点设置页面,找到“反向代理”选项。点击“添加反向代理”,代理名称可以填openclaw,目标URL填写http://127.0.0.1:3001(即你Docker容器映射到宿主机的地址和端口)。这里有一个关键点:目标URL必须是http,而不是https。因为反向代理是Nginx和容器内部的通信,通常走内网HTTP即可,无需再次加密。同时,记得勾选“发送域名”等选项,以确保后端服务能接收到正确的原始请求头信息。

避坑指南:配置反向代理后,访问你的域名如果出现502 Bad Gateway错误,99%的原因是目标URL(http://127.0.0.1:3001)无法连通。请按以下顺序排查:

  • Docker容器是否正在运行?(docker ps)
  • 容器的端口映射是否正确?(docker ps查看映射关系)
  • 宿主机的防火墙是否允许本地回环(127.0.0.1)通信?(通常没问题)
  • 可以在服务器上执行curl http://127.0.0.1:3001测试容器服务是否正常响应。

4. 实操过程与核心环节实现

下面,我们进入一步步操作的环节。请严格按照顺序进行。

4.1 第一步:通过宝塔安装并配置Docker环境

  1. 登录宝塔面板,进入“软件商店”。
  2. 搜索“Docker”,找到“Docker管理器”插件,点击安装。安装过程可能需要几分钟。
  3. 安装完成后,你可以在面板左侧看到“Docker”菜单。点击进入,这里提供了图形化的容器、镜像、网络管理界面。不过,对于复杂命令,我们可能仍需借助SSH终端。
  4. (可选但推荐)配置镜像加速器:国内拉取Docker镜像可能很慢。通过SSH连接到服务器,编辑或创建Docker的配置文件:
    sudo nano /etc/docker/daemon.json
    输入以下内容(这里使用腾讯云镜像加速器,你也可以替换为阿里云、中科大等):
    { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ] }
    保存退出后,重启Docker服务:
    sudo systemctl restart docker

4.2 第二步:拉取并运行OpenClaw Docker容器

这里我们假设一个通用的OpenClaw镜像配置。请务必根据你找到的实际镜像文档调整参数

  1. 打开宝塔的“Docker”管理器,切换到“镜像”标签页。在“拉取镜像”输入框中,填入镜像名,例如somecoder/openclaw:v1.0.0,然后点击“拉取”。或者,更推荐使用SSH终端,灵活性更高。
  2. 打开宝塔的“文件”管理器,创建一个目录用于存放OpenClaw的持久化数据,例如/www/docker_data/openclaw。在这个目录下,你可以继续创建config,data等子目录。
  3. 通过SSH终端,使用docker run命令启动容器。下面是一个示例命令,请根据你的镜像说明修改:
docker run -d \ --name openclaw \ -p 3001:3000 \ -v /www/docker_data/openclaw/config:/app/config \ -v /www/docker_data/openclaw/data:/app/data \ -e OPENCLAW_API_KEY="your_secure_api_key_here" \ -e OPENCLAW_MODEL_ENDPOINT="https://api.openai.com/v1" \ -e OPENCLAW_LOG_LEVEL="INFO" \ --restart unless-stopped \ somecoder/openclaw:v1.0.0

命令逐行解析

  • -d: 后台运行容器。
  • --name openclaw: 给容器起个名字,方便管理。
  • -p 3001:3000: 将容器内部的3000端口映射到宿主机的3001端口。
  • -v ...: 挂载两个数据卷,将容器内的配置和数据目录映射到宿主机,实现持久化。
  • -e ...: 设置环境变量。OPENCLAW_API_KEY是你的大模型API密钥(如OpenAI、DeepSeek等),OPENCLAW_MODEL_ENDPOINT是对应的API地址,OPENCLAW_LOG_LEVEL控制日志详细程度。这些变量名是示例,必须参照你的镜像文档!
  • --restart unless-stopped: 设置容器自动重启策略,除非手动停止,否则如果容器退出,Docker会自动重启它。这对于服务可靠性很重要。
  • 最后一行是镜像名和标签。
  1. 运行命令后,使用docker ps查看容器状态,应该是Up。使用docker logs -f openclaw可以查看实时日志,确认服务启动无误,没有报错。

4.3 第三步:在宝塔中创建网站并配置反向代理

  1. 回到宝塔面板,进入“网站” -> “添加站点”。
  2. 域名填写你的专属域名,例如ai.yourdomain.com。备注可以写“OpenClaw服务”。
  3. 根目录选择或创建一个,例如/www/wwwroot/ai.yourdomain.com。数据库和PHP版本都不需要创建,直接提交。
  4. 站点创建成功后,点击站点名称进入“设置”。
  5. 找到“SSL”选项,选择“Let‘s Encrypt”,勾选你的域名和“www”域名(如果有),点击“申请”。成功后,开启“强制HTTPS”。
  6. 找到“反向代理”选项,点击“添加反向代理”。
  7. 代理名称填openclaw,目标URL填http://127.0.0.1:3001(对应你Docker映射的宿主机端口)。
  8. 在“高级功能”或配置文本框中,通常需要添加一些代理头,以确保WebSocket等连接正常工作。点击“配置文件”,在location /块内,添加或确保有以下配置:
    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_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1;
    这些配置确保了原始请求头信息被正确传递给后端容器,对于需要识别客户端IP或使用WebSocket的应用至关重要。
  9. 保存配置。Nginx会自动重载。

4.4 第四步:验证与访问

  1. 首先,在服务器内部测试容器是否正常:在SSH中运行curl http://127.0.0.1:3001,应该能看到一些HTTP响应(可能是HTML、JSON或错误信息,只要不是连接拒绝就行)。
  2. 然后,测试反向代理是否生效:在服务器上运行curl https://ai.yourdomain.com。这次是通过Nginx访问,也应该得到响应。
  3. 最后,打开你的浏览器,访问https://ai.yourdomain.com。你应该能看到OpenClaw的Web界面(如果镜像提供)或者收到API的响应。浏览器地址栏应该显示安全的锁标志。

至此,核心部署已经完成!你的OpenClaw服务现在可以通过安全的HTTPS域名访问了。

5. 常见问题与排查技巧实录

即使按照教程一步步来,也可能会遇到各种“妖魔鬼怪”。下面是我在多次部署中总结的常见问题及解决方法。

5.1 容器启动失败:端口冲突与镜像问题

  • 问题现象docker run命令报错,或docker ps看不到容器,docker logs显示启动即退出。
  • 排查思路
    1. 端口冲突:错误信息可能包含Cannot assign requested addressport is already allocated。检查宿主机3001端口是否已被其他程序占用:sudo netstat -tlnp | grep :3001。如果被占用,要么停止那个程序,要么在docker run命令中换一个映射端口,如-p 3002:3000,同时记得修改宝塔反向代理的目标URL。
    2. 镜像拉取失败或损坏:确保镜像名和标签正确。尝试先拉取镜像docker pull somecoder/openclaw:v1.0.0,观察是否有网络错误。国内网络可以尝试更换Docker镜像加速源。
    3. 环境变量或挂载路径错误:仔细检查-e后面的变量名和值是否符合镜像要求。检查-v后面的宿主机目录是否存在,如果不存在,Docker会自动创建,但最好手动创建并设置好权限(chmod 755)。
    4. 镜像本身需要特殊权限:有些镜像需要以特权模式运行或访问特定设备。查看镜像文档,可能需要添加--privileged参数,但这会带来安全风险,需谨慎。

5.2 502 Bad Gateway:反向代理配置的核心痛点

这是最高频的错误,没有之一。

  • 问题现象:浏览器访问域名显示502,宝塔Nginx错误日志(/www/wwwlogs/ai.yourdomain.com.error.log)中可能有connect() failed (111: Connection refused)upstream prematurely closed connection
  • 排查步骤(黄金四步)
    1. 容器活着吗?docker ps确认容器状态是Up,并且运行时间正常。
    2. 容器端口对吗?docker ps查看端口映射,确认是0.0.0.0:3001->3000/tcp。然后,在服务器上执行curl http://127.0.0.1:3001。如果这里就失败,说明问题在容器内部,去查容器日志docker logs openclaw
    3. 目标URL写对了吗?检查宝塔反向代理配置中的“目标URL”,必须是http://127.0.0.1:3001(假设映射端口是3001)。绝对不能是https,也尽量不要用localhost,在某些环境下127.0.0.1更可靠。
    4. Nginx配置生效了吗?修改宝塔反向代理配置后,点击“保存”并“重载配置”。可以查看Nginx的配置测试nginx -t是否通过,或直接重启Nginx服务。

5.3 HTTPS访问异常:证书与混合内容问题

  • 问题现象:浏览器访问域名,HTTPS锁标志显示红色或黄色,提示“不安全”、“混合内容”。
  • 排查思路
    1. 证书未生效或过期:在宝塔的站点SSL设置里,检查证书状态是否为“已部署”。Let‘s Encrypt证书有效期90天,宝塔通常会自动续签,但偶尔会失败,需要手动点击“续签”。
    2. 前端资源加载HTTP:如果OpenClaw的Web界面能打开,但样式错乱、图片不显示,通常是页面内的一些资源(JS、CSS、图片)仍然通过HTTP协议加载,被浏览器阻止。这需要后端服务(OpenClaw)在生成前端页面时,使用相对路径或根据X-Forwarded-Proto头动态生成资源链接。这不是宝塔或Nginx能直接解决的,需要检查OpenClaw的配置,确保它知道自己在反向代理后运行,并且是HTTPS访问。有时可以通过在Nginx反向代理配置中添加proxy_set_header X-Forwarded-Proto $scheme;并确保后端应用能正确识别此头信息来缓解。
    3. HSTS问题:如果之前错误配置过,浏览器可能会记住强制HTTPS。清除浏览器缓存和Cookie,或尝试隐身模式访问。

5.4 性能与优化:让服务更稳定

部署成功只是第一步,要让服务稳定可靠,还需要一些优化:

  1. 资源限制:在docker run命令中,可以添加资源限制参数,防止单个容器吃光服务器资源。
    -m 2g \ # 限制最大内存为2GB --cpus="1.5" \ # 限制使用1.5个CPU核心
  2. 日志管理:Docker容器日志默认会占满磁盘。在宝塔Docker管理器里,可以为容器设置日志驱动和大小限制,或者定期使用docker logs --tail 100 openclaw查看最新日志,并用docker-compose logs -f(如果使用compose)跟踪。
  3. 数据备份:你挂载在/www/docker_data/openclaw下的数据是宝贵的。定期通过宝塔的“计划任务”功能,将这个目录打包压缩并备份到远程存储(如OSS、另一台服务器)。
  4. 更新策略:当有新版本镜像时,不要直接docker run一个新容器。标准的更新流程是:
    • docker pull somecoder/openclaw:new-version
    • docker stop openclaw
    • docker rm openclaw(注意:这会删除容器,但你的数据在挂载卷里,是安全的)
    • 使用新的镜像标签,重新执行docker run命令(保持相同的卷挂载参数和环境变量)。

5.5 进阶:使用Docker Compose进行编排

如果你觉得docker run一长串命令难以管理,强烈推荐使用docker-compose。通过一个docker-compose.yml文件,可以清晰地定义服务、网络、卷。

  1. 在服务器上安装Docker Compose(如果宝塔Docker管理器未自带)。
  2. /www/docker_data/openclaw目录下创建docker-compose.yml文件:
    version: '3.8' services: openclaw: image: somecoder/openclaw:v1.0.0 container_name: openclaw restart: unless-stopped ports: - "3001:3000" volumes: - ./config:/app/config - ./data:/app/data environment: - OPENCLAW_API_KEY=your_secure_api_key_here - OPENCLAW_MODEL_ENDPOINT=https://api.openai.com/v1 - OPENCLAW_LOG_LEVEL=INFO # 资源限制 deploy: resources: limits: cpus: '1.5' memory: 2G
  3. 在该目录下,通过命令docker-compose up -d启动服务。管理起来也非常方便:docker-compose down停止,docker-compose logs -f看日志,docker-compose pull && docker-compose up -d更新。

使用Docker Compose,所有配置一目了然,版本控制也方便,是管理单个或多个关联容器的最佳实践。

走到这里,你的OpenClaw服务应该已经在宝塔的庇护下,安全、稳定地运行起来了。这套方法的价值在于其通用性——任何提供HTTP接口的Docker化应用,无论是AI模型、博客系统、网盘还是API服务,都可以通过“Docker运行 + 宝塔反向代理”这个组合拳,快速、安全地部署到公网。下次当你看到有趣的开源项目时,不妨先想想:“能不能用Docker跑起来,然后用宝塔挂上域名?” 你会发现,很多复杂的运维工作,其实早已有了优雅的解决方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询