我最近在我的digitalocean服务器上部署了一个react静态应用。我所做的只是在Nginx配置文件中显示构建文件的根目录。它运行得很好。
现在我正试图在我的服务器上托管一个NextJS应用程序。我展示了根目录root /var/www/html/NextJSTestApp/.next
,我甚至尝试了root /var/www/html/NextJSTestApp/node_modules
当我运行npm run build
时,构建完成,然后我试图到达我的服务器,它显示"502坏网关">
但是当我运行npm start
网站形象应用程序显示
我怎么做才能一直运行它?我用的是digitalocean液滴
当NextJS作为一个节点应用程序运行时(例如下一次启动),你需要设置nginx使用proxy_pass
而不是指向根目录(省略根指令)。
示例nginx location block
server {
server_name example.com;
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
ssl_certificate /etc/nginx/certs/fullchain.cer;
ssl_certificate_key /etc/nginx/certs/fullchain.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8000; //your next app
}
}
首先,一旦关闭终端或离开bash,手动运行next start
不会使进程持久化。为了让它在后台运行,你可以使用&&在启动命令结束时(下一个启动&&)或创建一个systemd文件(推荐)。
第二,一旦你完成了nextJs在后台运行,你可以继续设置一个代理传递到你的web服务器(nginx, apache…)
我找到了这个解决方案。为了运行这个项目背景,我使用了pm2。
sudo npm install -g pm2
然后转到我的项目文件夹cd website/
pm2 start --name=website npm -- start
thenpm2 startup systemd
我遵循这个教程