Как запустить InfluxDB на Heroku?
возможно ли, и если да, то как? Я хотел бы иметь возможность добраться до него из моей существующей инфраструктуры Heroku.
Мне нужно Procfile
? Из того, что я понимаю, это просто автономный двоичный файл, написанный в Go! поэтому его не должно быть так сложно развернуть, мне просто интересно, как его развернуть, потому что я не думаю, что понимаю все входы и выходы развертывания Heroku.
2 ответов
Heroku Dynos должен не используется для развертывания приложения базы данных, такого как InfluxDB.
Dynos-эфемерные серверы. Данные не сохраняются между перезапусками dyno и не могут использоваться совместно с другими dynos. Практически говоря, любое приложение базы данных, развернутое на dyno, по существу бесполезно. Вот почему базы данных на Heroku (например, Postgres) являются надстройками. InfluxDB должен быть настроен на другой платформе (например, AWS EC2 или VPS), так как надстройка Heroku не доступный.
это возможно для развертывания InfluxDB в Heroku dyno.
чтобы начать работу, важно понять концепцию "слизняка". Слизни-это контейнеры (похожие на изображения Docker), которые содержат все необходимое для запуска программы в инфраструктуре Heroku. Для развертывания InfluxDB необходимо создать slug InfluxDB.* Существует два способа создания slug для Go библиотек:
- создать slug непосредственно из исполняемого файла Go, как описано здесь.**
- создайте Слизень из источника, используя Heroku Go buildpack (описано ниже).
чтобы построить слиток из источника с помощью buildpack, сначала клонируйте репозиторий InfluxDB Github. Затем добавьте 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. API и панель администратора InfluxDB работают на портах 8086
и 8083
, соответственно.
к сожалению, InfluxDB не позволяет устанавливать эти порты из переменных среды, только через файл конфигурации (/etc/config.toml
). Небольшой скрипт bash, выполненный до запуска InfluxDB, может установить правильный порт в файле конфигурации до запуска InfluxDB.
еще одна проблема, Heroku предоставляет только один порт на dyno таким образом, API и панель администратора не могут быть доступны в интернете одновременно. Умный обратный прокси-сервер может обойти эту проблему, используя Heroku X-Forwarded-Port
запрос-заголовок.
Итог, Не используйте Heroku dynos для запуска InfluxDB.
* это означает, что преимущества автономного исполняемого файла Go теряются при развертывании в Heroku, поскольку его необходимо перекомпилировать для стека Heroku.
** создание слизняка непосредственно из Исполняемый файл InfluxDB не работает, потому что нет встроенного способа прослушивания правильного порта, заданного Heroku в $PORT
переменные среды.
Мне нравится думать, что все возможно на узле Heroku при использовании пользовательского buildpack-пакет, но есть некоторые соображения при хостинге с Heroku:
- ops, например, резервное копирование, мониторинг (это влечет за собой установку дополнительных сервисов, открытие дополнительных портов и т. д. - Heroku может помешать здесь)
- производительность, учитывая размер dyno
- и если вам нужен более большой dyno, то цена будет вопросом. Вы получите больше удара для вашего бак, когда вы идете по маршруту IaaS.
- другие "особенности" dyno, например эфемерность диска
рекомендую hosted InfluxDB или вращая свой собственный на VPS, все из которых вы можете указать существующие приложения на основе Heroku. Затем это поможет получить эти экземпляры как можно ближе друг к другу (т. е. тот же регион или совместное расположение, если это возможно), предполагая необходимость низкой задержки между БД и стеком приложений.