我目前有一个服务器,其中包含一个 NextJS 项目,在端口 4000 上运行。
scripts
package.json文件的部分内容如下:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start -p 4000"
},
当我在 SSH 会话中运行时npm run start
,项目运行良好,但自然我必须将 Node 作为服务运行,以便在关闭 SSH 会话后项目仍能继续运行。
我关注了官方文档托管服务提供商给出了以下单元文件示例
[Unit]
Description={服务名称} # 在此处输入服务名称。此为必填项,但不会影响功能
[Service]
Restart=always
Environment=NODE_VERSION={所需版本} # 在此处指定要使用的 Node 版本。请确保已使用“nvm install {所需版本}”预先安装
WorkingDirectory=%h/
ExecStart=/bin/bash -c "exec $HOME/.nvm/nvm-exec {启动 Node 脚本的命令}" # 此命令取决于项目。例如,“npm run start”、“npm run serve”甚至“node server.js”正在运行
[Install]
WantedBy=default.target
我最终得到了一个node.service
包含以下内容的文件:
[Unit]
Description=node
[Service]
Restart=always
Environment=NODE_VERSION=16.15.1 NODE_ENV=production PORT=4000
WorkingDirectory=$HOME/sites/croockys.ch
ExecStart=/bin/bash -c "exec $HOME/.nvm/nvm-exec npm run start"
[Install]
WantedBy=default.target
我的项目位于$HOME/sites/croockys.ch
我按顺序运行了以下命令:
systemctl --user daemon-reload
systemctl --用户启用节点
systemctl --用户启动节点
并且没有遇到任何错误,但网站不工作,我得到了一个503 Service Unavailable
。
我猜我的单元文件有问题。
答案1
我愿意承认这是一个愚蠢的问题,但 $HOME/sites/croockys.ch 实际上是一个目录吗?.ch 看起来应该是一个文件扩展名,而不是实际的目录,在我看来它应该在 $HOME/sites 中。还请记住,运行这个程序的用户可能不会是您正在创建这个程序的同一个开发用户 - 最好将 $HOME 扩展为它真正应该的完整路径:/opt/home/place/where/code/site 或任何需要的路径以正确启动该过程。