我正在寻找更正确、更完整的答案,形式如下:
- 使用类似node或python的东西调用一个shell脚本,该脚本可能会以sudo方式运行。
- 该脚本可能会创建一个新的文件夹来保存特定于实例的内容(如客户端文件、配置和/或该实例的数据库)。
- 脚本或python代码将在该文件夹中部署应用程序,并在特定端口上运行。
- Python可能会向类似Pound的工具添加配置信息,以将子域名转发到一个端口。
- 其他事情......!?
我们所面临的问题是,我们希望编写一个Meteor应用程序,好像只存在一个客户端(或在我的情况下是一组客户端),但它需要处理多组客户端而不让它们知道彼此的存在。我正在执行以下操作:
正确地完成这项工作需要很多关于Meteor内部的知识,而我一直在学习。然而,这种方法比尝试同时部署多个Meteor应用程序更加清洁和资源节约。这意味着您仍然可以将应用程序编码为好像只存在一个客户端,而不是明确地为多个客户端这样做。此外,它允许您共享可共享的实例之间的资源(即静态资产、共享状态等)
有关详细信息和讨论,请参见:
创建一个可以快速部署的存档文件。(打包应用程序,重新安装纤维(如果需要),重新压缩)。使用脚本在创建新实例时将存档文件(解压缩)部署到新文件夹中。
创建一个init脚本模板,并使用forever、daemonize或jesus等工具在重启时启动网站并在正常运行期间保持网站在线。请参见Meteor deploying to a VM by installing meteor或How does one start a node.js server as a daemon process?以获取示例。当部署新实例时,填充模板的值(例如端口号、数据库名称、文件夹)。将填好的模板复制到init.d并链接到runlevel。或者,创建一个在init.d中执行其他脚本以启动网站的脚本。
每个实例都应该监听它自己的端口,因此你需要一个反向代理。据我所知,Apache和Nginx在更改配置时需要重新启动,因此你可能需要查看Hipache https://github.com/dotcloud/hipache。Hipache使用redis存储配置信息。添加新实例需要向redis添加一个键。还有一个实验性的Hipache端口可以将功能带到Nginx中https://github.com/samalba/hipache-nginx
关于DNS更新呢?一旦创建了新实例,是否需要在DNS配置中添加新记录?