Развертывание частных пакетов Github Python на Heroku без раскрытия учетных данных в коде
Недавно мы столкнулись с проблемой развертывания в среде heroku python.
В развертывании heroku python он будет выполняться pip install requirements.txt
и установить пакеты в файл. Но когда у вас есть частный пакет, все становится сложнее.
Цель
Что мы хотим сделать, так это установить наш частный пакет, который находится на github. Просто успешно выполните одну из следующих команд:
pip install git+
pip install git+ssh://github.com/my_account/myrepo.git
pip install git+
Сложность здесь в том, что вы не хотите фиксировать какие-либо учетные данные или пароль в git, потому что это вызывает множество проблем с безопасностью. Итак, как сообщить героку учетные данные в сборке, является ключевым моментом этой проблемы.
Сторонние решения Buildpack
На самом деле, есть некоторые сторонние сборки, поддерживающие установку токенов github или ssh-ключей в средах:
Но после нашего обсуждения мы решили не использовать сторонние сборки по следующим причинам:
- обслуживание: каждый, кто присоединяется к связанным проектам, должен знать пакет сборки и поддерживать его, если что-то изменится.
- безопасность: мы не знаем, что произойдет, если мы не проверим код.
(Я просмотрел код, оба они довольно просты и довольно полезны. Вы можете настроить свои учетные данные в переменных среды, и пакеты сборки будут установлены для ваших целей.)
Решение без использования сторонних пакетов сборки
Проведя опрос по сборочным пакетам heroku, мы нашли хорошее решение, которое помогает нам решить эту проблему. Чтобы узнать решение, нам нужно сначала узнать больше о том, как работает пакет сборки heroku python. Сборочный пакет Herkuo python выполнит следующие команды по порядку:
bin/detect
bin/pre_compile
bin/compile
: на этом шаге он выполнитpip install -r requirments.txt
здесь.bin/post_compile
bin/release
Со знанием дела мы попробовали шаги:
- Настройка переменных среды
GITHUB_USER
а такжеGITHUB_PASSWORD
- Поместите файл
bin/pre_compile
с кодом генерации ссылок, например:
echo "Generate myrepo to requirements.txt"
MY_REPO_GIT="git+https://${GITHUB_USER}:${GITHUB_PASSWORD}@github.com/my_account/myrepo.git"
echo MY_REPO_GIT >> requirements.txt
и он создаст ссылку на частные репозитории с информацией о пользователе для requirements.txt
перед выполнением bin/compile
. Наконец, с помощью этого решения он может установить все, что вам нужно.
Неудачная попытка
Мы пытались использовать setup.py
сделать настройку при установке, но это не сработало, потому что думает команда heroku setup.py
может делать все, и это небезопасно, если выставлять на нем все настройки среды сборки.
Мысли
Это довольно интересное путешествие, когда я знаю, как работает пакет сборки, и выясняет код, ха-ха. Но pre_compile
кажется устаревшей функцией в героку. Не уверен, когда его уберут.