MongoError:在meteor galaxy上部署时,未授权本地执行命令

时间:2017-03-21 10:56:39

标签: mongodb meteor meteor-galaxy mlab

我正在尝试使用meteor galaxy使用以下命令部署我的应用程序

DEPLOY_HOSTNAME=us-east-1.galaxy-deploy.meteor.com meteor deploy icrm.meteorapp.com --settings scalingo.json

但我收到此错误

日志中的

MongoError: not authorized on local to execute command { find: "oplog.rs", filter: {}, sort: { $natural: -1 }, projection: { ts: 1 }, limit: 1 }

在我的scalingo.json中,我设置如下

"galaxy.meteor.com": {
        "env": {
            "MONGO_URL": "mongodb://username:password@ds137100.mlab.com:37100/icrm",
            "MONGO_OPLOG_URL": "mongodb://username:password@ds137100.mlab.com:37100/local?authSource=icrm",
            "ROOT_URL": "http://icrm.meteorapp.com/"
        }
    }

当我访问http://icrm.meteorapp.com/时,我正在

503 Service Unavailable: No healthy endpoints to handle the request.

我知道我在设置MONGO_OPLOG_URL时遇到了一些错误,我在MONGO_URL和MONGO_OPLOG_URL都写了相同的用户名和密码,我正在使用免费的沙盒版本,请帮我解决这个问题,如有可能建议我免费解决沙箱版......

非常感谢

1 个答案:

答案 0 :(得分:3)

听起来你的mongodb配置确实存在问题。不幸的是,各种mongodb服务提供商之间存在很多差异,但让我与大家分享我的设置(也许这会以某种方式帮助你)。我想要注意的是,我正在从云Linux服务器管理我自己的mongodb实例(而不是使用mongodb服务)。

  1. 启用安全授权(例如,在mongod.conf中启用)并确保您已创建管理员用户(您将用于创建所有其他用户)以及您的流星应用程序将使用的用户用来访问mongodb。

    首先,您必须创建具有正确角色的“admin”用户才能添加新用户。从mongo shell你可以做到这一点。

    admin = db.getSiblingDB("admin");
    admin.createUser(
      {
        user: "admin",
        pwd: "admin-password",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    );
    

    然后从shell中,以上述用户身份登录并创建您的meteor应用程序使用的帐户。注意,我在此示例中调用了我的meteor应用程序数据库meteor_db。将其更改为您想要的任何内容。

    db.getSiblingDB("admin").auth("admin", "admin-password" );
    
    use meteor_db;
    
    db.createUser(
      {
        user: "meteor",
        pwd: "meteor",
        roles: [ { role: "readWrite", db: "meteor_db" } ]
      }
    );
    
  2. 完成后,您需要配置mongodb以启用oplog(meteor将用于拖尾)。为此,您必须通过编辑mongod.conf并修改replication部分来设置复制和1个复制集。

    replication:
        replSetName: rs0
    

    重新启动mongodb,然后从mongo shell启动对新成员的复制(必须以root身份执行此操作)。如果您没有在默认的localhost和端口号上运行mongodb,请使用您的特定主机名和端口修改以下示例。

    rs.initiate({_id:"rs0", members: [{"_id":0, "host":"127.0.0.1:27017"}]});
    
  3. 现在已启用oplog,您必须创建一个可以访问oplog的用户。这是您将用于配置MONGO_OPLOG_URL(由meteor使用)的用户。在mongo shell中,以admin用户身份登录(在上面创建)并创建新的oplogger用户。

    db.getSiblingDB("admin").auth("admin", "admin-password" );
    
    admin = db.getSiblingDB("admin");
    
    admin.createUser(
      {
        user: "oplogger",
        pwd: "oplogger-password",
        roles: [ { role: "read", db: "local" } ]
      }
    );
    
  4. 完成所有设置后,您只需设置meteor env变量并重新启动应用程序。

    export MONGO_URL='mongodb://meteor:meteor@<hostname>:<port>/meteor_db'
    export MONGO_OPLOG_URL='mongodb://oplogger:oplogger-password@<hostname>:<port>/local?authSource=admin'
    
  5. 如果您遇到任何问题或有进一步的问题,请告诉我。此外,这里还有一些额外的资源,当我试图获得所有这些设置时,我发现这些资源很有用(也许它们也会有所帮助)。