Как DDEV усмиряет Docker и спасает локальную разработку
Знакомая история: вы приходите в новый проект, открываете README, а там список инструкций на три страницы. Установите PHP 8.1, но для этого модуля нужна версия 7.4, не забудьте про расширение gd, настройте vhosts, поднимите MySQL... В итоге полдня уходит на борьбу с окружением вместо написания кода. Даже Docker не всегда спасает, потому что писать и поддерживать монструозные docker-compose.yml — то еще удовольствие.
Недавно я наткнулся на DDEV. Это опенсорсный инструмент, который берет на себя всю грязную работу по настройке Docker-контейнеров для PHP и Node.js проектов. По сути, это обертка над Docker, которая делает локальную разработку предсказуемой и, что самое главное, быстрой.
Что это такое и зачем оно вам
DDEV — это CLI-утилита, написанная на Go. Она создает стандартизированную среду разработки, которую можно засунуть в Git и раздать всей команде. Больше никакой фразы «а у меня на компьютере все работает».
Проект ориентирован в первую очередь на веб-разработчиков. Если вы пишете на PHP (Drupal, WordPress, Laravel, Symfony, TYPO3) или используете Node.js, DDEV может стать вашим основным инструментом. Он поддерживает macOS (включая Apple Silicon), Windows через WSL2 и Linux.
Чем DDEV отличается от обычного Docker Compose
Когда мы используем «чистый» Docker, нам приходится самим думать о пробросе портов, сертификатах для HTTPS, связи между контейнерами и правах доступа к файлам. DDEV автоматизирует эти процессы.
Мгновенный старт
Вам не нужно писать конфиги с нуля. Команда ddev config задаст пару вопросов о типе проекта и версии PHP, а затем сама создаст папку .ddev с нужными настройками. После этого ddev start поднимает всю инфраструктуру.
Честный HTTPS из коробки
Настройка SSL-сертификатов для локальных доменов всегда была головной болью. DDEV решает это одной командой. Он создает доверенный локальный центр сертификации, и ваши сайты открываются по HTTPS без предупреждений браузера о небезопасном соединении.
Управление базами данных
Импорт дампа базы данных часто превращается в квест с поиском правильного клиента или использованием docker exec. В DDEV есть встроенная команда ddev import-db, которая сама закинет ваш .sql или .sql.gz файл в контейнер. А если нужно быстро откатиться назад, можно сделать снапшот базы через ddev snapshot.
Переключение версий на лету
Нужно проверить, как ведет себя сайт на PHP 8.3, хотя сейчас стоит 8.1? Просто меняете одну строчку в конфиге или выполняете команду, и через 10 секунд у вас обновленное окружение. DDEV поддерживает огромный диапазон версий — от древней PHP 5.6 до актуальной 8.5.
Как это выглядит в работе
Представьте, что вам нужно развернуть стандартный проект. Весь процесс сводится к нескольким командам в терминале:
# Инициализируем проект
ddev config --project-type=wordpress
# Запускаем контейнеры
ddev start
# Импортируем базу, если она есть
ddev import-db --file=dump.sql.gz
# Открываем сайт в браузере
ddev launch
Интересно, что DDEV не ограничивает вас стандартными контейнерами. Если проекту нужен Redis, Memcached или Solr, они добавляются как аддоны. У сообщества есть целый репозиторий готовых расширений, которые подключаются за пару минут.
Техническая сторона вопроса
Под капотом DDEV использует Docker и Docker Compose, но полностью скрывает их сложность. Он создает контейнеры для веб-сервера (Nginx или Apache на выбор), базы данных (MariaDB, MySQL или PostgreSQL) и вспомогательных сервисов вроде Mailpit для перехвата писем.
Весь проект написан на Go, что делает CLI очень шустрым. Для связи между хостом и контейнерами используется мутировавший docker-gen, который на лету обновляет конфигурацию прокси-сервера.
Кстати, о прокси. DDEV запускает один глобальный контейнер-маршрутизатор. Это позволяет держать запущенными десяток разных проектов одновременно, и каждый будет доступен по своему доменному имени вида my-project.ddev.site. Вам не нужно следить за тем, чтобы порты не пересекались.
Практические кейсы
Я вижу несколько сценариев, где DDEV действительно экономит время:
- Онбординг новичков. Вместо того чтобы тратить два дня на настройку софта, новый разработчик просто клонирует репозиторий и пишет
ddev start. - Тестирование разных веток. Если в одной ветке проекта нужна одна версия БД, а в другой — другая, DDEV переключит их без следов в системе.
- Демонстрация работы. Команда
ddev shareпозволяет временно «выставить» ваш локальный сайт в интернет через ngrok, чтобы клиент или коллега могли посмотреть на результат.
Стоит ли пробовать
DDEV — это не «еще один способ запустить Docker». Это инструмент, который превращает хаос локальных настроек в строгую систему.
Кому он точно подойдет:
- Командам, которые устали синхронизировать окружения.
- Фрилансерам, которые ведут много разноплановых проектов на разных CMS.
- Тем, кто не хочет глубоко нырять в дебри администрирования Docker, а хочет просто писать код.
Если ваш стек — это PHP и Node.js, попробуйте развернуть следующий проект через DDEV. Скорее всего, возвращаться к ручной правке конфигов Apache или написанию длинных docker-compose.yml вам больше не захочется.
Посмотреть исходники и документацию можно в официальном репозитории: ddev/ddev. Там же есть отличные Quick Start гайды под каждую популярную CMS.
