我 运行 一个 npm 运行 构建,将它放在 nodejs express.static 上,pm2 启动应用程序但无法获取 '/'
I ran a npm run build, placed it on nodejs express.static, pm2 start app but Cannot GET '/'
我想在 AWS EC2 的一个 Linux 机器上托管 2 个节点应用程序。我可以在哪里 运行 开发环境和暂存环境。我注意到我将不得不在两个应用程序上使用不同的端口,但这不是我面临的问题。
首先使用一直在我启动它的以前的盒子上工作的暂存端,确保它在尝试不同的端口之前工作。
我有一个使用 express 的后端 node.js 和一个使用 Vue CLI 构建的静态网页。 Express 应用程序将使用 app.use(express.static('static'));
托管静态网页的位置。然后使用 pm2 start /directoryToDist/main.js
继续在 PM2 上托管它。守护程序启动后,我执行了 curl http://localhost:80/
,但它 return 是 Cannot GET /
.
的错误 HTML 页
当我在两个应用程序上执行 npm install
、npm rebuild
和 npm build
时。确保正确构建 dist
文件夹。然后做了一个sudo -i
和pm2 start /directoryToDist/main.js
。确保节点应用程序是 运行ning 我做了一个 ps -ef | grep js
来表明它是 运行ning。 pm2 安装的应用程序没有重新启动,一切都很顺利 运行ning。之后我做了 curl http://localhost/
它做了 return Cannot GET /
.
我在之前的盒子中对一个工作应用程序进行了 zip 文件传输,并进行了必要的 npm 安装和 运行 它。期望它像以前的盒子一样工作,但事实并非如此。显示 Cannot GET /
.
的相同错误
节点 js 构建脚本
"build": "rimraf dist/ && babel ./ --out-dir dist/ --ignore ./node_modules,./babelrc,./package.json,/.npm-debug-log,./static/* --copy-files"
Vue js 构建脚本
"build": "node build/build.js"
重建我使用的脚本
cd api
npm run build
cd ..
cd pwa
npm run build
cd ..
sudo rm -rf api/dist/static
sudo mkdir -p api/dist/static
sudo cp -r pwa/dist/* api/dist/static/
sudo chown -R ubuntu.ubuntu *
如果您需要查看更多内容,请告诉我
实际结果是在为特定端口提供域之前在 curl 上提供适当的 200
消息。
找到了有效的解决方案。
Pm2 没有指向当前工作目录。 sudo -i
然后 运行 它 $ pm2 start /home/user/directory
将在 directory
文件夹而不是实现的 dist
文件夹中查找模块路由。
所以通过解决这个问题。必须首先遍历目录并在那里启动 pm2 启动。 $ cd /home/user/directory/dist/
$ pm2 start main.js
。这为节点应用程序提供了良好且稳定的服务。
或者你可以用path
找到它:
import path from 'path'
app.use(
'/some-url',
express.static(path.join(__dirname, '/some/path/on/server'))
)
如果您知道服务器上的确切路径。
相对路径也适用:
app.use(
'/some-url',
express.static(path.join(__dirname, '../../some/relative/on/server'))
)
我想在 AWS EC2 的一个 Linux 机器上托管 2 个节点应用程序。我可以在哪里 运行 开发环境和暂存环境。我注意到我将不得不在两个应用程序上使用不同的端口,但这不是我面临的问题。
首先使用一直在我启动它的以前的盒子上工作的暂存端,确保它在尝试不同的端口之前工作。
我有一个使用 express 的后端 node.js 和一个使用 Vue CLI 构建的静态网页。 Express 应用程序将使用 app.use(express.static('static'));
托管静态网页的位置。然后使用 pm2 start /directoryToDist/main.js
继续在 PM2 上托管它。守护程序启动后,我执行了 curl http://localhost:80/
,但它 return 是 Cannot GET /
.
当我在两个应用程序上执行 npm install
、npm rebuild
和 npm build
时。确保正确构建 dist
文件夹。然后做了一个sudo -i
和pm2 start /directoryToDist/main.js
。确保节点应用程序是 运行ning 我做了一个 ps -ef | grep js
来表明它是 运行ning。 pm2 安装的应用程序没有重新启动,一切都很顺利 运行ning。之后我做了 curl http://localhost/
它做了 return Cannot GET /
.
我在之前的盒子中对一个工作应用程序进行了 zip 文件传输,并进行了必要的 npm 安装和 运行 它。期望它像以前的盒子一样工作,但事实并非如此。显示 Cannot GET /
.
节点 js 构建脚本
"build": "rimraf dist/ && babel ./ --out-dir dist/ --ignore ./node_modules,./babelrc,./package.json,/.npm-debug-log,./static/* --copy-files"
Vue js 构建脚本
"build": "node build/build.js"
重建我使用的脚本
cd api
npm run build
cd ..
cd pwa
npm run build
cd ..
sudo rm -rf api/dist/static
sudo mkdir -p api/dist/static
sudo cp -r pwa/dist/* api/dist/static/
sudo chown -R ubuntu.ubuntu *
如果您需要查看更多内容,请告诉我
实际结果是在为特定端口提供域之前在 curl 上提供适当的 200
消息。
找到了有效的解决方案。
Pm2 没有指向当前工作目录。 sudo -i
然后 运行 它 $ pm2 start /home/user/directory
将在 directory
文件夹而不是实现的 dist
文件夹中查找模块路由。
所以通过解决这个问题。必须首先遍历目录并在那里启动 pm2 启动。 $ cd /home/user/directory/dist/
$ pm2 start main.js
。这为节点应用程序提供了良好且稳定的服务。
或者你可以用path
找到它:
import path from 'path'
app.use(
'/some-url',
express.static(path.join(__dirname, '/some/path/on/server'))
)
如果您知道服务器上的确切路径。
相对路径也适用:
app.use(
'/some-url',
express.static(path.join(__dirname, '../../some/relative/on/server'))
)