Для начала вам необходимо создать контейнерную среду, способную выполнять PHP и Composer, инструмент управления зависимостями PHP. После этого вы сможете загрузить новое приложение Laravel с нуля без необходимости устанавливать локальную среду PHP на локальном компьютере или сервере разработки.

В этом руководстве будут представлены упрощенные инструкции по настройке этой среды на основе нашего руководства «Как установить Laravel с помощью Docker Compose в Ubuntu 20.04». Обратитесь к этому руководству для получения более подробных инструкций по каждому из параметров, используемых в файле Docker Compose, который будет представлен в этом руководстве.

Создайте новый каталог для вашего приложения в вашей домашней папке:

Далее вы создадите файл docker-compose.yml , который будет определять контейнерную среду. В этом файле вы настроите службу с именем app , которая будет основана на пользовательском образе Docker, созданном с помощью файла Dockerfile, который вы настроите позже.

Аргументы сборки user и uid , определенные в файле docker-compose.yml и используемые в Dockerfile во время сборки, должны быть изменены, чтобы отразить ваше собственное имя пользователя и uid на вашем локальном компьютере или сервере разработки. Чтобы узнать идентификатор текущего пользователя, введите:

Переменные user и uid будут доступны во время сборки и будут использоваться в Dockerfile для создания нового пользователя в службе app с тем же именем пользователя и uid, что и у текущего пользователя системы на локальном компьютере или сервере разработки. Это позволит избежать проблем с разрешениями и владением при работе с файлами приложения как из контейнера, так и с хоста, на котором выполняется Docker.

Создайте новый файл docker-compose.yml используя любой текстовый редактор. Здесь используется nano :

Скопируйте в этот файл следующее содержимое и не забудьте заменить выделенные значения соответствующими значениями в зависимости от вашего имени пользователя и uid в системе, на которой работает Docker:

~/landing-laravel/docker-compose.yml

Сохраните и закройте файл, когда закончите. Если вы используете nano , вы можете сделать это, нажав CTRL + X , затем Y и ENTER для подтверждения.

Далее вы настроите Dockerfile, на который есть ссылка в файле docker-compose.yml , который настроит собственный образ для службы app :

Этот файл Dockerfile является продолжением образа Docker php:7.4-fpm по умолчанию. Он использует переменные user и uid для создания нового пользователя, способного выполнять команды Artisan и Composer. Он также устанавливает несколько зависимостей PHP, необходимых для Laravel, и исполняемый файл Composer.

Скопируйте следующий контент в свой Dockerfile:

~/мой-список-задач/Dockerfile

Сохраните и закройте файл, когда закончите. Далее вы можете создать свою среду с помощью:

Эта команда выполнит Docker Compose в автономном режиме, то есть в фоновом режиме. Когда вы впервые создаете среду с пользовательским образом, Docker Compose автоматически создаст для вас образ перед созданием необходимых контейнеров. Это может занять несколько минут. Вы увидите вывод, похожий на этот:

Вы можете убедиться, что ваша среда запущена и работает с помощью:

После запуска службы app вы можете запустить Composer, инструмент управления зависимостями PHP, чтобы загрузить новое приложение Laravel. Для этого вы будете использовать docker compose exec для запуска команд в службе app , где установлен PHP.

Следующая команда будет использовать Docker Compose для выполнения composer create-project , который загрузит новую установку Laravel на основе пакета laravel/laravel :

Эта установка создает новый файл .env на основе файла .env.example по умолчанию, который поставляется с Laravel. Файл .env содержит учетные данные базы данных и другие конфиденциальные параметры приложения и должен быть уникальным для каждой среды, в которой работает приложение. Вы вернетесь для редактирования этого файла после завершения настройки среды разработки.

Затем скопируйте файлы приложения в тот же каталог, что и файл docker-compose.yml , чтобы вы могли поделиться файлом переменных среды Laravel с Docker Compose. Затем вы можете удалить каталог application , созданный Composer:

Ваше приложение теперь загружено, но вам нужно будет включить пару сервисов в файл Docker Compose, чтобы иметь возможность доступа к приложению из браузера. Служба nginx будет обслуживать приложение с помощью веб-сервера Nginx, а служба db будет размещать базу данных MySQL приложения.

Во-первых, down свою среду с помощью:

Это приведет к удалению всех контейнеров и сетей, связанных с этой средой. Прежде чем редактировать файл docker-compose.yml для добавления новых служб, создайте новый каталог для совместного использования файлов конфигурации с контейнерами. Это понадобится вам, чтобы правильно настроить Nginx для работы с PHP-приложением Laravel.

Затем создайте новый файл landing-laravel.conf , содержащий пользовательский блок сервера Nginx. Позже вы настроите том для совместного использования этого файла в сервисном контейнере nginx .

Откройте новый файл конфигурации Nginx с помощью:

Следующий блок сервера настраивает Nginx для обслуживания приложения Laravel с использованием внешнего сервиса ( app ) для обработки PHP-кода. Скопируйте это содержимое в свой файл конфигурации Nginx:

docker-compose/nginx/landing-laravel.conf

Сохраните и закройте файл, когда закончите.

Затем откройте файл docker-compose.yml :

Включите следующую конфигурацию для службы nginx на том же уровне, что и ранее настроенная служба app . Это создаст новый сервис на основе образа nginx:alpine , и все запросы на порт 8000 хоста, на котором работает Docker, будут перенаправлены на порт 80 в контейнере сервиса. Помимо файлов приложения, вы также предоставите общий доступ к тому, содержащему файл конфигурации Nginx для приложения Laravel:

Затем включите следующий блок конфигурации для службы db . Это создаст службу на основе образа MySQL 8 по умолчанию и извлечет значения, определенные в файле среды Laravel, для настройки доступа к базе данных:

Вот как должен выглядеть обновленный файл docker-compose.yml после завершения:

~/landing-laravel/docker-compose.yml

Note . Для получения более подробной информации о контейнеризации сред Laravel, включая пояснения об общих томах и сетях, обратитесь к нашему полному руководству «Как установить Laravel с помощью Docker Compose в Ubuntu 20.04».

Сохраните и закройте файл, когда закончите редактирование. Наконец, обновите ваш точечный env-файл Laravel ( .env ), чтобы указать конфигурацию хоста базы данных MySQL на хост, на котором будет работать служба MySQL, называемый db :

Файл .env , который автоматически создается Composer при установке, содержит некоторые значения по умолчанию, которые вы, возможно, захотите изменить, например APP_NAME и APP_URL . Переменную базы данных DB_HOST необходимо изменить, чтобы она указывала на службу, в которой будет работать MySQL, и вы можете ссылаться на нее по имени службы, как определено в файле docker-compose.yml . В этом примере вы использовали db в качестве имени службы базы данных, поэтому она будет доступна в контейнерной сети как хост с именем db .

Измените свой .env соответствующим образом, используя следующий пример в качестве основы. Выделенные значения были обновлены здесь, чтобы отразить состояние разрабатываемого приложения:

~/landing-laravel/.env

Вам не нужно изменять какие-либо другие разделы этого файла, но вы можете настроить его в соответствии с вашим конкретным вариантом использования.

Сохраните и закройте файл, когда закончите редактировать его содержимое.

Теперь вы можете запустить обновленную среду с помощью:

После полной настройки среды вы можете теперь указать в своем браузере localhost или IP-адрес вашего удаленного сервера через порт 8000 :

Если все работает как положено, вы увидите такую страницу:

Laravel Landing Links — базовое приложение

В следующей части этой серии вы создадите миграцию базы данных для настройки таблицы links .