Чтобы установить Docker Web Stack сделайте его git clone и перейдите в директорию.
git clone ...
cd myProject1
Далее следуйте пунктам конфигурации и запуска.
###Подготовка зависимого софта на HOST машине### Для первичного запуска требуется следующий софт
###Обязательные действия перед запуском###
- Скопировать директорию nginx_template со всем содержимым в директорию nginx
- Скопировать директорию php-fpm_template со всем содержимым в директорию php-fpm
- Создать директорию data для ваших PHP файлов
- Скопировать файл конфигурации окружения из __env_tamplate в .env
А именно
cp nginx_template nginx -R
cp php-fpm_template php-fpm -R
mkdir data
cp __env_template .env
Только после этого можно переходить к конфигурации и запуску.
Если вам лень печатать эти 4 команды выше каждый раз при развертывании окружения, выполните скрипт createconfig.sh (1 раз), не следует выполнять этот скрипт несколько раз, т.к. он создает файлы и директории стандартной конфигурации из шаблонов.
./createconfig.sh
Сменить порты и название окружения можно (НУЖНО) в файле .env конкретного окружения. Это требуется для того, чтобы при создании контейнеров не конфликтовали порты для HOST машины (например порт NGINX). Настройка по умолчанию выглядит так:
На основе этих данных приведены ссылки ниже.
###Настройка NGINX### Nginx уже настроен по умолчанию, его конфигурация хранится в директории nginx, ее можно изменять.
###Настройка PHP7### PHP7 уже настроен по умолчанию, его конфигурация хранится в директории php-fpm, ее можно изменять.
###Запуск нескольких окружений### Для запуска нескольких окружений требуется сменить конфигурацию в файле .env (порты и название окружения) в скопированном docker-web-stack.
###Пересброка окружения с новой конфигурацией (это не требуется делать, если первый запуск еще не был произведен, первый запуск описан далее)### Если вы изменили файлы конфигурации после запуска (например, первичного запуска), и вы хотите пересобрать серверные контейнеры с новыми конфигурациями (к примеру, вы изменили файл php.ini или nginx.conf), то запустите следующую команду:
docker-compose build --no-cache
###Запустить все контейнеры (в режиме демонов)###
docker-compose up -d
###Завершить все контейнеры (с сохранением данных контейнеров)### docker-compose down
###Доступ к NGINX (PHP-FPM) (по умолчанию)### http://127.0.0.1:8080/
###Доступ к ADMINER (по умолчанию)### http://127.0.0.1:8082/?server=server1docker-www-stack-mariadb&username=root
Следует понимать что "server1" здесь - это переменная из файла .env
Также в MariaDB можно обращаться по адресу db :)
###Доступ к mysql и импорт дампов SQL в MariaDB### docker exec -it server1docker-www-stack-mariadb /bin/bash mysql -u root -p123 my_database < /tmp/sql_dumps/my_database_dump.sql
Следует понимать что "server1" здесь - это переменная из файла .env
###Пример создания дампов с боевого сервера в директорию sql_dumps### mysqldump -P 3306 -h IP_КАКОГО-ТО_СЕРВЕРА_MYSQL -u dbuser -p1234567 my_database_name > sql_dumps/dump.sql
###PHP-CLI - запуск консольных команд PHP### docker exec -it server1docker-www-stack-php-fpm /bin/bash example: cd /var/www/docker-www-stack/protected; php yiic.php
Следует понимать что "server1" здесь - это переменная из файла .env
###Адрес для подключения к MySQL###
- host={.env NAME}docker-www-stack-mariadb, т.е. если в файле .env указано NAME = server1, то адрес для подключения MYSQL будет равен: server1docker-www-stack-mariadb, т.е. в Adminer прямо так и указываем host: server1docker-www-stack-mariadb
- user=root (из файла .env)
- password=123 (из файла .env)
Следует понимать что "server1" здесь - это переменная из файла .env
- php-fpm 9000
- MariaDB 3306 (default)
- Memcached 11211 (default)
- Sendmail в PHP контейнере 1025
###Почта ### Sendmail сконфигурирован для отправки. Чтобы письма не попадали в спам сделайте PTR запись на сервере (Google).
###Composer и другой софт### Composer включен в PHP контейнер и доступен в нем глобально.
- git, curl
Вы можете управлять docker контейнерами как вам угодно, например так
docker run -d -p 9001:9000 -v /var/run/docker.sock:/docker.sock --name dockerui abh1nav/dockerui:latest -e="/docker.sock"
И далее зайти на http://127.0.0.1:9001/#/containers/ и UI и наблюдать там все ваши контейнеры.
Помимо этого, вы можете использовать абсолютно любой другой Docker UserInterface.
##Что делать если Nginx отдает 403 ошибку?## Если у вас после запуска NGINX отображает 403 страницу попробуйте через sudo поменять права на файлы на того пользователя группу от которого вы работаете на HOST машине например так
sudo chown user:user data -R
Далее - проверьте конфигурацию в директории nginx, чтобы там все было настроено верно, и путь к public директории ей соотвествовал, и остановите/запустите ваши контейнеры заново. В противном случае читаем логи в директории logs, а именно логи NGINX.
##Как настроить XDEBUG в PHPSTORM в том числе для CLI и Google Chrome?##
###Отладка PHP в браузере Google Chrome с плагином XDEBUG в PHPSTORM###
-
Следует указать имя сервера в NGINX, например - docker (для каждого окружения указывайте свои имена серверов)
-
Далее следует выключить и включить окружение заново, build в данном случае не требуется, только перезапуск
#!bash
docker-compose down
docker-compose up -d
-
В расширении XDEBUG Google Chrome следует выбрать IDE - PHPSTORM
-
В PHPSTORM требуется настройки сервера (имя сервера должно быть то, которое указывали в Nginx), и имя сервера должно быть равно тому, которое указано в nginx server_name (nginx.conf)
После этого debug должен заработать по F9 в PHPSTORM или по включению через кнопку плагина браузера (кнопка с зеленым жуком).
###Отладка PHP-CLI скриптов внутри контейнера с выводом в PHPSTORM###
- вначале коннектимся в консоль для запуска PHP-CLI внутри контейнера
#!bash
docker exec -it server1docker-www-stack-php-fpm /bin/bash
- далее обязательно 1 раз указываем в консоли наш сервер и его mapping в PHPSTORM следующим образом
#!bash
export PHP_IDE_CONFIG="serverName=docker"
- узнаем IP HOST машины (это та машина на которой запущен Docker и PHPSTORM) изнутри контейнера с PHP
#!bash
/sbin/ip route|awk '/default/ { print $3 }'
Отлично, мы узнали на какой HOST (в PHPSTORM) отдавать debug-информацию, теперь можем бесконечно запускать PHP-CLI скрипты внутри контейнера и отлаживать их в PHPSTORM.
- выполняем PHP-CLI скрипт внутри контейнера который стучится на наш PHPSTORM в режиме debug и указываем там ранее полученный IP
#!bash
php -dxdebug.remote_autostart=1 -dxdebug.remote_host=192.168.3.233 -dxdebug.remote_port=9000 index.php
Здесь 192.168.3.233 - это просто пример IP, IP мы узнаем командой выше.
##CRON?## Cron будет доступен в будущих версиях. Вы можете попробывать придумать что-то свое на данный момент. Сейчас можно выполнить PHP CLI скрипты (см. выше). Т.е. вы можете в HOST машине поднять крон и делать вызовы docker-exec [ЧТО-ТО, например php file.php] в php-fpm контейнере.
Порядок исполнения PHP-CLI скриптов через CRON HOST (родительской машины)
- добавляем нашего пользователя в /etc/cron.allow
- пишем в crontab-e нашего обычного юзера
#!bash
*/1 * * * * docker exec server1docker-www-stack-php-fpm php path/to/my/script.php
Важно - без параметра -it, иначе работать не будет, также не забудьте перевод каретки сделать после команды
И далее перезапускаем cron
#!bash
sudo service cron restart
Данный скрипт будет выполнен в среде контейнера PHP-FPM.
Домашняя страница проекта: FDEV.BIZ