Я пытаюсь развернуть grafana/grafana
образ Docker на Heroku, и grafana позволяет вам настроить все с помощью переменных среды с префиксом GF_
.
Heroku привязывает свой dyno к контейнеру докеров с помощью динамического порта, определенного во время выполнения с помощью переменной среды $PORT
.
Я пытался передать 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?
Использованная литература :
Я только что столкнулся с точно такой же проблемой и сумел ее решить (хотя таким образом, который определенно можно было бы считать «хакерским»).
Я создал файл grafana.ini
следующим образом:
[server]
http_port = <HTTP_PORT>
Я также создал сценарий оболочки, который запускается sed
в этом grafana.ini
файле во время развертывания (то есть на сервере Heroku, который развертывает образ докера и имеет установленную переменную $PORT
env).
sed -i -e 's|<HTTP_PORT>|'$PORT'|' /etc/grafana/grafana.ini
/run.sh
Наконец, я создал Dockerfile, унаследованный от стандартного образа grafana, и запускаю приведенный выше сценарий оболочки для этого ini-файла перед запуском сервера grafana. (Графана устанавливает ENTRYPOINT
их изображения на /run.sh
, посмотреть здесь).
FROM grafana/grafana
ADD heroku-run.sh /
ADD grafana.ini /etc/grafana/grafana.ini
ENTRYPOINT [ "/heroku-run.sh" ]
После выполнения команд сборки/отправки/выпуска Heroku конечным результатом должен стать развернутый сервис Grafana на Heroku.
Очевидным дополнительным преимуществом этого является то, что все ваши секреты grafana могут храниться в переменных среды, определенных для конфигурации вашего приложения Heroku, а затем просто добавлять для них дополнительные команды sed
в heroku-run.sh
(или оживить сценарий оболочки и параметризовать переменные).