如何基于另一个值设置运行时环境变量

时间:2019-05-29 20:25:29

标签: heroku grafana

我正在尝试将grafana/grafana Docker映像部署到Heroku,并且grafana允许您通过以GF_为前缀的环境变量来配置所有内容。

Heroku使用$PORT环境变量在运行时定义的动态端口将dyno绑定到docker容器。

我尝试通过GF_SERVER_HTTP_PORT=$PORTheroku.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上使用它?

参考文献:

1 个答案:

答案 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.shsee 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命令外壳脚本并设置变量参数)。