Наконец-то у меня дошли руки разобраться с Docker и написать свою конфигурацию для работы с Vesp.

Теперь не нужно заморачиваться настройкой локального окружения через Valet, а можно просто запустить разработку в контейнере.

Вам будет доступна и база данных, и hot reload при разработке фронтенда, и даже Xdebug.

Установка

Для работы у вам уже должен быть установлен Docker на компьютере.

Скачиваем исходники из https://github.com/bezumkin/vesp.git, и переходим в директорию vesp/docker/. Затем переименовываем .env.dist в .env и запускаем docker-compose up.

Всё то же самое, только для любителей консоли:

git clone https://github.com/bezumkin/vesp.git
cd vesp/docker/
cp .env.dist .env
docker-compose up

В файле docker/.env находятся настройки и для контейнеров, и для запущенного внутри них Vesp.

При первом запуске придётся подождать минут 5-10, пока всё скачается и соберётся, но это только в первый раз, затем всё быстро.

Пока контейнеры запущены, вы будете видеть лог сообщений из них. Прервать работу можно обычным Ctrl+c,

Работа

После запуска вам доступны:

  • 127.0.0.1:8080/ - Nginx сервер, который открывает собранные версии сайта и админки + отвечает на API запросы.
  • 127.0.0.1:4000/admin/ - это админка в режиме разработки
  • 127.0.0.1:4100/ - веб-сайт в режиме разработки
  • 127.0.0.1:3333 - внешний порт MySQL, база vesp, юзер и пароль такие же

Теперь нужно зайти в контейнер с PHP и запустить наши миграции. Вход делается командой docker exec -it idконтейнера, и чтобы не узнавать каждый раз этот id, делаем вот так:

docker exec -it $(docker ps --filter ancestor="vesp-php-fpm" -q) bash

Вы окажетесь в обычной консоли сервера, сразу в рабочей директории, где можно запускать composer:

composer install
composer db:migrate
composer db:seed

Если вдруг эта команда не сработает, то попробуйте зайти в консоль из десктопного приложения, там заходить в контейнеры можно прямо через интерфейс.

Статичные страницы для Nginx собираются в том случае, если при запуске контейнеров не было обнаружено директории frontend/dist. Так что если хотите пересобрать статику, то просто удалите эту директорию и перезапустите контейнеры.

Xdebug

В контейнере с PHP встроен Xdebug, и вы можете легко использовать его для отладки в PhpStorm.

Первым делом создаём новый сервер с обязательным именем VespDocker, прописываем адрес и порт контейнера Nginx и задаём соответствие 2х директорий: core и www:

Ну и настраиваем сам Xdebug примерно так:

Дальше указываем точку остановки где-нибудь в проекте, например в api.php и жмём на трубку в правом верхнем углу, чтобы она стала зелёной:

Теперь при каждом запросе в API ваш PhpStorm будет тормозить в указанном месте и ждать, пока вы там всё посмотрите.

Заключение

Выражаю благодарность Евгению Терину за его конфиги docker-compose, которыми я вдохновлялся, пока писал свои.

Надеюсь теперь познакомиться и начать работу с Vesp будет проще!

Обновлено 25.07.2022

Как оказалось, из-за особенностей работы MacOS с файловой системой, Docker в ней работает не очень быстро.

Почитал о проблеме и добавил работу через Mutagen Compose, который меняет логику синхронизации файлов между хостом и доком, ускоряя её разы.

Установить его можно через Homebrew:

brew install mutagen-io/mutagen/mutagen mutagen-io/mutagen/mutagen-compose

А затем запускать mutagen-compose вместо docker-compose:

mutagen-compose -f ./mutagen-compose.yml up --build

То есть, теперь у Vesp есть стандартный docker-compose.yml, и расширенный mutagen-compose.yml, которые запускаются разными командами.

И чтобы вам не заморачиваться их запоминанием, я добавил скрипт run.sh, который пытается запустить контейнеры через mutagen, а если его нет, то стандартным способом.

Разница между ними очень серьёзная. Установка зависимостей Node.js на моём Mac Mini M1 занимает:

  • 245 секунд стандартным docker-compose
  • 90 секунд при запуске через mutagen-compose
  • 71 секунда при установке вообще без Docker, с локальным Node.js

Таким образом, если вы хотите работать с Docker на MacOS, обязательно установите Mutagen, это даст вам производительность сопоставимую с нативной работой с файлами.

← Предыдущая заметка
Быстрый личный VPN через Wireguard
Следующая заметка →
Тестируем VirtioFS в Docker
Комментарии (10)
NightRider
23.10.2022 15:30

Что-то установка падает на этапе установки xdebug.

Step 6/12 : RUN pecl install xdebug
---> Running in 00684a0e23b5
Package "xdebug" Version "3.1.5" does not have REST xml available install failed
ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c pecl install xdebug' returned a non-zero code: 1

NightRider
23.10.2022 20:44

Это на Ubuntu 22.04 такая ошибка, а на Маке всё поднялось.

bezumkinВасилий Наумкин
24.10.2022 06:12

У меня в последнее время бывают подобные ошибки из-за плохой связи. Исправляется повторной попыткой, или включением VPN.

Думаю это потому, что основные репозитории Docker находятся за рубежом, и соединение не всегда стабильное.

Сейчас проверил на Ubuntu 22.04.1 LTS - нет проблем, всё сразу завелось.

NightRider
24.10.2022 11:17

Понял, буду пробовать ещё. С Днём Рождения! )

bezumkinВасилий Наумкин
24.10.2022 15:10

Спасибо!

ni.kolokol@mail.ruНиколай Каленников
03.11.2022 14:49

Тоже Ubuntu 22.04. Все собралось успешно. Но почему-то запросы к api вылетают с 500 ошибкой. В консоли браузера показывает ошибку CORS, хотя в файле настроек CORS=1.

bezumkinВасилий Наумкин
03.11.2022 17:14

Это ошибка бэкенда - смотри логи.

ni.kolokol@mail.ruНиколай Каленников
03.11.2022 19:17

Ничего подозрительного в логах не нашел. Но вот когда меняешь урл с http://localhost:8080 на http://127.0.0.1:8080 то в админке авторизует без ошибки и все работает. Для портов 4000 и 4100 такой фокус не проходит.

bezumkinВасилий Наумкин
03.11.2022 19:36

Но вот когда меняешь урл с http://localhost:8080 на http://127.0.0.1:8080 то в админке авторизует без ошибки

Ну тогда дело и правда в CORS.

Но я только что по своей инструкции всё повторил с нуля и ошибок нет.

ni.kolokol@mail.ruНиколай Каленников
03.11.2022 19:43

Спасибо. Попробую тоже с нуля переставить

born2slip
pishnaa istntome
22.11.2022 14:06
огромное спасибо! )
inetlover
Александр Наумов
14.11.2022 10:19
посмотри документацию. Спасибо, что-то она мне не нагуглилась. Это просто функции объединения для о...
bezumkin
Василий Наумкин
10.11.2022 05:46
Спасибо за поздравления!
inetlover
Александр Наумов
09.11.2022 17:08
Посмотрел в ДевТулсе свойство overscroll-behavior: none; присутствует, проверил в Chrome и Chromium ...
bezumkin
Василий Наумкин
03.11.2022 20:57
Поискать в исходниках ссылки на её адрес и поменять - скорее всего только nuxt.config.js. А зачем эт...
ni.kolokol@mail.ru
Николай Каленников
03.11.2022 19:43
Спасибо. Попробую тоже с нуля переставить
inetlover
Александр Наумов
03.11.2022 19:24
Спасибо!!! Все заработало!
bezumkin
Василий Наумкин
28.10.2022 05:23
В тексте есть подсказка // Контроллер требует новое разрешение protected $scope = 'ord...
bezumkin
Василий Наумкин
27.10.2022 13:25
Понял, спасибо!
inetlover
Александр Наумов
23.10.2022 13:33
Понял, спасибо!