【问题标题】:Connect to mongoDb Bitnami server hosted on Amazon EC2连接到托管在 Amazon EC2 上的 mongoDb Bitnami 服务器
【发布时间】:2018-03-23 06:18:12
【问题描述】:

所以我用 PHP 和 MongoDB 编写了一个基本程序,并使用 xampp 在本地对其进行了测试。这一切都很好。现在我想将它发布为一个网站。

经过一番研究,我决定使用 Bitnami,并且我在 Amazon 上运行 EC2 服务器。我能够从终端 ssh 和运行命令。现在我想连接到服务器并创建一个 Mongo 客户端。我有点困惑,不知道该怎么做。我正在使用下面的代码。 ssh 工作正常,但我不知道如何设置 mongo 客户端。 '$m = new MongoClient();'在本地主机上工作正常,我也尝试向 MongoClient 提供我的用户名和密码,但没有成功。非常感谢您的帮助!

include('Net/SSH2.php');
include('Crypt/RSA.php');

$key = new Crypt_RSA();
$key->loadKey(file_get_contents('../../etc/bitnami.pem'));


$ssh = new Net_SSH2('ip_address');
if (!$ssh->login('bitnami', $key)) {
    exit('Login Failed');
}

$ssh->exec('mongo admin --username root -p <myPassword>');

$m = new MongoClient();
$db = $m->mydb;
echo "Database mydb selected";
$collection = $db->mycol;
echo "Collection selected succsessfully";

$document = array( 
   "title" => "MongoDB", 
   "description" => "database"
);

$collection->insert($document);

更新对 Jota Martos 的回答(无法将其写为评论): 你好,谢谢你的回答。是的,现在我允许从所有端口和 IP 访问以进行测试。我可以通过 ssh 成功连接,但现在我被卡住了。我正在运行一个 Mean bitnami 应用程序,我的网站在 PHP 下的 GoDaddy 服务器上运行。所以我想用 PHP 连接到我在 AWS 上托管的 mongoDB bitnami 应用程序。所以现在的问题是我的 GoDaddy 服务器上没有安装 mongoDB。所以运行下面的代码是行不通的:

$m = new MongoDB\Driver\Manager("mongodb://${bitnami}:${AWSpassword}@hostIp");

致命错误:找不到类 'MongoDB\Driver\Manager'。

所以我的问题是如何将 PHP 从我的 GoDaddy 服务器连接到 EC2 Amazon 服务器并连接到 Bitnami mongoDB 帐户。我应该先建立到服务器的 ssh 连接,然后尝试登录到 mongoDB 服务器还是应该如何连接?

感谢您的帮助,提前感谢您!

【问题讨论】:

    标签: php mongodb amazon-web-services amazon-ec2 bitnami


    【解决方案1】:

    如果您希望将 Studio 3T 等工具连接到使用 bitnami AMI 构建的远程 Mongodb 实例,您可以按照以下步骤操作:

    1.在实例安全组上打开入站端口 27017。
    2。打开实例的实例日志,找到root用户的密码。
    3。打开 Studio 3T,服务器名称为实例公网 IP 和端口 27017。
    4。进入 Authentication 并选择 basic 并输入用户作为 root 和从实例日志中获得的密码。

    点击测试连接,应该可以了。

    【讨论】:

      【解决方案2】:

      嗨,Bitnami 工程师,

      除了这个tip,请注意默认情况下无法通过公共IP地址访问此解决方案中节点的数据库端口。出于安全原因,我们不建议通过公共 IP 地址访问数据库端口。

      https://docs.bitnami.com/aws/infrastructure/mongodb/#how-to-connect-to-mongodb-from-a-different-machine

      您可以通过访问AWS控制台并修改访问组配置来打开服务器中的MongoDB端口

      https://docs.bitnami.com/aws/faq/#how-to-open-the-server-ports-for-remote-access

      您还需要修改 MongoDB 配置文件 (/opt/bitnami/mongodb/mongodb.conf) 以允许数据库不能仅在 127.0.0.1 上运行。

      问候, 若塔

      【讨论】:

      • 感谢您的回答。是的,现在我打开所有端口进行测试。但是,我不明白的是如何从我的外部服务器连接到我的 EC2 服务器并运行 mongoDB。因为在我的外部服务器上没有安装 MongoDB,我不能使用 PHP 命令“new MongoDB\Driver\Manager”。我可以使用 PHP SSH 连接到我的 EC2 实例,但是如何连接到 mongoDB?任何帮助表示赞赏。
      • 您只需要在脚本中使用 MongoDB 驱动程序用于 PHP,如果您打开端口或在服务器中安装 MongoDB 客户端,则无需创建 SSH 隧道。您将在其官方 PHP 页面中找到有关如何安装和使用该驱动程序的更多信息:php.net/manual/en/set.mongodb.php
      • 谢谢!所以我能够在服务器上启用 Mongo PHP 驱动程序。我在 IC2 上启用了流量 UDP/TCP 并将 bind_ip 更改为 0.0.0.0 。我检查了 IC2 和 mongoDB 实例已启动并正在运行。但是,我收到以下错误消息“致命错误:未捕获的异常'MongoConnectionException',消息'无法连接到:ip:端口:连接被拒绝”。我正在使用以下命令“$m = new MongoClient("mongodb:// ip",array("username"=>"bitnami","password"=> $key));”我知道此调用已被弃用,但其他命令不会生成错误消息。知道可能是什么问题吗?
      • 您好,您检查了 MongoDB 配置文件吗?正如我所提到的,我们将 MongoDB 配置为不接受远程连接,所以如果你想打开端口,你还需要修改 the mongodb.conf file 中的 bind_ip 设置
      【解决方案3】:

      根据 php.net,使用的函数已弃用,refer this

      你可以试试这样的:

      <?php
      
      $manager = new MongoDB\Driver\Manager("mongodb://myusername:myp%40ss%3Aw%25rd@example.com/mydatabase");
      
      ?>
      

      Refer this

      【讨论】:

      • 感谢您的回答,我会调查的。我不明白的是,对于我的 EC2 服务器,我有一个 IP、用户和密码,然后在服务器上,mongoDB 应用程序正在使用用户和密码运行。我是否应该先 ssh 到我的服务器,然后尝试使用此命令创建 MongoDB 连接?
      猜你喜欢
      • 1970-01-01
      • 2017-10-20
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 2017-06-04
      • 2020-07-08
      相关资源
      最近更新 更多