crashxd
@crashxd
Backend разработчик

Хранить ли docker-compose в VCS?

Раньше для разработки на локальном компьютере использовал OpenServer.
В git'е хранил только исходники разрабатываемого проекта.
Упрощенная структура:
+-- .git
| deploy.sh
| index.php
| deploy.php

На gitlab был настроен webhook на push в определенную ветку, который вызывал deploy.php на нужном сервере, который в свою очередь запускал deploy.sh. В deploy.sh, грубо говоря вызывался git pull.

Недавно познакомился с docker и теперь пытаюсь перевести всю разработку на него.
Необходимый мне стек описываю в docker-compose. Папку с кодом проекта (src) пробрасываю в контейнер через volume.
Теперь у меня в git'е хранится не только исходники, но и конфиг для развертывания docker контейнеров.
Упрощенная структура:
+-- .git
+-- src
|---\ index.php
|---\ deploy.php
|-- docker-compose.yml
|-- deploy.sh


Когда коснулось дело до автоматического обновления кода, я столкнулся с проблемой:
webhook вызывает скрипт deploy.php, который работает внутри виртуалки и не имеет доступа во внешнюю папку со скриптом deploy.sh.
Пробовал пробросить всю внешнюю папку в контейнер, а не только папку src. В этом случае скрипт видит deploy.sh, но не может выполнить git pull, так как выполняется от пользователя без права на это.

Как вообще правильно хранить проект разрабатываемый с использованием docker?
И как лучше настроить автодеплой?
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 1
SlavikF
@SlavikF
А для чего нужны deploy.php и deploy.sh?
Я для похожих проектов шаги для deploy помещаю именно в CI (.gitlab-ci.yml), который и делает всё что надо для деплоя.

Вот тут пример моего Laravel PHP проекта, в котором CI делает вот эти шаги, как часть деплоя:
- генерирует конфиг из секретных переменных окружения
- инсталлирует зависимости
- копирует (mv) исходники и зависимости в папку веб-сервера
- запускает DB миграцию
- сбрасывает кэш
https://gitlab.com/SlavikCA/donors-crm/blob/master...

В этом проекте у меня нет докера.
Но если бы он и был, то не думаю, что это что-то поменяло.

С Докером обычно делают немного другой сценарий: если сложное приложение в котором много зависимостей, какой-нибудь необычный веб конфиг и т.д., то при пуше в репу запускают CI, который собирает новый докер image из этих файлов и других зависимостей (а не просто пробрасывает PHP файлы в стандартный контейнер).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы