Skip to content

Docker [ NGINX + PHP7 + MARIADB + SENDMAIL + COMPOSER + MEMCACHED ] solution.

License

Notifications You must be signed in to change notification settings

lxfr/docker-www-stack

Repository files navigation


#Установка#

Чтобы установить 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.


#F.A.Q.#

##Что делать если 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 (родительской машины)

  1. добавляем нашего пользователя в /etc/cron.allow
  2. пишем в 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

About

Docker [ NGINX + PHP7 + MARIADB + SENDMAIL + COMPOSER + MEMCACHED ] solution.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published