运行 作为服务时无法连接到我的 NodeJS 站点。我找不到任何错误消息
Can't connect to my NodeJS site when run as service. There are no error messages that I can find
我构建了一个基本的 NodeJS 博客应用程序,并将其托管在 Centos7 Minimal VPS(我相信是 OpenVZ)上。
从我的 git 存储库克隆后,我已经安装了合适的 Node 版本 MongoDB 和 "npm install" 的 npm 依赖项。
我可以从命令行手动构建和启动站点而不会出现任何错误,并通过 Web 浏览器访问该站点以验证一切正常。
但是,当我尝试使用 'sudo systemctl blog start' 启动站点时,似乎没有任何反应。 'stytemctl blog status' 显示绿色 "active (running)" 文本,但我无法通过浏览器连接。
[bbauer@blog Blog-Project]$ sudo systemctl status blog
● blog.service - blog nodejs server
Loaded: loaded (/etc/systemd/system/blog.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2016-07-20 15:56:31 EST; 2min 52s ago
Main PID: 12451 (server.js)
CGroup: /system.slice/blog.service
└─12451 /usr/bin/env /var/www/Blog-Project/server.js
这是我来自 /etc/systemd/system/blog.service
的 .service 文件
[Unit]
Description=blog nodejs server
After=network.target
[Service]
ExecStart=/var/www/Blog-Project/server.js
Restart=always
User=root
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/Blog-Project
[Install]
WantedBy=multi-user.target
我用这个命令使 server.js 可执行:
chmod +x server.js
谁能想到我可能遗漏了什么?
根据要求 server.js 的内容:
#!/usr/bin/env
// Require packages
var express = require('express');
var cors = require('cors');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var stormpath = require('express-stormpath');
var app = express();
// Middleware
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(express.static(__dirname + '/views'));
app.use('/images', express.static(__dirname + '/images'));
...... etc., etc...
您必须在 server.js 中指定它应该 运行 在 node.js 下,像这样:
#!/bin/env node
或者像节点脚本一样执行它,使用脚本名称作为命令行节点的参数。
我构建了一个基本的 NodeJS 博客应用程序,并将其托管在 Centos7 Minimal VPS(我相信是 OpenVZ)上。
从我的 git 存储库克隆后,我已经安装了合适的 Node 版本 MongoDB 和 "npm install" 的 npm 依赖项。
我可以从命令行手动构建和启动站点而不会出现任何错误,并通过 Web 浏览器访问该站点以验证一切正常。
但是,当我尝试使用 'sudo systemctl blog start' 启动站点时,似乎没有任何反应。 'stytemctl blog status' 显示绿色 "active (running)" 文本,但我无法通过浏览器连接。
[bbauer@blog Blog-Project]$ sudo systemctl status blog
● blog.service - blog nodejs server
Loaded: loaded (/etc/systemd/system/blog.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2016-07-20 15:56:31 EST; 2min 52s ago
Main PID: 12451 (server.js)
CGroup: /system.slice/blog.service
└─12451 /usr/bin/env /var/www/Blog-Project/server.js
这是我来自 /etc/systemd/system/blog.service
的 .service 文件[Unit]
Description=blog nodejs server
After=network.target
[Service]
ExecStart=/var/www/Blog-Project/server.js
Restart=always
User=root
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/Blog-Project
[Install]
WantedBy=multi-user.target
我用这个命令使 server.js 可执行:
chmod +x server.js
谁能想到我可能遗漏了什么?
根据要求 server.js 的内容:
#!/usr/bin/env
// Require packages
var express = require('express');
var cors = require('cors');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var stormpath = require('express-stormpath');
var app = express();
// Middleware
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(express.static(__dirname + '/views'));
app.use('/images', express.static(__dirname + '/images'));
...... etc., etc...
您必须在 server.js 中指定它应该 运行 在 node.js 下,像这样:
#!/bin/env node
或者像节点脚本一样执行它,使用脚本名称作为命令行节点的参数。