部署网站到腾讯云服务器

2026-04-05
服务器

如何部署Nuxt应用到腾讯云服务器

一、前置准备

部署前需准备好以下资源,避免中途中断操作:

  1. 腾讯云服务器:推荐配置(2核2G及以上,操作系统选择 CentOS 7.6+ 或 Ubuntu 20.04+,本文以 CentOS 7.6 为例),已购买并完成初始化(重置密码、记住公网IP);

  2. Nuxt项目:本地已开发完成,确保能正常运行(执行 npm run dev 无报错);

  3. 域名:已注册(可在腾讯云域名注册平台购买),并完成实名认证(腾讯云要求域名必须实名认证才能解析);

  4. 工具:本地电脑安装 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用户、密码),按以下步骤操作:

  1. 在服务器 /var/www/ 目录下,创建项目目录(如 nuxt\-app),命令:mkdir \-p /var/www/nuxt\-app

  2. 将本地打包好的 release\.tar\.gz(或 .output 目录、ecosystem.config.cjs 文件)上传到 /var/www/nuxt\-app 目录;

  3. 回到 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. 添加域名解析记录

点击域名名称,进入记录管理页面,点击“新手快速解析”,选择“网站解析”,按以下配置填写:

  1. 业务场景:选择“网站域名解析”;

  2. 网站域名:可选择主机记录为“www”(如 www.yourdomain.com)和“@”(如 yourdomain.com),支持同时添加;

  3. 网站IP:输入腾讯云服务器的公网IP;

  4. 点击“确定”,系统会自动添加两条A记录(将www和@域名指向服务器IP)。

补充:若域名在其他平台注册,需先将域名的DNS服务器修改为腾讯云DNS服务器(控制台会提示具体DNS地址),修改后需等待0-48小时生效。

3. 验证域名解析是否生效

解析添加完成后,等待10-30分钟(解析生效时间),打开本地浏览器,输入域名(如 http://www.yourdomain.com),若能看到Nuxt应用页面,说明域名关联成功。

七、第六步:配置SSL证书(可选,推荐)

为了提升网站安全性,推荐配置SSL证书,实现HTTPS访问(浏览器显示小锁图标),腾讯云提供免费SSL证书,步骤如下:

  1. 登录腾讯云 SSL证书控制台,点击“申请免费证书”;

  2. 选择“免费版(DV)”,填写域名(如 yourdomain.com、www.yourdomain.com),完成域名验证(自动验证,无需手动操作);

  3. 证书申请通过后,下载证书(选择Nginx版本),解压后得到两个文件:.pem(公钥)和.key(私钥);

  4. 在服务器上创建证书目录:mkdir \-p /etc/nginx/ssl,将下载的两个证书文件上传到该目录;

  5. 修改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协议。

八、常见问题排查

  1. 访问公网IP/域名提示“无法访问”:检查服务器防火墙是否开放80、443、3000端口,腾讯云控制台需添加安全组规则(放行这三个端口);

  2. Nginx启动失败:执行 nginx \-t 查看配置错误,重点检查域名、文件路径是否填写正确;

  3. Nuxt应用启动失败:执行 pm2 logs 查看报错日志,常见原因是Node版本过低、依赖未安装,可重新安装依赖(npm install);

  4. 域名解析生效慢:耐心等待,最长不超过48小时,可通过 ping 域名 查看是否指向服务器公网IP;

  5. Nginx出现502错误:检查Nuxt应用是否正常运行(pm2 status),若应用未启动,执行 pm2 start nuxt\-app 重启。

九、总结

部署核心流程:服务器环境配置(Node+Nginx+PM2)→ Nuxt项目打包上传 → Nginx反向代理配置 → 域名解析关联 → (可选)SSL证书配置。整个流程均基于腾讯云服务器,所有代码片段可直接复制执行,新手按步骤操作即可完成部署。

后续维护:若修改了Nuxt项目,需重新本地打包、上传到服务器,执行 pm2 restart nuxt\-app 重启应用;若修改了Nginx配置,需执行 systemctl restart nginx 生效。