9

首先,请原谅我对 Joyent 的 smartmachine 实例缺乏了解。我正在为这种情况运行 NodeJS 的免费开发层 smartmachine 实例。

我正在[path]/server/public/通过http-server在文件系统上运行一个网站,并且我想同时在 80 端口上运行一个Ghost博客。[path]/server/public/blog/

这可能吗?我将如何实现它?

4

3 回答 3

8

使用 express 设置一个瘦包装器可能是一个很好的解决方案(正如 Paul 建议的那样),但如果您以一个包含大量“不同服务”的大型应用程序结束,则可能会变得一团糟。

相反,我会在我所有的服务之上使用代理(例如 NGINX)。

有了这个解决方案,如果一个服务失败了,其余的都没有,因为它们是解耦的。

您可以在端口 80 上侦听并在内部代理每个服务:端口。

就像是:

0.0.0.0:80 ---> Proxy
                  └──path: /     ─── localhost:3000  (Main Web)
                  └──path: /blog ─── localhost:4000 (Ghost)
                  ...
于 2015-01-18T18:01:43.673 回答
3

如果您的其他网站是express基于网站的网站,最简单的方法可能是将您的 ghost 应用程序包含在同一源代码树中(可能在子文件夹中)。Express 应用程序可以作为中间件安装到其他 Express 应用程序,因此您可以添加到主站点的路由,例如:

var ghost = require('./path/to/ghost');
app.use('/blog', ghost);
于 2014-12-16T20:33:38.617 回答
2

假设您已遵循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 上,所以遵循它。

于 2015-01-19T05:44:11.523 回答