В автономных средах вам необходимо «продавать» свои зависимости. Акт "вендоринга" означает, что вы загружаете их заранее и cf push
как ваше приложение, так и зависимости. Когда вы сделаете это, buildpack-пакету не нужно ничего скачивать, потому что все это уже существует.
Процесс для приложений Node.js здесь -> https://docs.cloudfoundry.org/buildpacks/node/index.html#vendoring
Для неродного кода это легко, но для нативного кода есть сложность. Чтобы продавать свои зависимости, вам необходимо убедиться, что архитектура вашего локального компьютера соответствует архитектуре целевой системы (т. Е. Вашего стека Cloud Foundry). Если архитектура не совпадает, двоичные файлы не будут работать на CF, и buildpack должен будет попытаться загрузить и собрать эти ресурсы для вас (это не удастся в автономной среде).
На момент написания этой статьи для Cloud Foundry было доступно два стека. Чаще всего используется cflinuxfs2
. Это в основном Ubuntu Trusty 14.04. Существует также cflinuxfs3
, который является в основном Ubuntu Bionic 18.04. Пока я пишу это, последний довольно новый и может быть доступен не во всех средах. Существуют также стеки Windows, но это не имеет значения, потому что сборка Node.js работает только со стеками Linux. Вы можете запустить cf stacks
, чтобы увидеть, какие стеки доступны в вашей среде.
Чтобы выбрать нужный стек, запустите cf push -s <stack>
, однако это обычно не требуется, поскольку в большинстве сред по умолчанию используется один из стеков Linux.
Чтобы вернуть это к продаже ваших зависимостей Node.js, вам нужно выполнить локальные операции по продаже в среде, которая соответствует стеку. Если вы используете Windows или MacOS, это означает использование виртуальной машины или образа Docker. У вас есть несколько вариантов с точки зрения образа вашей виртуальной машины или Docker.
- Стеки, также называемые rootfs, доступны как образы Docker. Вы можете работать над этим, запустив
docker run -w /app -v
pwd :/app -it cloudfoundry/cflinuxfs2 bash
или docker run -w /app -v
pwd :/app -it cloudfoundry/cflinuxfs2 bash
. Это даст вам оболочку в соответствующем контейнере, где вы сможете запустить процесс вендоринга.
- Сделайте то же самое, но используйте базовый образ Ubuntu Trusty 14.04 или Ubuntu Bionic 18.04. Это в основном то же самое, что и образы cflinuxfsX, они просто поставляются со стандартным набором пакетов. Если вам нужно
apt
установить dev-пакеты так, чтобы ваш собственный код был собран, это нормально.
- Создайте виртуальную машину Ubuntu Trusty 14.04 или Ubuntu Bionic 18.04. Это то же самое, что и предыдущий вариант, но вы используете виртуальную машину вместо Docker.
Как только вы правильно продадите свои зависимости, используя правильную архитектуру, вы сможете cf push
запустить ваше приложение, и пакет сборки будет запущен, и вам не нужно ничего скачивать из Интернета.