使用 Vercel 部署项目时,体验确实很顺滑,特别是对前端框架的支持几乎是“开箱即用”。但是很快我就遇到一个现实问题:默认的 100GB 流量额度根本不够用。
一旦项目流量稍微上来,就会发现要升级到付费套餐,而 每月 20 美元的价格 对很多个人开发者和小团队来说并不算便宜。
如果你也有同样的困扰,其实完全可以考虑 Vercel 替代方案。通过迁移到合适的平台,不仅能继续保持顺畅的部署体验,还能在费用上节省不少。
这篇文章主要面向三类人:
- 经常遇到流量额度限制的个人开发者
- 正在为高昂部署成本发愁的小团队
- 想寻找更灵活托管方式的独立站长
阅读完之后,你会知道有哪些替代平台适合从 Vercel 迁移过去,它们的优缺点分别是什么,以及如何结合自身需求节省部署成本。
为什么需要寻找 Vercel 替代方案?
很多人一开始选择 Vercel,是因为它足够简单:接入 GitHub,点几下按钮,就能把前端项目跑起来。但是当项目规模逐渐扩大,或者流量稍微上升时,你会发现 Vercel 的限制逐渐显现。
根据 Vercel 官方文档的数据:
- 免费套餐只有 100GB 流量,一旦超过,必须升级。
- Pro 套餐需要 20 美元/月,流量才能提升到 1TB。
- 如果项目需要更高流量或者团队协作,价格还会进一步上涨,企业高达 数百美元每月
当你的网站有一定访问量后,流量消耗很快就会突破免费额度,升级费用并不低。
相比之下,如果你选择 VPS 自行部署,同样的预算完全可以获得更高的带宽和流量,同时还能自由选择地理位置,访问速度上也更有优势。
其他推荐方案
除了直接迁移到 VPS,你也可以考虑一些其他 Vercel 替代方案:
- Netlify:和 Vercel 一样主打前端托管,免费额度稍微宽松一些,但升级后价格依然不低。
- Cloudflare Pages:和 Cloudflare 自家的 CDN 深度结合,适合需要静态站点加速的用户。
- Render:支持前后端一体化托管,功能更全面,费用也会比较高。
这些平台在体验上和 Vercel 类似,但从节省成本的角度考虑,VPS 依然是更有性价比的选择。
我推荐的迁移方案
从我个人长期测试和使用的经验来看,VPS + 自部署 是最值得推荐的方案。
因为 VPS 的选择自由度非常高,你可以选择美国、日本、香港甚至欧洲的数据中心,结合实际用户群体,得到更好的访问速度。同时,价格也比 Vercel 便宜很多。
比如,搬瓦工的 Basic 基础套餐,年付只要 49.99 美元,就有 1TB 流量,比 Vercel 的付费方案便宜太多了,访问速度也并不逊色。如果选择日本或香港的 VPS,对中国大陆访问会更加友好。
下面我给大家整理了一些 VPS 商家的推荐列表:
值得推荐的商家
注意:如果你想使用 Dokploy 进行部署,VPS 要求 2GB 内存 30GB 磁盘空间。
下面这些 VPS 提供商,都是我亲自测试过的,既有高品质线路,也有高性价比套餐,能够满足不同用户的需求。
商家 | 方案亮点 | 官网链接 |
---|---|---|
搬瓦工 | 基础款稳定性价比高 高级款支持 CN2 GIA 线路 | 搬瓦工官网(查看介绍) |
DMIT | 高品质 VPS,便宜稳定 还提供大陆高级线路优化 | DMIT官网(查看介绍) |
野草云 | 便宜的香港 VPS,高性价比 大陆访问流畅 | 野草云官网(查看介绍) |
OrangeVPS | 提供美国、香港、新加坡 VPS 优惠套餐价格实惠 | OrangeVPS官网(查看介绍) |
HostDare | 价格便宜的美国、日本 VPS 即使大陆优化线路也很优惠 | HostDare官网(查看介绍) |
Evoxt | 全球更多数据中心,尤其亚洲节点丰富 | Evoxt官网(查看介绍) |
可以看到,相比 Vercel 的付费方案,这些 VPS 在价格上要划算得多。最重要的是,你还能自由选择服务器位置,比如香港、日本等地,让中国大陆用户访问体验大幅提升。
如果你不想再受限于 Vercel 的高额费用和功能限制,选择 VPS 来部署项目,绝对是一个更自由、更划算的替代方案。
使用 Dokploy 替代 Vercel
前面我们已经对比了 Vercel 和 VPS 的成本差异,现在就进入实操环节。
我最终选择的方案是 使用 Dokploy 来替代 Vercel。Dokploy 是一款自部署的 PaaS 管理面板,能让你用极低的成本,在自己的 VPS 上实现和 Vercel 类似的项目部署与管理。
这种方式的好处很明显:
- 完全可控:你自己掌握服务器,项目数据不会依赖第三方平台;
- 节省开销:只需要支付 VPS 的费用,比 Vercel Pro 每月 20 美元便宜太多;
- 扩展自由:你可以根据项目情况选择不同地区、线路的 VPS
VPS 配置要求
在实际迁移前,需要提醒你一下 VPS 的配置要求。
- 推荐配置:Dokploy 官方给出的建议是要求 VPS 有 2GB 内存 30GB 磁盘空间。
- 系统:Debian / Ubuntu 系统都可以,我个人更推荐 Ubuntu 22.04。
如果你只是想部署个人博客或中小型项目,基础款 VPS 完全够用。如果是商用项目,建议选择更高配的 VPS,能避免资源不足。
安装 Dokploy
1、执行一键安装脚本
在 VPS 中执行以下命令,进行 Dokploy 的安装:
curl -sSL https://dokploy.com/install.sh | sh
按照引导安装完成后,Dokploy 会自动运行在服务器的 3000 端口。
2、防火墙放行端口
如果服务器开启了防火墙,需要手动放行 3000 端口,以我使用 Ubuntu 为例:
ufw allow 3000
ufw reload
当然,如果你安装了 1Panel 和宝塔这类 Linux 控制面板,通过图形化面板管理也是可以的。
3、首次访问 Dokploy
在浏览器中访问:
http://你的服务器IP:3000
即可进入 Dokploy 的安装向导。按照提示设置好管理员账号和密码。

4、绑定域名(可选)
如果不想通过 IP 访问,还可以在 Dokploy 左侧菜单进入 Web Server 设置,为 Dokploy 绑定一个域名。然后,在你的域名 DNS 解析中,新增一条 A 记录 指向服务器 IP。

这样,你就能直接通过「域名」访问 Dokploy 控制台,更加方便管理。
到这里,我们已经把 Dokploy 安装好了,下一步就是进入最关键的环节 —— 项目部署。我强烈优先推荐 GitHub Actions 构建 + Dokploy 部署 的方案,这种方式能极大节省 VPS 的资源消耗。
GitHub Actions 构建 + Dokploy 部署(推荐)
Dokploy 安装好以后,就可以开始部署项目了。这里我强烈推荐使用 GitHub Actions 构建 + Dokploy 部署 的方案,而不是直接在 VPS 上构建镜像。
原因很简单:
- 省资源:VPS 的 CPU 和内存有限,如果每次都要在本地构建,会吃掉很多资源;
- 构建更快:GitHub Actions 的构建环境性能更强,通常速度更快;
- 免费好用:GitHub 每月提供一定的免费构建额度,小型项目完全够用。
换句话说,Dokploy 只需要负责「拉取已经构建好的镜像并运行」,而不用再自己编译打包。
配置 GitHub 关联
在 Dokploy 控制台点击左侧的 Git → 选择 GitHub,在弹出框中点击 Create GitHub App。然后需要在 GitHub 中完成 APP 的创建。

然后在点击 GitHub APP 的下载/安装图标,就会跳转到 GitHub 去完成授权,可以选择你需要的仓库或者所有仓库。授权完成后,Dokploy 就能获取 Github 的代码仓库了。

这样,Dokploy 就能访问你的代码仓库,可以通过拉取仓库代码进行项目部署。
配置 GitHub Token 和 Registry
为了让 Dokploy 能从 GitHub Packages 拉取镜像,我们还需要配置 Registry。点击链接https://github.com/settings/tokens/new 去 GitHub 创建一个新的 Personal Access Token。

创建成功后,会获取到一个 Token,记下来。接着,回到 Dokploy 面板 → 点击 Registry → 点击 Add Registry 新建,填写下方的信息:
- Username:你的 GitHub 用户名
- Password:刚才生成的 Token
- Registry URL:
https://ghcr.io

项目创建与服务配置
在 Dokploy 控制台中,先点击左侧 Projects 菜单,然后创建一个新的 Project。

在该 Project 之下,可以创建一个 Service,每个 Service 对应我们需要迁移的一个 Vercel 项目。
也就是说,Project 是管理单位,而 Service 则是具体的应用或项目实体。

编写 GitHub Actions 构建配置
在你的代码仓库中,创建 .github/workflows/docker-image.yml
文件:
name: Create and publish a Docker image
on:
push:
branches: ['main']
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
attestations: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}
NEXT_PUBLIC_PROJECT_NAME=${{ secrets.NEXT_PUBLIC_PROJECT_NAME }}
- name: Trigger dokploy redeploy
run: |
curl -X GET https://xxxxxx/api/deploy/ZdYZjoiNxZ5nDIbjO1E2x
重点说明:curl
这一行要替换成你在 Dokploy 创建 Service 里生成的 Webhook URL(如下图)。

Dockerfile 配置
在项目根目录新增一个 Dockerfile
文件,这个 Dockerfile 是为上面的 GitHub Action 执行 Docker 镜像打包,示例如下:
FROM node:18-alpine AS base
FROM base AS deps
RUN apk add --no-cache libc6-compat && yarn global add pnpm
WORKDIR /app
COPY package.json pnpm-lock.yaml* ./
RUN pnpm i --frozen-lockfile
FROM deps AS builder
WORKDIR /app
ARG NEXT_PUBLIC_WEB_URL
ARG NEXT_PUBLIC_PROJECT_NAME
ENV NEXT_PUBLIC_WEB_URL=${NEXT_PUBLIC_WEB_URL}
ENV NEXT_PUBLIC_PROJECT_NAME=${NEXT_PUBLIC_PROJECT_NAME}
COPY . .
RUN pnpm build
FROM base AS runner
WORKDIR /app
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs && \
mkdir .next && \
chown nextjs:nodejs .next
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV NODE_ENV production
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]
这样,每次你推送到 main
分支,GitHub Actions 就会自动构建镜像 → 推送到 GitHub Packages → 通过 Webhook 通知 Dokploy → Dokploy 拉取镜像完成自动部署。
拉取镜像并部署
在 GitHub Action 完成镜像打包并推送到你的镜像仓库后,需要在 Dokploy 面板上拉取最新镜像。操作步骤如下:
- 打开 Dokploy 控制面板,进入你要部署的项目。
- 在 Provider 区域,选择 Docker 并填写 Docker Image:
ghcr.io/用户名/项目名:版本
- 等待 Dokploy 拉取完成,可以在面板中看到镜像状态更新。
- 拉取完成后,点击 Deploy 按钮,即可将新镜像部署到 VPS 上。

完成镜像拉取和部署后,你的服务就已经运行在 VPS 上,可以进行下一步的 绑定域名 设置。
部署完成与绑定域名
最后,在 Domain 中绑定服务域名,然后到 DNS 提交一条 A 记录解析,就能用域名访问新服务了。

到这里,整个 Vercel → Dokploy 迁移流程 就完成了。
Dokploy 也支持直接在服务器上构建代码(Provider 选择 GitHub),不过这样会占用 VPS 资源,整体效率不如「GitHub Actions 构建 + Dokploy 部署」的方式,所以这里就不展开了。
总结
通过本文教程,我们完成了从 Vercel 到 Dokploy 的项目迁移全过程。主要步骤包括:
- 在 Dokploy 控制台创建 Project。
- 在 Project 下新建 Service,每个 Service 对应一个需要迁移的 Vercel 项目。
- 配置 Git 仓库和部署设置,实现自动化部署。
- 测试迁移后的项目,确保功能与原 Vercel 项目一致。
整个迁移流程简单明了,适合开发者和团队快速上手。同时,Dokploy 提供灵活的服务管理和多项目支持,能够满足日常开发和部署需求。
常见问题解答(FAQ)
Q1:什么是 Dokploy 的 Project 和 Service?
Project 是 Dokploy 中的顶级组织单元,用于管理一个或多个 Service。Service 对应你要迁移或部署的具体项目,相当于 Vercel 的单个项目。
Q2:一个 Project 下可以创建多少个 Service?
Dokploy 没有严格限制,一个 Project 下可以创建多个 Service,便于团队统一管理相关项目。
Q3:如何将 Vercel 项目迁移到 Dokploy?
先在 Dokploy 创建 Project 和 Service,然后将 Vercel 项目的 Git 仓库地址添加到 Service,配置部署分支和环境变量,即可完成迁移。
Q4:迁移过程中需要修改代码吗?
一般情况下无需修改代码,但需要确保环境变量、构建命令和依赖与 Dokploy 平台兼容。
Q5:迁移完成后如何测试项目?
可以使用 Dokploy 提供的预览 URL 或绑定自定义域名进行访问,检查页面功能和 API 是否正常运行。
Q6:迁移后可以继续使用 Vercel 吗?
可以同时保留 Vercel 项目,但域名的 DNS 已经修改,Vercel 上的遗留已经没有用了,建议清理。