多个Meteor应用程序,多个子域名,共享数据库。

3
我正在开发一款在线学习平台,决定将其分为三个部分(每个部分都有自己的meteor应用程序)。这三个部分分别是:
  • 营销站点(www.nvqhq.com)
    • 未登录时从其他子域名自动重定向到此处
    • 包含所有用户注册和电子邮件/组织验证页面
    • 具有所有公共页面,如隐私政策等
  • 管理站点(admin.nvqhq.com)
    • 仅在管理员/超级管理员登录后可访问
  • 学习者站点(learners.nvqhq.com)
    • 仅在学习者登录后可访问
根据iron-router 问题223,没有子域名路由选项,因此我将无法使用通用路由文件为所有三个子域提供服务。
此外,我相信登录会话存储在localStorage中,因此用户将无法跨子域保持登录状态。
什么是创建此类应用程序的推荐方法?还是说我最好像目前一样使用 /admin /learner 来保留整个应用程序。我反对这种解决方案,因为它会迅速使代码库变得庞大(具有大量的 if hasRole 'admin' 类型代码),为了尽可能地保持应用程序的安全性,我喜欢完全订阅和发布的想法。
2个回答

3

在Meteor前面设置一个Nginx代理,将子域名路由到同一位置。因此,实际上是相同的应用程序,但对于用户来说不会看起来像是这样。

该配置文件的http部分将如下所示:

http {
server {
   listen 80;
   server_name nvqhq.com;

   location / {
     proxy_pass http://localhost:3000/marketing;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $host;
   }
}

server {
  listen 80;
  server_name admin.nvqhq.com;

  location / {
     proxy_pass http://localhost:3000/admin;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $host;
  }
}

server {
  listen 80;
  server_name learners.nvqhq.com;

  location / {
    proxy_pass http://localhost:3000/learners;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
  }
}
}

在这个设置中,默认情况下登录可能仅适用于 /marketing 级别。因此,您可能需要在 Meteor 中更改设置会话 Cookie 的域名。
但首先,请尝试让此设置运行起来。

gist


1
根据iron-router Issue 223所述,没有子域路由选项,因此我将无法拥有一个通用的路由文件来服务所有三个子域。但至少有一种简单的方法来解决这个问题。你只需要创建一个本地共享包,其中包含您的公共路由。记得设置PACKAGE_DIRS变量指向你的共享包文件夹,然后可以按照通常的meteor add myshared:package方式将包添加到两个应用程序中。
注:像您一样,我将大型应用程序拆分为较小的微应用程序。虽然这是一种好的技术,但它立即创建了如何访问共享组件(如路由、模板、设计资产、集合等)的问题。为了解决这个问题,我按照feature-package模式构建我的应用程序-我强烈推荐这种方式。
这意味着我的应用完全由智能包组成,每个包实现与单个功能相关的应用程序特定函数,包括(如有必要)routes文件。我还有一个共享功能包库,实现每个功能的通用可重用部分,如果需要,它们也有自己的routes文件。
过去的庞大路由文件和Meteor.IsClientMeteor.IsServer开关已经一去不复返了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接