如何将 Vue 3 工程化项目部署到 Vultr 全球云服务器?

来源:语言推理作者:香港程序员头衔:程序员
导读:本期聚焦于香港程序员创作的《如何将 Vue 3 工程化项目部署到 Vultr 全球云服务器?》,敬请观看详情。Vue 3 项目开发完成后,怎么把它部署到一台稳定的海外云服务器上让全世界的用户访问?Vultr 作为覆盖全球三十多个机房节点的云服务商,配合 Nginx 反向代理,是部署前端工程化项目的常见选择。本文从 Vue 3 项目的打包构建讲起,介绍 vite build 产物结构、Vultr 服务器的选购与初始化、SSH 远程连接与安全加固,再到 Nginx 的安装配置、静态资源托管、SPA 路由的 history 模式回退处理,最后补充 HTTPS 证书申请、 gzip 压缩与缓存策略等性能优化手段,帮助你把一个本地工程完整迁移到线上环境,并了解自动化部署脚本的基本思路。

Vue 3 配合 Vite 已经成为当前前端工程化的主流方案,本地开发时一切顺利,但项目总归要上线。不少团队会选择 Vultr 这样的海外云服务商,原因很简单:按小时计费、机房遍布全球、开通即用,而且支持自定义镜像。本文就以一个标准的 Vue 3 工程化项目为例,完整走一遍从打包构建到 Vultr 服务器部署的全流程,中间会穿插一些容易踩坑的细节,比如 history 路由刷新 404、资源路径错误等问题。

如何将 Vue 3 工程化项目部署到 Vultr 全球云服务器?

Vue 3 项目的打包构建与产物分析

部署的第一步是产出可上线的静态文件。Vue 3 项目通常使用 Vite 作为构建工具,执行下面的命令即可在 dist 目录生成产物:

npm run build
# 或者显式指定模式
vite build --mode production

构建完成后,dist 目录里主要是 index.html、assets 下的 js 和 css 文件,以及图片字体等静态资源。Vite 默认会给文件名加上内容哈希,比如 index-a1b2c3.js,这意味着每次内容变化文件名都会变,非常适合配置强缓存。需要留意的一个配置是 base:如果项目部署在域名根路径,默认的 / 没问题;如果部署在子路径下,比如 https://ipipp.com/app/,就必须在 vite.config.js 里设置 base: '/app/',否则会出现资源 404、页面白屏的问题。

另一个常见需求是环境变量。开发环境和生产环境的接口地址往往不同,Vite 约定使用 .env.production 文件存放生产配置,变量必须以 VITE_ 开头才会被注入到客户端代码中,例如 VITE_API_BASE=https://api.ipipp.com。打包前确认好这些变量,能避免上线后接口请求打到错误地址的尴尬。

Vultr 服务器的选购初始化与安全加固

登录 Vultr 控制台后,点击 Deploy New Server,选择 Cloud Compute 共享型实例即可满足中小型前端项目的需求,一个月几美元的套餐跑 Nginx 绰绰有余。地域选择上建议靠近目标用户,亚太用户可以选东京、新加坡节点,欧美用户选法兰克福或纽约。系统推荐 Ubuntu 22.04 LTS,软件源丰富,社区文档也多。

创建完成后 Vultr 会给出 root 密码和公网 IP,先用 SSH 连上服务器:

ssh root@你的服务器IP
# 首次连接会提示指纹确认,输入 yes 即可

拿到的裸机不能直接用,先做三件事:更新软件源、创建普通用户、配置密钥登录。密码登录容易遭受暴力破解,建议生成 SSH 密钥对后把公钥写入服务器的 ~/.ssh/authorized_keys,再在 /etc/ssh/sshd_config 中把 PasswordAuthentication 设为 no,最后用 ufw 开放 80、443 和 22 端口。这些步骤虽然琐碎,却是服务器安全的基本盘,公网上的机器每天都会被大量扫描,不做加固等于裸奔。

Nginx 托管静态资源与 history 路由处理

在服务器上安装 Nginx 后,把本地打包好的 dist 目录上传上去。可以用 scp 直接传,也可以用 rsync 增量同步:

# 本地执行,将 dist 内容同步到服务器
rsync -avz --delete dist/ user@服务器IP:/var/www/vue-app/

接着编辑 Nginx 站点配置,核心是把请求指向静态目录。这里有一个 Vue 3 项目最常见的坑:如果路由使用了 history 模式,用户在子路由页面直接刷新会返回 404,因为服务器上并不存在对应路径的物理文件。解决办法是加一条 try_files 回退规则,把所有找不到的路径都重定向到 index.html,交给前端路由处理:

server {
    listen 80;
    server_name ipipp.com;

    root /var/www/vue-app;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # 带哈希的静态资源设置长缓存
    location /assets/ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # 开启 gzip 压缩
    gzip on;
    gzip_types text/css application/javascript application/json image/svg+xml;
    gzip_min_length 1024;
}

配置完成后执行 nginx -t 检查语法,再用 systemctl reload nginx 平滑重载。gzip 对文本类资源的压缩率通常能达到百分之六七十,配合一年期的强缓存策略,二次访问的加载速度会有明显提升。要注意 index.html 本身不要设置长缓存,否则发版后用户拿到的还是旧页面。

HTTPS 证书与自动化部署的进阶实践

现在的主流浏览器都会对纯 HTTP 站点标记不安全,上线后申请证书是必做项。Certbot 提供了免费 的 Let's Encrypt 证书,且支持自动续期,一条命令就能完成 Nginx 的证书配置:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d ipipp.com -d www.ipipp.com
# certbot 会自动修改 nginx 配置并添加定时续期任务

如果后端接口部署在其他域名,还需要在 Vue 项目中处理跨域。生产环境推荐由 Nginx 做反向代理,把 /api 路径转发到后端服务,这样前端请求同源地址,无需额外的 CORS 配置,也更安全。

最后聊聊自动化。每次发版手动执行 build 再 rsync 未免繁琐,可以写一个简单的部署脚本,把构建、同步、重载串起来;进阶一点可以在服务器上装 Git,用 webhook 监听仓库推送事件后自动拉取构建。如果团队使用 CI 工具,还可以把 Vultr 服务器配置为部署目标,实现提交代码即自动发布。对于这套流程,你只需要保证 dist 产物的稳定性和 Nginx 配置的正确性,剩下的交给脚本即可。至此,一个 Vue 3 工程化项目就从本地开发环境完整迁移到了 Vultr 全球云服务器上,用户无论身处哪个大洲,都能通过 CDN 级别的节点快速访问你的应用。

Vue 3VultrNginx 部署修改时间:2026-09-13 09:44:29

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260913/55920.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。