#backend #frontend #docker
Каждый разработчик знает, что в Студии не приветствуется фраза «У меня локально все работает, а на тестовом серваке — не собирается!».
Ввиду широкого стека разработки и наличия легаси-проектов разработчик не может иметь полный постоянный перечень системных библиотек и библиотек уровня кода. Их версии и состав могут различаться для разного типа проектов.
Например, для сборки frontend-статики в 2017 году мы использовали Node.js v8, в 2019 году — Node.js v11, а сейчас используем v10 и v12.
Более того, окружение системного софта и веб-серверов также различно — для каких-то проектов используется связка Nginx + PHP-FPM, есть несколько старичков на Apache2 + PHP5.6. Для Python Django и Flask — Nginx + Gunicorn.
Для того чтобы окружение программиста было максимально приближено к тестовому/промышленному и он мог жонглировать различными проектами в рамках своей хостовой машины, в локальной разработке мы используем контейнеризацию на основе Docker.
Все сервисы, необходимые для запуска конкретного проекта, описываются в docker-compose.yml, сервисы, необходимые для сборки и отладки проекта, — в файле docker-compose-build.yml. Управление контейнерами производится с помощью утилиты
docker-compose. Ну не ставить же каждому разработчику Docker Swarm или K8S 🤔Таким образом, мы разделяем runtime-контейнеры и контейнеры, необходимые для сборки частей frontend и backend. Конечно, никакого CI/CD тут нет — просто облегчаем жизнь разработчику.
Типовая конфигурация для docker-окружения хранится в корпоративных базовых шаблонах под каждый стек и разновидность веб-сервиса или сайта. Динамические параметры, зависящие от проекта, управляются с помощью удобного механизма переменных окружения и файла
.env.Приятный бонус заключается в том, что для сборки и локального запуска проекта мы заворачиваем соответствующие docker-compose-команды в Makefile. Теперь собрать и запустить проект можно в две команды:
$ make build
$ make up
Например, для запуска простого приложения в связке Nginx + PHP-FPM и сборки frontend-части с помощью Node.js можно использовать эти docker-compose.yml и docker-compose-build.yml. А управлять этими процессами — с помощью этого Makefile.
Упрощайте жизнь разработчикам, чтобы они думали об архитектуре приложения и чистом коде, а не об окружении и запуске 👨💻