Meteor Up部署,不能使用meteor mongo --url

时间:2014-05-21 14:46:56

标签: mongodb ssh meteor digital-ocean meteor-up

我最近将Meteor应用程序部署到运行Ubuntu 14.04 x32的Digital Ocean Droplet。我将Meteor Up与此mup.json文件一起使用:

{
  // Server authentication info
  "servers": [
    {
      "host": "mycorrecthostname",
      "username": "root",
      "password": "mycorrectpassword"
    }
  ],

  // Install MongoDB in the server, does not destroy local MongoDB on future setup
  "setupMongo": true,

  // WARNING: Node.js is required! Only skip if you already have Node.js installed on server.
  "setupNode": true,

  // WARNING: If nodeVersion omitted will setup 0.10.25 by default. Do not use v, only version number.
  "nodeVersion": "0.10.28",

  // Install PhantomJS in the server
  "setupPhantom": true,

  // Application name (No spaces)
  "appName": "meteor",

  // Location of app (local directory)
  "app": "/my/correct/path/to/app",

  // Configure environment
  "env": {
    "ROOT_URL": "http://mycorrecturl.com"
  },

  // Meteor Up checks if the app comes online just after the deployment
  // before mup checks that, it will wait for no. of seconds configured below
  "deployCheckWaitTime": 15
}

一切都很好。我测试了网站,一切都按照应有的方式运作。我还在服务器上设置了ssh个密钥,无需密码即可ssh

现在,我需要远程访问我的服务器数据库。我在python shelf文件中有一些本地数据,我需要使用它来为我的数据库设定种子。我了解如何使用pymongo连接到远程数据库,但我尝试使用meteor mongo --url http://mycorrecturl.com/获取连接URI并且它只返回此错误:

Couldn't open a mongo connection: Site does not exist

什么?? 这里出了什么问题?我希望它要求身份验证,但只是不存在?官方混淆。

提前感谢您的帮助!

更新

我一直在我的服务器目录中寻找,试图在那里成功运行meteor mongo,但尽管我已经使用curl https://install.meteor.com | /bin/sh安装了meteor,但它总是说我不在流星项目目录中。即使隐藏的.meteor目录显然也不是项目目录。

更新

我更仔细地查看了Meteor Up文档,它说:

  

您无法从服务器外部访问MongoDB。访问   您需要先通过SSH登录服务器的MongoDB shell   然后运行以下命令。

mongo appName

我尝试了它并且它有效,但这还不够好。我需要能够远程访问数据库。 Meteor Up部署根本不可能吗?

以下答案中的一个似乎建议通过在我的MONGO_URL对象中设置env,我将基本上手动告诉数据库要响应的URL。那是准确的吗?

更新

Meteor Up文档说明如下:

  

< APPNAME>是数据库的名称

所以,根据其中一个答案的建议,我编辑了mup.json以包含此内容:

// Configure environment
"env": {
  "ROOT_URL": "http://localhost/",
  "MONGO_URL": "mongodb://root:mypassword@127.0.0.1:27017/meteor"
  // My appName is "meteor", so that is the name of the database as well.
}

当我使用这些变量执行mup deploy时,部署失败。这是错误的第一部分(如果您希望看到其余部分让我知道):

/usr/lib/node_modules/wait-for-mongo/bin/wait-for-mongo:14
    throw err;

当我使用mup reconfigure时,它不会失败,但网站根本无法找到它的网址。在我看来,MONGO_URL不是一个控制机制,而只是一个指向外部数据库的指针,如mongohq。

我以为我别无选择,只能诉诸mongo appName惯例和ssh python库,但我很想直接找到一种方法远程访问我的数据库,并继续使用Meteor Up。

7 个答案:

答案 0 :(得分:7)

无法远程访问数据库,如果 Meteor Up已安装并为您设置。来自Meteor Up文档:

  

您无法从服务器外部访问MongoDB。访问   您需要先通过SSH登录服务器的MongoDB shell   然后运行以下命令。

mongo appName

然而,可以通过除mongo appName接口以外的其他方式访问它,如果那些程序正在服务器上运行。

数字海洋Ubuntu水滴配备了Python 2.7,因此可以使用pymongo。此命令将连接您:

from pymongo import MongoClient
client = MongoClient()

这将自动连接到mongodb://localhost:27017/

pymongo不是默认软件包,因此请安装pip,然后使用pip安装pymongo

apt-get install python-pip python-dev build-essential
pip install pymongo

答案 1 :(得分:4)

这是因为你没有在“env”对象中设置MONGO_URL。

// Configure environment
"env": {
    "PORT": 58090, # Your application port
    "ROOT_URL": "http://localhost/",
    "MONGO_URL": "mongodb://username:password@127.0.0.1:27017/myDatabase",
    "METEOR_ENV": "production"  # If you need to separate your local environment from production
},

然后,只需运行mup deploy

答案 2 :(得分:2)

我花了一段时间才弄明白这一点。无法从托管服务器外部访问mongodb服务器。因此,您必须首先ssh进入您的服务器并从那里开始工作。要使用pymongo连接到数据库,请使用以下命令:

client = MongoClient('mongodb://localhost/APPNAME')
posts = client.APPNAME.posts

应在mup.json文件中指定APPNAME,并将posts替换为您必须更新的任何集合。

答案 3 :(得分:2)

我想我找到了一个在digitalocean ubuntu 14.04服务器上使用mupx访问数据库的解决方案。

使用mupx部署应用程序后,请执行以下操作:

使用ssh登录到您的服务器,然后安装mongo:apt-get install mongodb

然后在您的服务器上运行mongo命令。尝试通过运行show dbs来检查您的数据库是否存在。如果是,则use yourdbname。它应该保存正在运行的应用程序中的所有数据!

让我知道它是否有效。祝你好运。

答案 4 :(得分:1)

我遇到了一些问题,但能够使用3T MongoChef来做到这一点。 MongoChef中有一个选项可以通过SSH连接到数据库,它就像一个魅力。希望这有助于其他人。

以下是MongoChef中您可以执行此操作的相关屏幕。 enter image description here

答案 5 :(得分:0)

你可以改变mongod.conf,允许从外面访问(当然有点危险;)

BorderView

然后重启服务器

nano /etc/mongod.conf

# Listen to local interface only. Comment out to listen on all     interfaces.
# bind_ip = 127.0.0.1

你可以从外面访问它(在robo-mongo中使用ssh-forwarding)

答案 6 :(得分:0)

我所做的就是添加我的Digital ocean droplet服务器的IP,而不是localhost,它起作用了:

env: {
      ROOT_URL: 'http://yourdomain.com',
      MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
      PORT: 3002,
    },

目前在docker中使用这个mongo实例获取2个流星应用程序。

编辑:这取决于防火墙的设置方式。检查“ufw status”。还取决于你的mongo的部署方式(哪些端口转发到哪里; ex)0.0.0.0:27017->27017)。