我之前写过一篇零基础网页部署的保姆级教程,里面给大家推荐过用 Vercel 来快速把网页放到线上。

零基础网页部署保姆级教程,搞定上线最后一公里

现在很多人不是做不出网页,而是卡在最后一步:AI 已经帮你把页面写好了,你自己电脑上也能打开,但你不知道怎么让别人通过一个链接访问它。 这一步就叫部署,也就是网页上线的最后一公里。…

https://macin.top/posts/c65f747b/

文章发出来之后,很多朋友来跟我交流,反馈说 Vercel 用起来确实简单,但在实际体验中有两个很大的痛点:

第一是国内访问太慢了,经常卡顿抽风甚至直接打不开,别人想试用你的产品还得专门挂梯子。 第二是限制太多,免费额度紧、Serverless 函数冷启动慢,稍微想跑个后台常驻任务、做个带自建数据库的全栈项目,就处处受限,非常不利于长期使用。

所以今天这篇文章,我们就来说一下我个人认为目前最舒服、也最踏实的最佳部署方案拥有一台属于自己的 VPS,然后在上面部署一个 Dokploy。

很多人一听到“买服务器”就觉得贵、觉得门槛高。其实现在的花费非常便宜,各大云厂商针对新用户基本都有促销活动,一年算下来也就 100 块左右(像我自己常用的腾讯云国际版海外轻量,2 核 2G 一年大概只要 10 美元)。

花这点小钱,我们就能在自己的 VPS 上搭建出一套跟 Vercel 体验几乎一致、而且功能比它强大得多的私有部署环境。

更爽的是,接上 AI 的 MCP(Model Context Protocol)之后,你甚至连命令都不用敲,直接在对话框里一句话吩咐它:

帮我把这个项目部署上去,配好域名和数据库,再告诉我访问地址。

一. 先弄明白这三个核心东西

动起手来其实非常快,别被一堆技术词给绕晕了,核心就三个东西:

  • VPS:其实就是一个云服务器,你也可以把它直接理解为一台 24 小时开机连网的云端电脑,专门用来实际运行你的项目和数据库。
  • Dokploy:就是我们用来管理这台电脑的现代部署平台(类似开源自建版的 Vercel)。它比很多人常推荐的宝塔好得多,功能强大,全基于 Docker 容器化隔离,而且对 AI 极度友好。
  • MCP:是 AI 操作 Dokploy 的工具接口,让 Codex 等 AI 编程工具能通过对话直接帮你建项目、拉代码、查日志和做部署。

整个协作流程非常直白:你在 Codex 里发一句话 → Codex 调用 Dokploy 的 MCP 接口 → Dokploy 在服务器上自动建应用并拉起 Docker → 你的 VPS 稳稳当当地把网站跑起来。

二. 买 VPS 该怎么选?新手避坑指南

买服务器其实丰俭由人。如果你不知道怎么选配置,最省事的办法就是直接把你的预算和需求丢给 AI,让它帮你挑性价比最高的方案。

如果你习惯用国内云厂商,阿里云、腾讯云、华为云、百度云这些都可以。大家完全可以用新账号去薅各大云厂商的新客特惠活动,新用户一年往往几十到一百块左右就能拿下一台轻量服务器。

但这里有一个非常关键的避坑点:尽量选香港或者海外节点(比如新加坡、东京)!

原因非常现实:绑定自定义域名免备案

如果你的服务器选在国内大陆节点,到时候绑定自己的个性化域名解析,就必须走国内工信部的 ICP 备案流程,填资料、等审核,对个人折腾小项目来说非常耗时繁琐;而选香港或海外节点,域名解析过去立刻就能生效访问,省掉了一大堆麻烦。

除了国内站,我们也可以直接看各大云厂商的国际站(比如阿里云国际版、腾讯云国际版)。我自己目前用的就是腾讯云国际版(Lighthouse),新用户做活动时大概 10 美元左右就能拿下一整年 2 核 2G、40GB SSD 的海外轻量服务器,不仅便宜,而且网络各方面都很舒服。

三. 购买 VPS,找到服务器入口

这里以我常用的腾讯云轻量应用服务器为例,选择的是新加坡地区、2 核 CPU、2GB 内存、40GB SSD,以及预装 Docker 的镜像。

实例创建完成后,进入服务器列表。记下公网 IPv4,后面访问面板时会用到。

点击实例卡片上的 登录

本次使用腾讯云网页提供的免密连接,用户名为 ubuntu。点击登录后会进入服务器终端。

四. 安装 Dokploy 面板

在服务器终端执行下面这条官方安装命令:

1
curl -sSL https://dokploy.com/install.sh | sh

如果权限不足的话,就用管理员权限运行 Dokploy 的官方安装脚本。示例镜像已经安装 Docker,因此终端会显示 Docker already installed。

安装前应确认 80、443、3000 端口没有被其他服务占用。如果服务器已经承载其他网站,先检查现有服务,再安装。

等待安装完成后,到腾讯云实例的 防火墙 页面添加规则。先放行 TCP 3000,用来访问管理面板。

浏览器打开

http://你的服务器公网IP:3000

出现下面的初始化页面,就可以创建管理员账号。

填写名字、邮箱和密码,点击 Register。这是你自己这台 Dokploy 的账号,与腾讯云账号无关。

如果登录后进入首次使用引导,点击左下角的 SKIP ALL,先进入控制台。

控制台主界面长这样:

进入具体应用后,还会看到环境变量、域名和部署日志等选项。第一次不用把每个菜单研究一遍,先让 AI 连上,再回来看它创建了什么。

顺便提一句大家很关心的域名和 HTTPS:Dokploy 底层自带了 Traefik 反向代理。后面当你把域名解析过来之后,在面板里填上域名,它能一键自动向 Let’s Encrypt 申请并配置免费的 SSL 证书(HTTPS),体验跟 Vercel 完全一样无感。

五. 生成 API Key 并接入 Codex

打开左侧 Profile,向下找到 API / CLI Keys,点击右下角的 Generate New Key

可以按上面的方式填写,点击 Generate把生成的完整密钥保存在本地。后面需要把它填入 MCP 配置。

这把密钥就是 AI 访问 Dokploy 的凭证。

接下来用 Codex 操作。Codex 是我们与 AI 对话、让它执行任务的工具;这里让它通过 Dokploy 官方 MCP,连接刚才装好的部署面板。

先打开你电脑上的 Codex,新建一个任务。 我们第一条消息先让它安装并配置 MCP。等配置完成、密钥填好、连接验证通过,再让它创建项目和部署应用。

第一步:打开 Codex,发送安装请求

打开 Codex,新建一个任务,在对话框里粘贴下面这段话。把地址替换为你自己的 Dokploy 地址:

1
2
3
4
5
6
请帮我安装并配置 Dokploy 官方 MCP,供 Codex 使用。

Dokploy 地址:http://你的服务器公网IP:3000

保留现有配置,API Key 先留占位符,告诉我在哪里填写。
完成后展示配置结果,方便我截图。暂时不要部署项目。

这一步只需要提供面板地址,不用把 API Key 发到聊天里(偷懒的也可以直接发给 AI,但毕竟有泄露风险,本地替换更安全)。密钥先留在本地,等配置生成好后再填写。

第二步:让 Codex 检查环境并完成配置

Dokploy 官方 MCP 的 npm 包名是

@dokploy/mcp

此时打开 Codex 的设置界面,在插件列表中可以看到已经安装好了 Dokploy 的 MCP:

不过此时刚写进去的配置里,API Key 还是占位符,所以还算不上连接成功。

第三步:在本地填入 API Key

按 Codex 回复的路径打开配置文件。

找到 config.toml,用文本编辑器打开。在 [mcp_servers.dokploy.env] 下找到这一行:

DOKPLOY_API_KEY = “REPLACE_WITH_YOUR_DOKPLOY_API_KEY”

把双引号里的占位符替换为你在 Dokploy 创建的密钥,保留双引号,然后保存。只替换对应字段即可,不用重新覆盖整个文件。

第四步:重新连接 MCP

打开 Codex 设置 → 插件 → MCP,找到 dokploy,确认右侧开关已开启。需要调整配置时点击这一行的齿轮,按当前界面提供的操作重新加载服务。

如果列表没有更新,退出并重新打开 Codex,再新建一个任务查看工具是否可用。初次启动需要下载依赖,可能比之后启动慢一些。

六. 先用一句话,验证连通性

在 AI 对话里输入:

1
2
3
请通过 Dokploy MCP 列出当前项目。
只读取信息,不创建或修改任何资源。
如果连接失败,报告具体错误。

没有项目时返回空列表是正常结果。关键是 AI 确实调用工具,并收到 Dokploy 的返回,而不是只给你解释操作方法。

到这里就说明已经连通成功了。

再发第二条:

1
2
请通过 Dokploy MCP 创建 personal-stack 项目。
完成后告诉我项目名称和 ID。

回到 Dokploy 的 Projects 页面刷新,检查项目是否出现。

到这里,AI 操作部署平台的链路就连接上了。本次流程已经通过官方 MCP 程序调用验证:可以读取项目列表、查询模板和服务器健康信息,并创建空项目。

七. 以 Supabase 为例,让 Codex 执行部署任务

MCP 添加完成后,就可以回到 Codex 的对话界面,给它一个具体任务。这次以 Supabase 为例。

Supabase 为网站提供数据库、用户登录和文件存储等后台能力。例如做一个个人备忘录,账号由它管理,笔记内容也保存在它的数据库里。

通过 MCP 部署 Supabase,就是让 Codex 调用 Dokploy 的工具,查找模板、创建服务、配置部署,再检查结果。

先发一条指令

将地址和项目名替换为实际值后,再发送:

1
2
3
4
5
6
7
8
9
10
11
12
13
请通过 Dokploy MCP,在 personal-stack 项目中部署 Supabase。

要求:
1. 使用已经检查过的 Supabase 模板,避免重复创建已有服务。
2. 检查模板版本、所需配置和数据持久化挂载。
3. 确认密码及密钥已安全生成,不使用默认示例凭据,
不在回复中显示真实密钥。
4. 根据我提供的访问地址配置 API 地址与认证回调;
如果地址或必要配置缺失,先告诉我,不要猜。
5. 不向公网开放数据库端口,不修改其他服务。
6. 执行部署后检查部署记录和关键服务状态,
告诉我如何打开管理入口、如何验证 API。
7. 工具无法检查的部分明确说明,不以“已提交部署”代替成功。

怎么判断真的部署好了

回到 Dokploy 的 Projects → personal-stack,检查新增的 Supabase 服务及部署记录,再按照返回地址验证:

  • 部署记录没有失败或持续重试。
  • 数据库、认证、API 网关等关键服务运行正常。
  • 管理入口能够登录,API 可以实际请求。

再部署一个连接它的小项目

Supabase 验证通过后,可以做一个带登录的个人备忘录。继续告诉 Codex:

1
2
3
4
5
6
7
8
9
请帮我制作一个连接这套自托管 Supabase 的个人备忘录网站。
实现登录、查看、新增、编辑和删除自己的笔记。

提供建表 SQL 和 RLS 策略,确保用户只能操作自己的记录。
浏览器端只使用公开客户端密钥,不使用 service_role 或 secret key。
先在本地检查代码和配置,再通过 Dokploy MCP 部署网站。
数据库初始化如果需要其他工具,请明确告诉我如何完成。

最后验证:保存后重新登录数据仍在,两个测试用户不能访问对方的笔记。

这一段真正的完成标准,是网站操作写进了这套数据库,并且用户隔离有效。仅能打开网站首页,还不能证明 Supabase 已经接入成功。

打开你的地址:

http://你的服务器公网IP:3000/notes/

第一次访问时,浏览器会弹出账号密码窗口:

验证通过后,就能看到“我的云端便签”页面:

页面上方是便签输入框,下面有“保存便签”和“刷新列表”。截图中的“已与数据库同步”是读取列表后显示的状态,当前列表为空,因此提示“还没有便签,保存第一条试试”。

八. 把 GitHub 上的项目交给 AI 部署

前面的演示搞定了“网站能运行、数据能保存”。接下来把代码放进 GitHub,让 Dokploy 从仓库自动拉取和构建。以后只要改完代码推送到 GitHub,服务器就能自动发布新版本。

第一步:在 Dokploy 中连接 GitHub

打开 Dokploy 左侧的 Git,点击 GitHub,会出现下面的窗口。

GitHub URL 保持

https://github.com

,这里填的是 GitHub 平台地址,不是项目仓库地址。点击右下角 Create GitHub App,按跳转页面完成创建。

返回 Dokploy 后,列表里出现了一个 GitHub App,但右边仍显示 Action Required

这时还没有完成仓库授权。点击 Action Required 右边、垃圾桶左边的安装图标,进入 GitHub 的安装页面。

这里建议选择 仅选定的仓库(Only select repositories),再选 personal-memo,最后点击绿色的 安装与授权。上图是在修改选择前截下来的,仍显示“所有仓库”,不能把这张图当作已经限制授权范围的证明

完成后会跳回 Dokploy。此时 Action Required 已经消失。

这一步让服务器获得了读取私有代码仓库的入口。后面的创建服务、填写部署参数和执行部署,就交给 Codex 通过 MCP 完成。

第二步:让 Codex 从 GitHub 部署独立的备忘录服务

回到已经接好 Dokploy MCP 的 Codex,发送:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
请通过 Dokploy 官方 MCP 部署 GitHub 仓库:
Vink567/personal-memo,分支 main。

使用刚刚连接的 GitHub Provider,
在 personal-stack 项目中创建独立的 personal-memo 服务。

先读取仓库,根据实际代码配置构建和运行方式。
复用现有 PostgreSQL 和 PostgREST,不重复创建数据库,
保留已有备忘录和数据卷,凭证从本地配置读取,不输出。

网站继续使用现有 /notes/ 地址。
先确认新服务正常,再切换网站路由,保留回退方式。

开启 main 分支推送后的自动部署。
完成后返回访问地址、部署结果和本次对应的提交。

Codex 随后通过官方 MCP,直接把 GitHub 仓库里的项目部署到了 Dokploy 中:

此时打开的仍是原来的地址:

http://你的服务器公网IP:3000/notes/

第三步:修改 GitHub 代码,看看网站会不会自动更新

部署成功后,再给 Codex 一条任务:

1
2
3
4
5
6
7
请修改 personal-memo 的界面:
改成浅色背景、绿色按钮和卡片式备忘录列表,
标题改为“我的个人备忘录”,保留新增、编辑、删除功能。

完成后提交并推送到 GitHub 的 main 分支。
推送后不要手动触发 Dokploy 部署。
观察自动部署记录,确认网页更新,原有备忘录仍然存在。

更新前是深色的“我的云端便签”,里面已经存有一条“测试测试”。

将更新后的代码推送到 GitHub 后,Dokploy 自动出现了这次提交的部署记录,过程中不需要再调用手动部署。

刷新网站后,页面已经变成浅色布局,标题是“我的个人备忘录”,原来的“测试测试”和创建时间都还在:

刷新网页就能看到新版浅色界面,而且之前保存的旧备忘录记录全都在。

整条自动化发布链路非常顺畅:Codex 修改代码 → 提交并推送到 GitHub main 分支 → GitHub Webhook 触发 Dokploy → Dokploy 自动拉取最新代码并构建更新容器 → 刷新 /notes/ 即可看到新界面,原有数据库数据依然完好保留。

九. 日常操作,还能让 AI 帮你做这些事

部署只是第一次操作。之后更常用的是查询状态、更新应用和排查错误。

查看应用状态

通过 Dokploy MCP 检查 my-web 的状态和最近一次部署结果。 先只读取,不重启、不重新部署。 区分已经确认的问题和需要继续检查的地方。

排查部署失败

检查 my-web 最近一次失败的部署。 读取当前工具能获取的日志,指出关键报错并解释可能原因。 先给出建议,不要连续重试部署。 如果 MCP 无法读取日志,告诉我去面板哪里查看。

修改环境变量

将 my-web 的 LOG_LEVEL 设置为 info,保留其他环境变量。 先判断修改是在构建时还是运行时生效, 然后执行必要的重新部署并检查结果。 不要输出其他变量中的密钥。

发布代码更新

重新部署 my-web 配置的 main 分支。 报告部署结果;如果工具能读取提交信息,说明本次对应的提交。 完成后检查服务是否能访问。

重启应用

通过 Dokploy MCP 重启 my-web。 不要修改环境变量或其他服务。 完成后重新检查应用状态;如果无法验证访问情况,请明确说明。

检查资源占用

检查服务器和应用的资源使用情况,只读取信息。 不停止服务、不清理文件。 说明内存统计口径,区分总量、已用量和可用量。

刚开始使用时,把任务对 AI 说清楚:操作哪个项目、修改什么、保留什么、最后怎么验证。例如先让 AI 诊断故障并给出建议,确认没问题后再让它执行修复。

写在最后

以前聊自建服务或买 VPS,总觉得那是专业运维和全栈工程师的专属领域。但配合现在的 AI 工具和 MCP 协议,整个游戏规则彻底变了。

你不需要去死记复杂的 Linux 运维命令,也不用在云厂商后台那些让人眼花缭乱的菜单里迷路。花几十到一百块搞一台海外小 VPS,装上 Dokploy,剩下的事情直接丢给 AI 去对话式搞定。

既能拥有 Vercel 一样丝滑的自动化部署体验,又不受任何第三方平台的额度与网络限制,数据和基础设施全在自己手里。如果你也受够了 Vercel 的网络和限制,赶紧挑一台适合自己的 VPS,把这套流程跑通吧。