【问题标题】:deploying node.js app with mongodb with dokku on digital ocean在数字海洋上使用 mongodb 和 dokku 部署 node.js 应用程序
【发布时间】:2014-09-11 07:03:53
【问题描述】:

我正在尝试使用 dokku 在数字海洋上部署一个带有 mongodb 的 Node.js 应用程序。不幸的是,我在节点应用程序连接到 mongodb 时遇到了一些问题。

到目前为止我做了什么。 0. 我在 git repo 中有一个 node.js 应用程序 1.在数字海洋中创建dokku实例(在ubuntu 14.04上运行) 2.我创建了一个dokku-mongodb-plugin(见https://github.com/jeffutter/dokku-mongodb-plugin):按照那里的git clone etc安装说明进行操作。 3.将我的应用推送到数字海洋服务器(git push -u production master) 4.尝试创建一个mongodb进程:(在服务器上):dokku mongodb:create testapp(testapp是我的app的名字) 5. 运行我的应用:dokku run testapp node app.js

这会导致连接错误(在底部)

我已经测试过: dokku mongodb:列表

它没有返回任何东西,这让我觉得插件可能有问题?

否则,我怀疑这可能是由于 mongodb 在与标准 localhost 不同的 ip / 进程下运行。

无论如何,我不确定问题出在哪里。任何帮助将不胜感激。

干杯,迈克

vents.js:72 投掷者; // 未处理的“错误”事件 ^ 错误:无法连接到 [localhost:27017] 在空。 (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:546:74) 在发出 (events.js:106:17) 在空。 (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:150:15) 在发射(events.js:98:17) 在套接字。 (/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:533:10) 在 Socket.emit (events.js:95:17) 在 net.js:440:14 在 process._tickCallback (node.js:419:13)

【问题讨论】:

  • +1 点从零开始您的列表:)

标签: node.js mongodb digital-ocean dokku


【解决方案1】:

dokku mongodb 插件为其 mongodb docker 容器使用 RFC 1918 专用网络地址。如本文How to get a Docker container's IP address from the host? 中所述,您可以从 docker inspect 获取地址。从 docker ps 获取 dokku-mongodb 容器的容器 id,然后使用该容器 id 运行 dokku inspect。

当你使用dokku mongodb:link 或者创建数据库时指定app名在你的app的dokku config中设置一系列mongodb环境变量,你可以通过运行dokku config 查看.

$ dokku config test
=== test config vars ===
NODE_ENV:         test
MONGODB_DATABASE: "myapp-test-db-production"
MONGODB_HOST:     "172.17.0.123"
MONGODB_PORT:     "27017"
MONGODB_USERNAME: "test"
MONGODB_PASSWORD: "***********************"
MONGO_URL:        "mongodb://test:**********************@172.17.0.123:27017/myapp-test-db-production"

您需要从 mongodb 连接代码中引用这些环境变量。就我而言,我使用的是 meanjs.org 模板,因此我将 config/env/test.js 中 db 的值设置为 db:process.env.MONGO_URL,并使用 dokku config:set 添加了 NODE_ENV=test。

'use strict';

module.exports = {
    db: process.env.MONGO_URL,
    // db: 'mongodb://localhost/mean-test',
< snip > 

【讨论】:

  • 谢谢。我也尝试过 meanjs 模板,现在连接正常。我现在只有dns问题。应用在您的案例中显示在哪里(域名、端口)?
  • 我能够为应用程序启用虚拟主机命名并为 *.app.domain.com 设置通配符 DNS 条目,因此我的应用程序显示在 test.app.domain.com。这篇文章andrewmunsell.com/blog/dokku-tutorial-digital-ocean 很有帮助。
  • 无论如何我可以通过外部 shell 连接到通过 MongoDB 插件创建的 mongoDB 实例吗?例如我的本地计算机上的终端?使用 MONGO_URL?
  • 是的,如果您查看 docker ps,您将看到映射到 docker 容器中的进程的端口。我现在没有运行系统,所以我无法检查,但我认为它在某个地方的 47000 范围内
  • 连接到您的 Droplet 的公共 IP。对于端口,使用 dokku mongo:list,你会得到 5 NNNNN->MMMMM 对,使用第一个 MMMMM
猜你喜欢
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2021-12-05
  • 2019-02-18
  • 2016-07-22
相关资源
最近更新 更多