10

我最近将 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在没有密码的情况下使用它。

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

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

什么??这里出了什么问题?我希望它要求身份验证,但不存在?官方一头雾水。

提前感谢您的帮助!

更新

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

更新

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

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

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时,它并没有失败,但是在它的 url 上根本找不到该网站。在我看来,这MONGO_URL不是一种控制机制,而仅仅是一个指向外部数据库(如 mongohq)的指针。

我想我别无选择,只能求助于mongo appName约定和 ssh python 库,但我很想找到一种方法来远程直接访问我的数据库并继续使用 Meteor Up。

4

7 回答 7

7

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

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

mongo appName

但是,如果这些程序在服务器上运行,则可以通过该mongo appName接口以外的其他方式访问它。

Digital Ocean Ubuntu droplets 配备了 Python 2.7,因此可以使用pymongo。此命令将连接您:

from pymongo import MongoClient
client = MongoClient()

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

pymongo不是默认包,所以 install pip,然后使用pipto install pymongo

apt-get install python-pip python-dev build-essential
pip install pymongo
于 2014-05-22T18:02:58.307 回答
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.

于 2014-05-21T15:35:55.017 回答
2

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

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

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

于 2015-04-06T05:32:40.100 回答
2

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

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

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

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

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

于 2016-05-25T13:53:57.867 回答
1

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

这是 MongoChef 中的相关屏幕,您可以从中执行此操作。 在此处输入图像描述

于 2015-10-15T02:11:58.187 回答
0

您可以更改 mongod.conf,以允许从外部访问(当然有点危险;)

nano /etc/mongod.conf

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

然后重启服务器

service mongod stop
service mongod start

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

于 2015-10-26T19:08:21.870 回答
0

我所做的只是添加了我的数字海洋水滴服务器的 IP,而不是本地主机,它起作用了:

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

目前在 docker 中将这个 mongo 实例用于 2 个流星应用程序。

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

于 2017-04-15T16:44:24.337 回答