7

我设计了一个meteor.js 应用程序,它在本地主机上运行良好,甚至在部署到互联网时也是如此。现在我想创建一个注册站点,该站点将为在后端注册的每个客户启动应用程序的新实例。假设注册站点有一个 meteor.js 应用程序和 python 或 javascript,需要采取哪些高级步骤来实现它?

我正在寻找一个更正确和更完整的答案,它采用我想象不到的版本的形式:

  1. 使用 node 或 python 之类的东西来调用可能会或可能不会作为 sudo 运行的 shell 脚本
  2. 该脚本可能会创建一个新文件夹来保存特定于实例的内容(如客户端文件、配置和/或该实例数据库)。
  3. 脚本或 python 代码会将应用程序的一个实例部署到该文件夹​​和特定端口上
  4. Python 可能会向Pound等工具添加配置信息将子域转发到端口
  5. 其他事情....!?

我不太了解这里需要采取的高级步骤,所以如果有人可以提供这些步骤,甚至可能提供一些有用的工具或教程,我将非常感激。

4

3 回答 3

6

我和你有类似的情况,但最终以完全不同的方式解决。它现在作为 Meteor 智能包提供:

https://github.com/mizzao/meteor-partitioner

我们分享的问题是,我们想编写一个流星应用程序,就好像只有一个客户端(或一组客户端,在我的例子中)存在,但它需要处理多组客户端,而他们彼此不知道。我正在执行以下操作:

  • 假设 Meteor 应用程序仅针对单个实例进行编程
  • 使用智能包,挂钩服务器(可能还有客户端)上的集合,以便所有操作都“限定”到调用它们的用户实例。一种方法是自动将“实例”或“组”字段附加到正在添加的每个文档。

正确地做到这一点需要大量关于 Meteor 内部的知识,这是我一直在学习的。但是,与尝试一次部署多个流星应用程序相比,这种方法更清洁且资源消耗更少。这意味着您仍然可以对应用程序进行编码,就好像只有一个客户端存在一样,而不是为多个客户端明确地这样做。此外,它允许您在可以共享的实例之间共享资源(即静态资产、共享状态等)

有关更多详细信息和讨论,请参阅:

于 2013-08-18T14:10:11.437 回答
3

首先让我说一下,我认为启动同一个应用程序的多个实例是一个糟糕的设计选择。如果这是一个权宜之计,我的建议如下:

  1. 创建一个可以轻松部署的档案。(捆绑应用程序,必要时重新安装光纤,重新压缩)。使用脚本创建新实例时,将存档部署(解压缩)到新文件夹。

  2. 创建一个初始化脚本的模板,并使用 forever 或 daemonize 或 jesus 等在重新启动时启动站点并在正常运行期间保持站点正常运行。请参阅Meteor 通过安装流星部署到 VM如何将 node.js 服务器作为守护进程启动?举些例子。当部署新实例时,使用新值(即端口号、数据库名称、文件夹)填充模板。将填写好的模板复制到 init.d 并链接到运行级别。或者,在 init.d 中创建一个脚本来执行其他脚本以启动该站点。

  3. 每个实例都应该监听自己的端口,因此您需要一个反向代理。AFAIK、Apache 和 Nginx 需要在您更改配置时重新启动,因此您可能需要查看 Hipache https://github.com/dotcloud/hipache。Hipache 使用 redis 来存储配置信息。添加新实例需要给redis添加一个key。有一个 Hipache 的实验端口,将功能带到 Nginx https://github.com/samalba/hipache-nginx

DNS更新呢?创建新实例后,是否需要在 DNS 配置中添加新记录?

于 2013-08-12T12:25:26.953 回答
2

我对你的问题没有真正的答案......但我只是想提醒你另一个可能遇到的潜在问题,因为我看到你提到了 python,换句话说,你可能正在 Apache 上运行另一个 Web 应用程序/Nginx等...问题是Meteor在与另一个http服务器共存时不是很友好,我正在做的项目受到这个问题的困扰,我们不得不将它移动到一个独立的服务器上经过几天与 Meteor 的人的麻烦......我没有解决这个问题,所以我无法给你更多细节,但我只是在网上查了一下,发现了类似的东西:https ://serverfault.com/问题/424693/serving-meteor-on-main-domain-and-apache-on-subdomain-independently

只是要记住一点...

于 2013-08-12T01:35:55.173 回答