首先,请原谅我对 Joyent 的 smartmachine 实例缺乏了解。我正在为这种情况运行 NodeJS 的免费开发层 smartmachine 实例。
我正在[path]/server/public/
通过http-server在文件系统上运行一个网站,并且我想同时在 80 端口上运行一个Ghost博客。[path]/server/public/blog/
这可能吗?我将如何实现它?
首先,请原谅我对 Joyent 的 smartmachine 实例缺乏了解。我正在为这种情况运行 NodeJS 的免费开发层 smartmachine 实例。
我正在[path]/server/public/
通过http-server在文件系统上运行一个网站,并且我想同时在 80 端口上运行一个Ghost博客。[path]/server/public/blog/
这可能吗?我将如何实现它?
使用 express 设置一个瘦包装器可能是一个很好的解决方案(正如 Paul 建议的那样),但如果您以一个包含大量“不同服务”的大型应用程序结束,则可能会变得一团糟。
相反,我会在我所有的服务之上使用代理(例如 NGINX)。
有了这个解决方案,如果一个服务失败了,其余的都没有,因为它们是解耦的。
您可以在端口 80 上侦听并在内部代理每个服务:端口。
就像是:
0.0.0.0:80 ---> Proxy
└──path: / ─── localhost:3000 (Main Web)
└──path: /blog ─── localhost:4000 (Ghost)
...
如果您的其他网站是express
基于网站的网站,最简单的方法可能是将您的 ghost 应用程序包含在同一源代码树中(可能在子文件夹中)。Express 应用程序可以作为中间件安装到其他 Express 应用程序,因此您可以添加到主站点的路由,例如:
var ghost = require('./path/to/ghost');
app.use('/blog', ghost);
假设您已遵循https://github.com/tryghost/Ghost中的“从 zip 安装(对于博客作者最快和最佳)”,并且您正在使用 http-server 从 /public/ 提供静态内容。
我的解决方案是使用 Ghost 的 Express 服务器来提供您的内容:
下载 Ghost.zip 并在以下位置解压缩[path]/server/
打开 Ghost 的 config.js 文件并将开发中的 url 从http://localhost:2368更改为http://localhost:2368/blog/
现在打开打开同一目录中的 index.js 文件并添加以下内容:
parentApp.use(express.static(__dirname + '/public'));
后:
parentApp = express();
其中 '/public' 是包含您的静态内容的目录。
现在,如果您访问:http://localhost:2368,您将找到您的网站,您的博客将位于http://localhost:2368/blog/
要更改为生产,您需要进行适当的更改并从 NODE_ENV=production npm start
. 要更改为 80 端口,您只需要更改 config.js 中的端口,这将为您的网站和 80 上的博客提供服务。这显然会给您带来权限不足的问题,并且有大量教程向您展示如何设置Node.js 在端口 80 上,所以遵循它。