Docker
September 22, 2023

Файловая структура рабочего окружения для разработки на 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
Находятся "_docker", "docker-compose.yml", "Makefile", README.md, ".git", "web", ".env", ".gitignore".

Отсюда запускаем команды 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
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/
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.