我正在尝试将grafana/grafana
Docker映像部署到Heroku,并且grafana允许您通过以GF_
为前缀的环境变量来配置所有内容。
Heroku使用$PORT
环境变量在运行时定义的动态端口将dyno绑定到docker容器。
我尝试通过GF_SERVER_HTTP_PORT=$PORT
或heroku.yml
通过heroku config:set
,但没有成功。
如果我在本地运行它,它将起作用:
$> docker run -ti --rm -e GF_SERVER_HTTP_PORT=1234 grafana/grafana
...
INFO[05-29|20:24:03] HTTP Server Listen logger=http.server address=0.0.0.0:1234 protocol=http subUrl= socket=
我如何在Heroku上使用它?
参考文献:
答案 0 :(得分:1)
我碰到了完全相同的问题并设法解决了这个问题(尽管可以肯定地认为它是“ hacky”)。
我创建了一个grafana.ini
文件,如下所示:
[server]
http_port = <HTTP_PORT>
我还创建了一个外壳脚本,该外壳脚本在部署时在该sed
文件上运行grafana.ini
(即在部署docker映像并具有$PORT
env变量的Heroku服务器上)设置)。
sed -i -e 's|<HTTP_PORT>|'$PORT'|' /etc/grafana/grafana.ini
/run.sh
最后,我创建了一个从标准grafana映像继承的Dockerfile,并在运行grafana服务器之前针对该ini文件运行上述shell脚本。 (Grafana将其图像的ENTRYPOINT
设置为/run.sh
,see here)。
FROM grafana/grafana
ADD heroku-run.sh /
ADD grafana.ini /etc/grafana/grafana.ini
ENTRYPOINT [ "/heroku-run.sh" ]
运行完Heroku的build / push / release命令后,最终结果应该是在Heroku上部署了Grafana服务。
一个明显的附加好处是,您可以将所有grafana机密存储在为Heroku应用配置定义的环境变量中,然后在sed
(或爵士乐)中为它们添加更多的heroku-run.sh
命令外壳脚本并设置变量参数)。