You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NUXT+PM2+SSL Nginx部署后执行npm run build站点不更新问题

部署故障修复方案

核心问题排查与修复项

1. 部署脚本逻辑错误

你提供的deployApi.sh存在两处致命逻辑错误,是站点未更新的核心原因:

  • PM2启动命令错误:pm2 start -- --port 3001未指定进程入口,且如果已有进程在3001端口运行,start命令不会替换原有进程,旧版本服务会一直运行。
    修复后的脚本参考:
    root="/var/www/example.com/html"
    cd $root || exit 1
    echo -e '\e[1m\e[34mPulling code from remote..\e[0m\n'
    git pull https://exampleuser@bitbucket.org/exampleproject/examplerepo.git
    echo -e '\e[1m\e[34m\nInstalling required packages..\e[0m\n'
    # 新增依赖安装步骤,生产环境用npm ci保证依赖版本和开发环境一致
    npm ci --only=production
    echo -e '\e[1m\e[34m\nBuilding project..\e[0m\n'
    npm run build
    echo -e '\e[1m\e[34m\nRestarting service..\e[0m\n'
    # 优先重启已有PM2进程,不存在则新建,指定进程名避免重复启动
    pm2 describe nuxt-site > /dev/null
    if [ $? -eq 0 ]; then
      pm2 restart nuxt-site
    else
      pm2 start npm --name "nuxt-site" -- run start -- --port 3001
    fi
    # 保存PM2进程列表,服务器重启后自动恢复
    pm2 save
    echo -e '\n\e[1m\e[34mDeployment successful\e[0m'
    
  • 缺失依赖安装步骤:原脚本没有依赖安装逻辑,若新代码修改了依赖包,会导致构建产物异常,甚至进程启动失败。

2. Nginx缓存规则优化

你当前Nginx配置给所有静态资源设置了24小时强制缓存,用户浏览器会缓存旧版本资源,即使服务端更新也不会主动拉取新资源。
优化后的静态资源缓存规则如下:

location ~* \.((ico|css|js|gif|jpeg|jpg|png|woff|ttf|otf|svg|woff2|webp))$ {
    # NUXT构建的带hash资源永久缓存,无需重复校验
    if ($request_uri ~* "\.[0-9a-f]{8,}\.(js|css|png|jpg|gif)$") {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    # 普通资源设置24小时缓存,开启协商校验,资源更新后立即生效
    expires 24h;
    add_header Cache-Control "private, must-revalidate";
    etag on;
}

修改后执行nginx -s reload生效。

3. Nginx跳转规则修复

你当前www域名的443配置中,跳转目标为http://example.com$request_uri,会导致用户多经历一次HTTP到HTTPS的跳转,修改为return 301 https://example.com$request_uri;即可。


内容的提问来源于stack exchange,提问作者Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:24:02