Если вас интересует App Engine, я бы порекомендовал перенести ваше приложение в гибкую среду Google App Engine, где вы можете выбрать Настраиваемое время выполнения для вашего Flask приложения. Просто включите шаг в ваш Dockerfile, чтобы установить необходимую библиотеку. Это должно выглядеть примерно так:
FROM python:3.7
WORKDIR /app
COPY . /app
RUN apt-get update &&\
apt-get install -y libsndfile1
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "main:app", "-b", ":8080", "--timeout", "300"]
И в этом контексте вы можете использовать Cloud Build для довольно простой автоматизации развертываний, следуя соответствующему разделу документации .
Теперь по вашим вопросам.
(1) Где cloudbuild.yaml выполняет свои инструкции?
Здесь вы можете Найдите всю необходимую информацию о том, как Cloud Build работает здесь , и ответьте на свой первый вопрос. Cloud Build - это отдельная служба, которая выполняет каждый этап сборки в контейнере Docker в рамках инфраструктуры Google.
(2) Как заставить cloudbuild.yaml выполнить apt-get install libsndfile1 python3 python3-pip
, а затем также выполнить pip3 install requirements.txt
, где needs.txt - файл в репо, который запускает сборку облака.
Обратите внимание, что Cloud Build более ориентирован для использования с другими продуктами, такими как Cloud Run, GKE, Cloud Functions и т. Д. c. И единственное, что я видел, как Cloud Build использовался в контексте Compute Engine, это просто создавать образы виртуальных машин с использованием Packer . В этом случае вам нужно создать пользовательский образ со всеми зависимостями, уже установленными в вашем приложении.
Особенности решения будут различаться в зависимости от ОС вашего Compute Engine пример. Но в основном вам нужно сделать следующее:
- Загрузить скрипт запуска, который устанавливает
libsndfile1
, а также все зависимости, указанные в файле requirements.txt
, в корзину в облачном хранилище. - Воспользуйтесь преимуществом того, что вы можете использовать gcloud для применения сценария запуска к запущенным экземплярам аналогично.
gcloud compute instances add-metadata example-instance \
--metadata startup-script-url=gs://bucket/file
и Cloud Builder для gcloud 3. Создайте файл cloudbuild.yaml, который использует 2. и перезапустите экземпляр (не рекомендуется, если ваше приложение работает, поскольку это приведет к простою) аналогично:
cloudbuild.yaml
steps:
- name: gcr.io/cloud-builders/gcloud
args: ['compute', 'instances', 'add-metadata', 'example-instance','--metadata startup-script-url=gs://bucket/file']
- name: gcr.io/cloud-builders/gcloud
args: ['compute', 'instances', 'reset', 'example-instance']
Предоставьте учетной записи службы облачной сборки достаточно разрешений для выполнения этой задачи (
Вычислите администратора и
Администратор хранилища ). Запустите сборку.
Я поделился предыдущими шагами, чтобы ответить на ваш конкретный вопрос, но настаиваю на том, что моя рекомендация будет состоять в том, чтобы перенести приложение в среду App Engine Flexible с настраиваемой средой выполнения, как описано выше.