【问题标题】:Multiple Meteor Apps, multiple subdomains, shared database多个 Meteor 应用程序、多个子域、共享数据库
【发布时间】:2014-07-10 10:34:07
【问题描述】:

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

  • 营销网站 (www.nvqhq.com)
    • 未登录时自动从其他子域重定向到这里
    • 包含所有用户注册和电子邮件/组织验证页面
    • 拥有所有面向公众的页面,例如隐私政策等
  • 管理站点 (admin.nvqhq.com)
    • 只有在以管理员/超级管理员身份登录时才能访问
  • 学习者网站 (learners.nvqhq.com)
    • 只有在以学习者身份登录时才能访问

根据 iron-router Issue 223,没有子域路由选项,所以我无法拥有一个公共路由文件服务所有三个子域。

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

创建此类应用程序的推荐方法是什么,或者我最好保留整个应用程序,因为我目前使用 /admin /learner。我反对这种解决方案,因为它会导致代码库快速增长(包含大量 if hasRole 'admin' 类型代码),并且为了尽可能保证应用程序的安全,我喜欢完全订阅和发布的想法。

【问题讨论】:

    标签: meteor subdomain iron-router


    【解决方案1】:

    在流星前面设置一个 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;
      }
    }
    }
    

    gist

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

    但首先尝试运行此设置。

    【讨论】:

      【解决方案2】:

      根据 Iron-router 第 223 期,没有子域路由选项,因此我将无法拥有服务所有三个子域的公共路由文件。

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

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

      备注

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

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

      单一路由文件和Meteor.IsClientMeteor.IsServer 切换的日子已经一去不复返了。

      【讨论】:

        猜你喜欢
        • 2020-09-04
        • 2014-05-23
        • 2014-06-04
        • 2014-08-18
        • 2019-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多