如何在 Vps 上正确部署 nodejs 应用程序?

How to deploy correctly nodejs app on Vps?

我在 VPS 上部署了我的 NodeJs(和 Express)应用程序(主机是 OVH - VPS 在 Debian 10 上)。

我的应用程序在我的本地主机上运行完美,但现在在我的 vps 上,这是我面临的问题:

1 - 当我尝试执行 npm start 时,我的 vps 出现错误:(已解决)

解决方案:我只是在我的 package.json 脚本中忘记了:“node server.js” 我只是在写“server.js”。

sh: 1: server.js: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! myapplication@1.0.0 start: `server.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the myapplication@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-03-18T10_06_42_146Z-debug.log

当我查看我的日志时,我得到的是:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'start' ]
2 info using npm@6.14.16
3 info using node@v14.19.0
4 verbose config Skipping project config: /root/.npmrc. (matches userconfig)
5 verbose run-script [ 'prestart', 'start', 'poststart' ]
6 info lifecycle myapplication@1.0.0~prestart: myapplication@1.0.0
7 info lifecycle myapplication@1.0.0~start: myapplication@1.0.0
8 verbose lifecycle myapplication@1.0.0~start: unsafe-perm in lifecycle true
9 verbose lifecycle myapplication@1.0.0~start: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/root/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
10 verbose lifecycle myapplication@1.0.0~start: CWD: /root
11 silly lifecycle myapplication@1.0.0~start: Args: [ '-c', 'server.js' ]
12 info lifecycle myapplication@1.0.0~start: Failed to exec start script
13 verbose stack Error: myapplication@1.0.0 start: `server.js`
13 verbose stack spawn ENOENT
13 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18)
13 verbose stack     at ChildProcess.emit (events.js:400:28)
13 verbose stack     at maybeClose (internal/child_process.js:1058:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5)
14 verbose pkgid myapplication@1.0.0
15 verbose cwd /root
16 verbose Linux 4.19.0-18-cloud-amd64
17 verbose argv "/usr/bin/node" "/usr/bin/npm" "start"
18 verbose node v14.19.0
19 verbose npm  v6.14.16
20 error code ELIFECYCLE
21 error syscall spawn
22 error file sh
23 error errno ENOENT
24 error myapplication@1.0.0 start: `server.js`
24 error spawn ENOENT
25 error Failed at the myapplication@1.0.0 start script.
25 error This is probably not a problem with npm. There is likely additional logging output above.
26 verbose exit [ 1, true ]

但它在我 运行 命令时有效:node server.js

2 - 我域中的端口

关于端口,我不想在我的应用程序的 url 中通知端口(例如:domain.com:3000 -> domain.com)

因为当我转到 domain.com:3000 时它工作正常但没有端口什么也没有发生。

我试图将端口 80(用于 http)或 443(用于 https)放入我的 env 文件中,但是当我这样做时,我尝试转到我的应用程序,然后发生了这种情况:

解决方案:NGINX

3 - 当我退出 powershell

时让我的应用 运行

最后一点,当我退出 powershell 时,我的应用程序断开连接并且我无法通过网络浏览器访问它(当您希望它 24/7 在线时这没有用)

如果你需要帮助我,我可以为你提供更多信息。

解决方法:PM2

这是我按照正确操作的教程! (Traversy Media 的 YT 频道教程)

https://youtu.be/oykl1Ih9pMg