Для запуска данного шаблона необходимы docker и docker-compose
Обратите вниимание на особенности установки - apt не позволяет добыть нужные версии
Ниже приведу последовательность действий для запуска на Ubuntu
1.Установить docker и docker-compose по ссылкам выше.
1.1. Создать файл локальных настроек .env
.env_example
- пример локальных настроек docker-compose
.
Должен быть скопирован в .env
для запуска в режиме разработки docker-compose -f docker-run/docker-compose.yml up -d
или тестов docker-compose -f docker-codeception-run/docker-compose.yml up -d
.
Файл .env
должен присутствовать в папке из которой выполняется команда docker-compose
.
cp .env_example .env
ln -s ../.env ./docker-codeception-run/.env
ln -s ../.env ./docker-run/.env
2.Создать папку проекта
$ git clone https://github.com/bscheshirwork/docker-yii2-advanced-rbac newproject
либо вручную, если отсутствует git - из архива
В ней [docker-compose.yml](./docker-run/docker-compose.yml)
служит для установки конфигурации Вашей будущей связки сервисов. Для дебага не забудьте изменить соответствующую переменную окружения, подставив адрес вашей машины вместо указанного для примера.
3.Загрузить и запустить сервис php
Если Вы хотите запустить на одной машине несколько копий такой сборки - обратите внимани на то, чтобы папки (и соответственно префикс композиции, в примере "dockerrun_") имели разное название. Также переменные окружения для mysql необходимо дифференцировать по проектам. Несоблюдение данного правила будет приводить к ошибкам подключения к базе.
$ cd newproject/docker-run
$ docker-compose run php /bin/bash
Creating network "dockerrun_default" with the default driver
Creating dockerrun_db_1
root@abfe3b3ca645:/var/www/html#
дальнейшие команды будут выполнятся из консоли этого контейнера:
root@abfe3b3ca645:/var/www/html#
Одиночные команды можно выполнить и без этого
docker-compose -f docker-run/docker-compose.yml run --rm php composer update
4.Загрузить зависимости composer
в контейнере. Обнление потребует github token (см. установку yii2 ), его вы можете найти на своей странице в разделе https://github.com/settings/tokens
Кеш композера можно вынести из контейнера, для поддержания его в чистоте и ускорения работы новых контейнеров сервиса php
- ~/.composer/cache:/root/.composer/cache
composer update -vv
5.Инициализировать шаблон скриптом, аналогично исходному шаблону advanced
Выберете покружение development [0]
в скрипте инициализации
./init
что создаст настройки и скрипт yii
для следующего шага. Настройки базы уже установлены для окружения,
их согласно вашим нуждам можно изменить(docker-codeception-run/docker-compose.yml
, docker-run/docker-compose.yml
, php-data/common/config/main.php
- требуется root).
Внимание! Возникла ошибка доступа? При изменении настроек базы после её первого запуска не забываем останавливать композицию
docker-compose down
и чистить файлы базыsudo rm -rf ../mysql-data/*
; Возникла ошибкаSQLSTATE[HY000] [2002] Connection refused
- база не успела поднятся.
5.1.Выполнить миграции внутри контейнера
/usr/local/bin/docker-compose -f /home/dev/projects/docker-yii2-app-advanced-redis/docker-compose.yml exec php ./yii migrate/up
Самое время создать дамп базы (например, такой метод использовался при создании используемого в тестах). При запущенном контейнере
dockerrun_db_1
либоdockercodeceptionrun_db_run_1
используем согласно документации в описании образа
docker exec dockerrun_db_1 sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" yii2advanced' > php-data/common/tests/_data/dump.sql
При восстановлении необходимо добавить ключ -i
для перенаправления ввода.
docker exec -i dockercodeceptionrun_db_1 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" yii2advanced' < php-data/common/tests/_data/dump.sql
5.2.При выполнении последней мигации вы проведёте инициализацию rbac см. общая инструкция установки шаблона. Первый пользователь получит права администратора.
Создать пользователя можно тут же, командой
./yii user/create [email protected] login
В случае ошибки на этапе создания первого пользователя права не будут выданы. Верните базу в первоначальный вид и попробуйте снова.
email можно прочесть в папке php-data/console/runtime/mail
Примечание: Для отправки почты (сообщение о регистрации, восстановление пароля, подтверждение ночты в модуле пользователей) необходимо настроить отправку почты, согласно соответствующему пункту инструкции
6.Выйти из контейнера (exit
, ctrl+c) и запустить комплекс сервисов
$ docker-compose up -d
Creating network "dockerrun_default" with the default driver
Creating dockerrun_db_1
Creating dockerrun_php_1
Creating dockerrun_nginx_1
Сервис доступен по адресу 0.0.0.0:8080
- frontend, 0.0.0.0:8081
- backend
Для работы с xdebug используются переменные среды. Например,
remote_host
может быть вашим IP адресом (вне docker network) или вашим DNS, если вы используете dns-server (например, локальный dns server или dns-server на вашем роутере. В последнем случае у вас может быть DNS совпадающее с именем машины).
Docker может использовать данные этого dns сервера внутри запущенного контейнера и, соответственно, найти нуный IP.
Для
mac OS
возможно использование специального служебного имени хостаhost.docker.internal
.
cat /etc/hosts
127.0.1.1 dev-Aspire-V3-772
XDEBUG_CONFIG: "remote_host=dev-Aspire-V3-772 remote_port=9001"
PHP_IDE_CONFIG: "serverName=docker-yii2-advanced-rbac"
В PHPStorm настроить следующее:
Добавить сервер с указанным в перемнной PHP_IDE_CONFIG именем
Settings > Languages & Frameworks > PHP > Servers: [Name => docker-yii2-advanced-rbac]
В нём изменить path mapping.
Settings > Languages & Frameworks > PHP > Servers: [Use path mapping => True, /home/user/yourprojectname/php-data => /var/www/html]
Изменить порт по умолчанию 9000 на используемый в настройках
Settings > Languages & Frameworks > PHP > Debug: [Debug port => 9001]
см. docker-run/docker-compose.yml#L13
remote_port=9001
Для существующих проектов, использующих MySQL 8.0.12
необходимо выолнить стандартный скрипт обновления:
docker-compose up -d
docker-compose exec mysql mysql_upgrade -uroot -p
Подробности в описании обновлений https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html