Файловая структура рабочего окружения для разработки на PHP
Ранее я ставил все программы в операционную систму и php и composer и nginx и mariaDB и все остальное. Не зависимо от того пишу код или нет, всегда были запущены сервер базы данных веб-сервер и куча других приложений, которые были необходимы.
Затем, я перенес php, nginx и mysql в докер-контейнеры, но composer по прежнему устанавливал в операционную систему. Лишняя нагрузка, когда не пишу код исчезла, появилась возможность изолированно в контейнерах запускать приложения разных версий.
Теперь я в операционной системе ничего не устанавливаю связанного с программированием. За исключение PhpStorm и Docker. Все остальное полностью в контейнерах. В компе нет ничего лишнего, если не пишу код, система ничем не замусорена.
Настройка приложения
Рабочии директории любых приложений у меня выглядят одинаково, за небольшими исключениями.
/my_project_name_directory ├── /_docker │ ├── /app │ │ ├── Dockerfile │ │ └── php.ini │ └── /conf.d │ └── nginx.conf ├── docker-compose.yml ├── Makefile ├── README.md ├── .env ├── .gitignore ├── /.git └── /web ├── composer.json ├── composer.lock ├── /vendor ├── /public │ └── index.php └── /tests └── indexTest.php
В корневой директории my_project_name_directory
Находятся "_docker", "docker-compose.yml", "Makefile", README.md, ".git", "web", ".env", ".gitignore".
Здесь же используем консольный терминал:
~/Projects/my_project_name_directory > ls
Отсюда запускаем команды git, docker-compose, make.
Назначение файлов и директорий
/_docker ├── /app │ ├── Dockerfile │ └── php.ini └── /conf.d └── nginx.conf
Dockerfile - содержит настройки виртуальной операционной системы и пакеты необходимые к установке.
Рабочая директория проекта настроена на web:
WORKDIR /var/www/html/web/
Эта настройка соответствует директории web в проекте:
my_project_name_directory/web
/var/www/html/web/ в виртуальной операционной системе в Докер будет соответствовать my_project_name_directory/web в проекте.
php.ini - файл для конфигурации php.
nginx.conf - файл для настройки виртуального хоста веб-сервера Nginx.
В виртуальном хосте индексный файл настроен на: my_project_name_directory/web/public
/web ├── /public └── index.php
Все о том, как настроить Докер здесь.
/web - содержит файлы приложения, а так же файл конфигурации composer.json и директорию vendor со сторонними библиотеками.
/web ├── composer.json ├── composer.lock ├── /vendor ├── /public │ └── index.php └── /tests └── indexTest.php
~/Projects/my_project_name_directory > ls web/
Как использовать команды внутри Докер
После запуска докер-контейнеров:
~/Projects/my_project_name_directory > docker-compose up -d
Можем проверить composer.json на валидность:
~/Projects/my_project_name_directory > docker-compose exec php composer validate
Этой командой мы запустим php не у себя в системе, а в докер-контейнере, в котором установлен php и composer.
Так же можем запускать проверку unit-тестов:
~/Projects/my_project_name_directory > docker-compose exec php vendor/bin/phpunit tests/ --colors always
~/Projects/my_project_name_directory > docker-compose exec php composer require guzzlehttp/guzzle
Таким образом, можно вести разработку приложения полностью изолированно в докер-контейнерах не устанавливая ПО в корневую операционную систему.
Мою версию рабочего окружения можно скачать с GitHub.