heroku - 如何在 Heroku 上运行 InfluxDB?

标签 heroku deployment influxdb

有可能吗,如果有,怎么做?我希望能够从我现有的 Heroku 基础设施访问它。

我需要一个 Procfile ?据我所知,它只是一个用 Go 编写的独立二进制文件!所以部署它应该不难,我只是好奇如何部署它,因为我认为我不了解 Heroku 部署的来龙去脉。

最佳答案

Heroku Dynos 应该 不是 用于部署数据库应用程序,如 InfluxDB。

Dynos 是临时服务器。数据不会在 dyno 重新启动之间保持不变,并且无法与其他 dyno 共享。实际上,部署在 dyno 上的任何数据库应用程序本质上都是无用的。这就是 Heroku 上的数据库(例如 Postgres)都是附加组件的原因。 InfluxDB 应该设置在不同的平台(如 AWS EC2 或 VPS)上,因为 Heroku 附加组件不可用。

也就是说,可以将 InfluxDB 部署到 Heroku dyno。

首先,了解“slug”的概念很重要。 Slugs 是容器(类似于 Docker 镜像),其中包含在 Heroku 基础架构上运行程序所需的一切。要部署 InfluxDB,需要创建一个 InfluxDB slug。* 有两种方法可以为 Go 库创建一个 slug:

  • here 所述,直接从 Go 可执行文件创建一个 slug .**
  • 使用 Heroku Go buildpack 从源代码构建 slug(解释如下)。


  • 要使用 buildpack 从源代码构建 slug,首先克隆 InfluxDB Github 存储库。然后在 repo 的根目录添加一个 Procfile,它告诉 Heroku 在 dyno 启动时运行的命令。
    echo 'web: ./influxd' > Procfile
    

    Go buildpack 要求所有依赖项都包含在目录中。使用godep 依赖工具将所有依赖供应到目录中。
    go get github.com/tools/godep
    godep save
    

    接下来,将上面所做的更改提交到 git 存储库。
    git add -A .
    git commit -m dependencies
    

    最后,创建一个新应用程序并告诉它使用 Go buildpack 进行编译。
    heroku create -b https://github.com/kr/heroku-buildpack-go.git
    git push heroku master
    heroku open    // Open the newly created InfluxDB instance in the browser.
    

    Heroku 将显示一个错误页面。 将显示错误,因为 Heroku 的“web”进程类型需要应用程序来监听 $PORT 描述的端口上的传入请求。环境变量,否则它会杀死dyno。 InfluxDB 的 API 和管理面板在端口 8086 上运行和 8083 , 分别。

    不幸的是,InfluxDB 不允许从环境变量设置这些端口,只能通过配置文件( /etc/config.toml )。在 InfluxDB 启动之前执行的一个小 bash 脚本可以在 InfluxDB 启动之前在配置文件中设置正确的端口。

    另一个问题,Heroku 只为每个 dyno 公开一个端口,因此 API 和管理面板不能同时暴露在互联网上。智能反向代理可以使用 Heroku 的 X-Forwarded-Port request header 解决该问题。 .

    最重要的是,不要使用 Heroku dynos 来运行 InfluxDB。

    * 这意味着在部署到 Heroku 时,将失去独立 Go 可执行文件的好处,因为它需要为 Heroku 的堆栈重新编译。

    ** 直接从 InfluxDB 可执行文件创建 slug 不起作用,因为没有内置方法来监听 Heroku 在 $PORT 中提供的正确端口环境变量。

    关于heroku - 如何在 Heroku 上运行 InfluxDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671253/

    相关文章:

    deployment - TeamCity:部署生成的安装程序(工件)的最佳实践

    java - 将 Tomcat 中的 .war 应用程序部署到 root

    influxdb - 查询 influxdb 是否有 'limit range'

    oracle - 如何从 Oracle 获取数据并将其发送到 statsd 或直接发送到 InfluxDB?

    ruby-on-rails - initialize_on_precompile 到底是干什么用的?

    heroku - 如何使用 Jhipster、Docker、Gitlab 和 Heroku 构建、测试和部署

    python - 使 Python-Telegram-Bot 持久化

    ruby-on-rails - 使用 Git 和 Heroku 进行适当的持续集成和持续部署

    deployment - ClickOnce 部署的应用程序可以静默大规模安装吗?

    python-3.x - 如何将订单簿数据正确写入具有相同时间戳的 influxdb