如何部署Nuxt应用到腾讯云服务器
一、前置准备
部署前需准备好以下资源,避免中途中断操作:
-
腾讯云服务器:推荐配置(2核2G及以上,操作系统选择 CentOS 7.6+ 或 Ubuntu 20.04+,本文以 CentOS 7.6 为例),已购买并完成初始化(重置密码、记住公网IP);
-
Nuxt项目:本地已开发完成,确保能正常运行(执行
npm run dev无报错); -
域名:已注册(可在腾讯云域名注册平台购买),并完成实名认证(腾讯云要求域名必须实名认证才能解析);
-
工具:本地电脑安装 SSH 工具(如 Xshell、Putty)、文件传输工具(如 Xftp、FileZilla),用于连接服务器和上传项目文件。
补充:腾讯云服务器初始化后,建议先关闭防火墙或开放所需端口(80端口、443端口、3000端口),后续步骤会详细说明。
二、第一步:配置腾讯云服务器环境
服务器需安装 Node.js、Nginx、PM2(Node进程管理工具),三者缺一不可,按以下步骤依次安装,所有命令可直接复制执行。
1. 连接腾讯云服务器
打开 SSH 工具(以 Xshell 为例),输入服务器公网IP、用户名(默认 root)、密码(初始化时设置的密码),点击连接,成功后进入服务器命令行界面。
2. 安装 Node.js(Nuxt运行依赖)
Nuxt 3/4 强依赖高版本 Node.js(建议 ≥ 20.10.0),执行以下命令安装:
bash
# 1. 下载Node.js安装包(以v20.10.0为例,适配Nuxt 3/4)
wget https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.xz
# 2. 解压安装包
tar -xvf node-v20.10.0-linux-x64.tar.xz
# 3. 移动解压后的文件到/usr/local目录(方便全局调用)
mv node-v20.10.0-linux-x64 /usr/local/node
# 4. 配置环境变量,让全局能识别node和npm命令
echo "export PATH=$PATH:/usr/local/node/bin" >> /etc/profile
source /etc/profile
# 5. 验证安装是否成功(出现版本号即成功)
node -v # 应输出 v20.10.0
npm -v # 应输出对应版本号
3. 安装 Nginx(Web服务器,用于反向代理)
Nginx 用于接收客户端请求,反向代理到 Nuxt 应用(默认运行在3000端口),执行以下命令安装(CentOS 系统):
bash
# 1. 安装EPEL仓库(CentOS需先安装,Ubuntu可跳过)
sudo yum install epel-release -y
# 2. 在/etc/yum.repos.d/下创建nginx.repo文件,配置Nginx源
vi /etc/yum.repos.d/nginx.repo
# 3. 按i切换至编辑模式,写入以下内容(复制粘贴即可)
[nginx]
name = nginx repo
baseurl = https://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck = 0
enabled = 1
# 4. 按Esc,输入:wq,保存文件并返回
# 5. 安装Nginx
yum install -y nginx
# 6. 启动Nginx,并设置开机自启(避免服务器重启后Nginx失效)
systemctl start nginx
systemctl enable nginx
# 7. 验证Nginx是否安装成功
systemctl status nginx # 出现active (running)即成功
验证:打开本地浏览器,输入服务器公网IP(如 http://123.45.67.89),能看到Nginx默认欢迎页面,说明Nginx安装配置成功。
4. 安装 PM2(Node进程管理工具)
Nuxt应用运行后,需用PM2守护进程,避免关闭SSH后应用停止,执行以下命令安装:
bash
# 全局安装PM2
npm install -g pm2
# 验证安装(出现版本号即成功)
pm2 -v
三、第二步:打包并上传Nuxt项目到服务器
本地打包Nuxt项目,生成生产环境产物,再上传到腾讯云服务器指定目录,步骤如下:
1. 本地打包Nuxt项目
打开本地Nuxt项目根目录,执行打包命令(Nuxt 3/4 通用):
bash
# 1. 安装项目依赖(若未安装)
npm install
# 2. 打包生产环境产物(生成.output目录,核心产物)
npm run build
# 3. (可选)压缩打包产物,减少上传时间(Windows需安装tar工具)
tar -czf release.tar.gz .output ecosystem.config.cjs
说明:若项目根目录没有 ecosystem\.config\.cjs 文件,需手动创建,用于PM2启动配置,内容如下:
javascript
// ecosystem.config.cjs(Nuxt 3/4 通用)
module.exports = {
apps: [{
name: 'nuxt-app', // 应用名称(自定义)
port: 3000, // Nuxt运行端口(默认3000,可修改)
host: '127.0.0.1',// 仅本地访问,通过Nginx反向代理暴露
script: './.output/server/index.mjs', // Nuxt打包后的入口文件
exec_mode: 'cluster', // 开启集群模式,提升性能
instances: 'max', // 根据CPU核心数启动实例
env: {
NODE_ENV: 'production', // 生产环境
NUXT_PUBLIC_API_BASE: 'https://api.yourdomain.com' // 后端接口地址(替换为自己的)
}
}]
}
2. 上传项目到服务器
使用文件传输工具(如 Xftp),连接服务器(公网IP、root用户、密码),按以下步骤操作:
-
在服务器
/var/www/目录下,创建项目目录(如nuxt\-app),命令:mkdir \-p /var/www/nuxt\-app; -
将本地打包好的
release\.tar\.gz(或 .output 目录、ecosystem.config.cjs 文件)上传到/var/www/nuxt\-app目录; -
回到 SSH 命令行,进入项目目录并解压(若上传的是压缩包):
bash
# 进入项目目录
cd /var/www/nuxt-app
# 解压压缩包(若上传的是release.tar.gz)
tar -xzf release.tar.gz
# 解压完成后,删除压缩包(可选,节省空间)
rm -rf release.tar.gz
四、第三步:配置Nginx反向代理(关键)
Nginx 需配置反向代理,将公网IP或域名的请求,转发到 Nuxt 应用的 3000 端口,同时处理静态资源,提升访问速度。
1. 创建Nginx配置文件
不建议修改Nginx默认配置文件,新建独立配置文件更易维护,执行以下命令:
bash
# 进入Nginx配置文件目录
cd /etc/nginx/conf.d/
# 新建Nuxt应用的配置文件(文件名自定义,如nuxt.conf)
vi nuxt.conf
2. 编写Nginx配置(复制粘贴,修改对应内容)
按 i 进入编辑模式,粘贴以下配置,替换 yourdomain\.com 为自己的域名(暂时没有域名可先填服务器公网IP):
nginx
# 定义Nuxt应用的上游服务(指向Nuxt运行地址)
upstream nuxt_backend {
server 127.0.0.1:3000;
keepalive 64; # 保持连接,提升性能
}
server {
listen 80; # 监听80端口(HTTP协议)
server_name yourdomain.com; # 替换为你的域名或服务器公网IP
charset utf-8;
# 1. 静态资源直接由Nginx响应(提升访问速度)
# 对应Nuxt打包后的JS/CSS等静态资源
location /_nuxt/ {
alias /var/www/nuxt-app/.output/public/_nuxt/;
expires 365d; # 静态资源缓存1年
add_header Cache-Control "public, max-age=31536000, immutable";
access_log off; # 关闭静态资源访问日志
}
# 2. 主程序入口,反向代理到Nuxt应用
location / {
root /var/www/nuxt-app/.output/public; # 静态文件根目录
try_files $uri $uri/ @ssr; # 先尝试读取静态文件,失败则转发到SSR
}
# 3. SSR渲染出口,反向代理到Nuxt服务
location @ssr {
proxy_pass http://nuxt_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
client_max_body_size 20m; # 限制上传文件大小
}
# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
配置说明:该配置实现了静态资源缓存、反向代理、错误处理,适配Nuxt SSR(服务端渲染)模式,性能更优。
3. 验证Nginx配置并重启
配置完成后,需验证配置是否有误,再重启Nginx使配置生效:
bash
# 验证Nginx配置(无报错即正常)
nginx -t
# 重启Nginx(使配置生效)
systemctl restart nginx
五、第四步:启动Nuxt应用(PM2守护)
进入项目目录,使用PM2启动Nuxt应用,确保应用持续运行:
bash
# 进入项目目录
cd /var/www/nuxt-app
# 启动Nuxt应用(根据ecosystem.config.cjs配置启动)
pm2 start ecosystem.config.cjs
# 设置PM2开机自启(避免服务器重启后应用停止)
pm2 startup
pm2 save
# 查看应用运行状态(出现online即正常)
pm2 status
常用PM2命令(后续维护用):
bash
pm2 restart nuxt-app # 重启应用
pm2 stop nuxt-app # 停止应用
pm2 logs # 查看应用运行日志(排查报错)
六、第五步:域名关联与解析(腾讯云)
若已有域名,需在腾讯云控制台完成域名解析,将域名指向服务器公网IP,实现通过域名访问网站,步骤如下:
1. 登录腾讯云域名解析控制台
1. 打开腾讯云官网,登录账号,进入 云解析 DNS 控制台;
2. 在“我的解析”页面,若域名已在腾讯云注册,会自动显示;若域名在其他平台注册,点击“添加域名”,输入域名后点击确定。
2. 添加域名解析记录
点击域名名称,进入记录管理页面,点击“新手快速解析”,选择“网站解析”,按以下配置填写:
-
业务场景:选择“网站域名解析”;
-
网站域名:可选择主机记录为“www”(如 www.yourdomain.com)和“@”(如 yourdomain.com),支持同时添加;
-
网站IP:输入腾讯云服务器的公网IP;
-
点击“确定”,系统会自动添加两条A记录(将www和@域名指向服务器IP)。
补充:若域名在其他平台注册,需先将域名的DNS服务器修改为腾讯云DNS服务器(控制台会提示具体DNS地址),修改后需等待0-48小时生效。
3. 验证域名解析是否生效
解析添加完成后,等待10-30分钟(解析生效时间),打开本地浏览器,输入域名(如 http://www.yourdomain.com),若能看到Nuxt应用页面,说明域名关联成功。
七、第六步:配置SSL证书(可选,推荐)
为了提升网站安全性,推荐配置SSL证书,实现HTTPS访问(浏览器显示小锁图标),腾讯云提供免费SSL证书,步骤如下:
-
登录腾讯云 SSL证书控制台,点击“申请免费证书”;
-
选择“免费版(DV)”,填写域名(如 yourdomain.com、www.yourdomain.com),完成域名验证(自动验证,无需手动操作);
-
证书申请通过后,下载证书(选择Nginx版本),解压后得到两个文件:.pem(公钥)和.key(私钥);
-
在服务器上创建证书目录:
mkdir \-p /etc/nginx/ssl,将下载的两个证书文件上传到该目录; -
修改Nginx配置文件(nuxt.conf),添加HTTPS配置(替换证书路径和域名):
nginx
# 新增HTTPS服务器配置
server {
listen 443 ssl http2; # 监听443端口(HTTPS协议)
server_name yourdomain.com www.yourdomain.com; # 你的域名
# SSL证书配置
ssl_certificate /etc/nginx/ssl/yourdomain.com.pem; # 公钥路径
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key; # 私钥路径
# SSL优化配置(可选,提升安全性)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# 静态资源配置(与HTTP配置一致)
location /_nuxt/ {
alias /var/www/nuxt-app/.output/public/_nuxt/;
expires 365d;
add_header Cache-Control "public, max-age=31536000, immutable";
access_log off;
}
# 主程序入口(与HTTP配置一致)
location / {
root /var/www/nuxt-app/.output/public;
try_files $uri $uri/ @ssr;
}
# SSR渲染出口(与HTTP配置一致)
location @ssr {
proxy_pass http://nuxt_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
client_max_body_size 20m;
}
}
# 强制HTTP跳转到HTTPS(可选,推荐)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
配置完成后,执行 nginx \-t 验证配置,再执行 systemctl restart nginx 重启Nginx,此时访问域名会自动跳转到HTTPS协议。
八、常见问题排查
-
访问公网IP/域名提示“无法访问”:检查服务器防火墙是否开放80、443、3000端口,腾讯云控制台需添加安全组规则(放行这三个端口);
-
Nginx启动失败:执行
nginx \-t查看配置错误,重点检查域名、文件路径是否填写正确; -
Nuxt应用启动失败:执行
pm2 logs查看报错日志,常见原因是Node版本过低、依赖未安装,可重新安装依赖(npm install); -
域名解析生效慢:耐心等待,最长不超过48小时,可通过
ping 域名查看是否指向服务器公网IP; -
Nginx出现502错误:检查Nuxt应用是否正常运行(
pm2 status),若应用未启动,执行pm2 start nuxt\-app重启。
九、总结
部署核心流程:服务器环境配置(Node+Nginx+PM2)→ Nuxt项目打包上传 → Nginx反向代理配置 → 域名解析关联 → (可选)SSL证书配置。整个流程均基于腾讯云服务器,所有代码片段可直接复制执行,新手按步骤操作即可完成部署。
后续维护:若修改了Nuxt项目,需重新本地打包、上传到服务器,执行 pm2 restart nuxt\-app 重启应用;若修改了Nginx配置,需执行 systemctl restart nginx 生效。