1

我正在尝试使用以下命令使用流星星系部署我的应用程序

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 中都写了相同的用户名和密码,我使用的是免费沙盒版本,请帮我解决这个问题,如果可能的话,建议我使用免费沙盒版本的解决方案。 ..

非常感谢

4

1 回答 1

6

听起来您的 mongodb 配置肯定有问题。不幸的是,各种 mongodb 服务提供商之间存在很多差异,但让我与您分享我的设置方式(也许这会对您有所帮助)。我确实想指出,我正在从云 linux 服务器管理我自己的 mongodb 实例(而不是使用 mongodb 服务)。

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

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

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

    然后从 shell,以上述用户身份登录并创建您的流星应用程序使用的帐户。注意,我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 身份执行此操作)。如果您没有在默认本地主机和端口号上运行 mongodb,则使用您的特定主机名和端口修改以下示例)。

    rs.initiate({_id:"rs0", members: [{"_id":0, "host":"127.0.0.1:27017"}]});
    
  3. 现在启用了 oplog,您必须创建一个可以访问 oplog 的用户。这是您将用来配置的用户MONGO_OPLOG_URL(由流星使用)。在 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. 完成所有设置后,您只需要设置您的流星环境变量并重新启动您的应用程序。

    export MONGO_URL='mongodb://meteor:meteor@<hostname>:<port>/meteor_db'
    export MONGO_OPLOG_URL='mongodb://oplogger:oplogger-password@<hostname>:<port>/local?authSource=admin'
    

如果您遇到任何问题或有其他问题,请告诉我。此外,当我尝试进行所有这些设置时,我发现这里有一些额外的资源很有帮助(也许它们也会有所帮助)。

于 2017-03-21T14:54:15.130 回答