多个Meteor应用程序、多个子域、共享数据库

多个Meteor应用程序、多个子域、共享数据库,meteor,subdomain,iron-router,Meteor,Subdomain,Iron Router,我正在开发一个电子学习平台,并决定最好将网站分为三个部分(每个部分都有自己的meteor应用程序)。这三个部分是: 营销网站(www.nvqhq.com) 未登录时自动从其他子域重定向到此 包含所有用户注册和电子邮件/组织验证页面 有所有面向公众的页面,如隐私政策等 管理员网站(Admin.nvqhq.com) 仅当以管理员/超级管理员身份登录时才可访问 学习者网站(Learner.nvqhq.com) 仅当作为学习者登录时才可访问 根据iron router的说法,没有子域路由

我正在开发一个电子学习平台,并决定最好将网站分为三个部分(每个部分都有自己的meteor应用程序)。这三个部分是:

  • 营销网站(www.nvqhq.com)
    • 未登录时自动从其他子域重定向到此
    • 包含所有用户注册和电子邮件/组织验证页面
    • 有所有面向公众的页面,如隐私政策等
  • 管理员网站(Admin.nvqhq.com)
    • 仅当以管理员/超级管理员身份登录时才可访问
  • 学习者网站(Learner.nvqhq.com)
    • 仅当作为学习者登录时才可访问
根据iron router的说法,没有子域路由的选项,因此我将无法让一个公共路由文件为所有三个子域提供服务

此外,我认为登录会话存储在localStorage中,因此用户将无法在跨子域移动时保持登录状态


创建此类应用程序的推荐方法是什么?或者,我是否可以更好地保留当前使用/admin/learner的整个应用程序。我反对此解决方案,因为它会导致代码库迅速变大(如果hasRole'admin'类型代码,则会有大量
代码),为了尽可能保证应用程序的安全,我喜欢完全订阅和发布的想法。

在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;
  }
}
}

在此设置中,默认情况下,登录可能仅适用于/营销级别。因此,您可能必须更改meteor中会话cookie设置的域

但是首先尝试运行此安装程序

根据iron router问题223,没有子域路由选项,因此我将无法使用公共路由文件为所有三个子域提供服务

至少有一个简单的方法来处理这一部分。您只需要创建一个包含公共路由的本地共享包

记住并将
PACKAGE\u DIRS
变量设置为指向您的共享软件包文件夹,然后您可以使用通常的
meteor add myshared:PACKAGE
方式将软件包添加到两个应用程序中

注释

像你一样,我将大型应用程序分解为小型微型应用程序。虽然这是一项很好的技术,但它会立即产生如何访问共享组件的问题,如路由、模板、设计资产、集合等。要解决这个问题,我会根据我的模式构建我的应用程序,我会彻底推荐

这意味着我的应用程序完全由智能软件包组成,每个软件包实现与单个功能相关的特定于应用程序的功能,如果需要,还包括
路由
文件。我还拥有一个共享功能包库,这些功能包实现了每个功能的通用、可重用部分,如果需要,还可以使用它们自己的
路由
文件

单片路由文件和
Meteor.IsClient
Meteor.IsServer
交换机的日子一去不复返了