Docker с Nginx, PHP-FPM, Composer, MySQL, PDO and PHPMyAdmin.
Написать класс init, от которого нельзя сделать наследника, состоящий из 3 методов: create() - доступен только для методов класса, создает таблицу test, содержащую 5 полей:
- id целое, автоинкрементарное;
- script_name строковое, длиной 25 символов;
- start_time timestamp с автозаполнением;
- sort_index целое (значения не превышают 3-х разрядов);
- result один вариант из 'normal', 'illegal', 'failed', 'success';
fill() - доступен только для методов класса, заполняет таблицу случайными данными; get() - доступен извне класса, выбирает из таблицы test, данные по критерию: result среди значений 'normal' и 'success'. В конструкторе выполняются методы create и fill.
Весь код должен быть прокомментирован в стиле PHPDocumentorа.
На данный момент этот проект создан для работы в Unix (Linux/MacOS)
. Для MacOS тестирование не проводилось. Возможно он будет работать на Windows 10.
Необходимые программы
Проверьте установлен лиdocker-compose
следующей командой:
which docker-compose
Если нет, то установите его.
В этом проекте используются следующие порты:
Server | Port |
---|---|
MySQL | 8989 |
PHPMyAdmin | 8080 |
Nginx | 8000 |
Nginx SSL | 3000 |
Установите Git, загрузите репозиторий локально
git clone https://github.com/Lelya/docker-nginx-php-mysql-pdo.git
Перейдите в папку проекта:
cd docker-nginx-php-mysql-pdo
.
├── Makefile
├── README.md
├── data
│ └── db
│ ├── dumps
│ └── mysql
├── doc
├── docker-compose.yml
├── etc
│ ├── nginx
│ │ ├── default.conf
│ │ └── default.template.conf
│ ├── php
| | └── Dockerfile
│ │ └── php.ini
│ └── ssl
└── web
├── app
│ ├── composer.json.dist
│ ├── src
│ │ └── Init.php
└── public
└── index.php
Вы можете изменить имя сервера отредоктировав .env
file.
Если вы изменили имя сервера, то не забудьте добавить его в /etc/hosts
файл.
-
Генерация SSL certificates
source .env && sudo docker run --rm -v $(pwd)/etc/ssl:/certificates -e "SERVER=$NGINX_HOST" jacoelho/generate-certificate
-
Конфигурация Nginx
Не изменяйте
etc/nginx/default.conf
файл, он перезаписывается сetc/nginx/default.template.conf
Отредактируйте
etc/nginx/default.template.conf
и расскоментируйте раздел ssl:# server { # server_name ${NGINX_HOST}; # # listen 443 ssl; # fastcgi_param HTTPS on; # ... # }
-
Скопируйте конфигурационный файл composer.json:
cp web/app/composer.json.dist web/app/composer.json
-
Запуск приложения :
sudo docker-compose up -d
Это может занять несколько минут, пока подгрузятся все зависимости
sudo docker-compose logs -f # Follow log output
-
Откройте в браузере:
- http://localhost:8000
- https://localhost:3000 (HTTPS не сконфигурирован по умолчанию)
- http://localhost:8080 PHPMyAdmin (username: dev, password: dev)
-
Остановка и очистка сервисов
sudo docker-compose down -v
sudo docker run --rm -v $(pwd)/web/app:/app composer require symfony/yaml
sudo docker run --rm -v $(pwd)/web/app:/app composer update
sudo docker-compose exec -T php php -d memory_limit=256M -d xdebug.profiler_enable=0 ./app/vendor/bin/apigen generate app/src --destination ./app/doc
sudo docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app
Стандартизация кода с PSR2
sudo docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src
Проверка стандартизации кода с PSR2
sudo docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src
Анализ кода с PHP Mess Detector
sudo docker-compose exec -T php ./app/vendor/bin/phpmd ./app/src text cleancode,codesize,controversial,design,naming,unusedcode
sudo docker-compose exec php php -m