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
相关产品推荐
相关产品推荐

