Next.js实现零停机部署



我有一个Next.js应用程序,我通过运行来部署它

next build
next start

在服务器上。

在构建过程中,它会清除.next构建文件夹中的文件,因此在几秒钟内,如果我尝试使用该应用程序,它会出现错误,因为文件不存在:

MissingStaticPage [Error]: Failed to load static file for page: /reporting/letter_exhibits ENOENT: no such file or directory, open '/home/polson/projects/JRP-Web-Tools/.next/server/pages/reporting/letter_exhibits.html'

一旦我等待构建完成,web应用程序就会按预期工作。

有没有一种方法可以改变构建过程,从而在构建过程中不会出现停机?

您可以使用这个简单的策略,尽管它不能保证"零";停机时间,但这将比目前的体验要好得多。基本上,您将项目构建到temp文件夹中,然后删除现有的.next文件夹,并将temp文件夹重命名为.next

  1. 将其添加到next.config.js文件中:
distDir: process.env.BUILD_DIR || '.next',
  1. 创建一个包含以下内容的脚本:
echo "Deployment starting..."
# install dependencies if any
yarn || exit
# set build folder to `temp` and build
BUILD_DIR=temp yarn build || exit
if [ ! -d "temp" ]; then
echo '33[31m temp directory does not exist!33[0m'  
exit 1;
fi
# delete `.next` folder
rm -rf .next
# rename `temp` folder to `.next`
mv temp .next
# run next start
next start
echo "Deployment done."

不过,您可能应该使用像pm2这样的流程管理器来进行部署。

最新更新