我最近将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。
答案 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连接到数据库,它就像一个魅力。希望这有助于其他人。
答案 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)。