dsp*_*099 6 deployment heroku influxdb
是否可能,如果可能,怎么样?我希望能够从现有的Heroku基础设施中获取它.
我需要一个Procfile
吗?据我所知,它只是一个用Go编写的独立二进制文件!因此,部署它不应该那么难,我只是好奇如何部署它,因为我不认为我理解Heroku部署的细节.
小智 7
Heroku Dynos 不应该用于部署像InfluxDB这样的数据库应用程序.
Dynos是短暂的服务器.在dyno重启之间数据不会持续存在,并且无法与其他dynos共享.实际上,在dyno上部署的任何数据库应用程序基本上都是无用的.这就是为什么Heroku上的数据库(例如Postgres)都是附加组件.InfluxDB应该设置在不同的平台上(例如,AWS EC2或VPS),因为Heroku Add-on不可用.
也就是说,可以将InfluxDB部署到Heroku dyno.
要开始,重要的是要理解'slug'的概念.Slugs是容器(类似于Docker镜像),它包含在Heroku基础架构上运行程序所需的一切.要部署InfluxDB,需要创建InfluxDB slug.*有两种方法可以为Go库创建一个slug:
要使用buildpack从源代码构建slug,首先克隆InfluxDB Github repo.然后在repo的根目录添加一个Procfile,告诉Heroku在dyno启动时运行的命令.
echo 'web: ./influxd' > Procfile
Run Code Online (Sandbox Code Playgroud)
Go buildpack要求所有依赖项都包含在目录中.使用godep依赖工具将所有依赖项提供给目录.
go get github.com/tools/godep
godep save
Run Code Online (Sandbox Code Playgroud)
接下来,将上面所做的更改提交给git repo.
git add -A .
git commit -m dependencies
Run Code Online (Sandbox Code Playgroud)
最后,创建一个新的应用程序并告诉它使用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.
Run Code Online (Sandbox Code Playgroud)
Heroku将显示错误页面. 将显示错误,因为Heroku的"web"进程类型需要应用程序监听$PORT
环境变量描述的端口上的传入请求,否则它将终止dyno.InfluxDB的API和管理面板分别在端口8086
和端口上运行8083
.
不幸的是,InfluxDB不允许通过配置文件(/etc/config.toml
)从环境变量设置这些端口.在InfluxDB启动之前执行的一个小bash脚本可以在InfluxDB启动之前在配置文件中设置正确的端口.
另一个问题是,Heroku只暴露每个dyno一个端口,因此API和管理面板不能同时暴露给互联网.智能反向代理可以使用Heroku的X-Forwarded-Port
请求标头解决该问题.
最重要的是,不要使用Heroku dynos来运行InfluxDB.
*这意味着在部署到Heroku时,独立的Go可执行文件的好处会丢失,因为它需要为Heroku的堆栈重新编译.
**直接从InfluxDB可执行文件创建一个slug不起作用,因为没有内置的方法来监听Heroku在$PORT
环境变量中给出的正确端口.
归档时间: |
|
查看次数: |
2277 次 |
最近记录: |