Для начала вам необходимо создать контейнерную среду, способную выполнять PHP и Composer, инструмент управления зависимостями PHP. После этого вы сможете загрузить новое приложение Laravel с нуля без необходимости устанавливать локальную среду PHP на локальном компьютере или сервере разработки.
В этом руководстве будут представлены упрощенные инструкции по настройке этой среды на основе нашего руководства «Как установить Laravel с помощью Docker Compose в Ubuntu 20.04». Обратитесь к этому руководству для получения более подробных инструкций по каждому из параметров, используемых в файле Docker Compose, который будет представлен в этом руководстве.
Создайте новый каталог для вашего приложения в вашей домашней папке:
мкдир ~/ посадка-laravel
компакт-диск ~/ посадка-laravel
Далее вы создадите файл docker-compose.yml , который будет определять контейнерную среду. В этом файле вы настроите службу с именем app , которая будет основана на пользовательском образе Docker, созданном с помощью файла Dockerfile, который вы настроите позже.
Аргументы сборки user и uid , определенные в файле docker-compose.yml и используемые в Dockerfile во время сборки, должны быть изменены, чтобы отразить ваше собственное имя пользователя и uid на вашем локальном компьютере или сервере разработки. Чтобы узнать идентификатор текущего пользователя, введите:
эхо$UID
Выход
1000
Переменные user и uid будут доступны во время сборки и будут использоваться в Dockerfile для создания нового пользователя в службе app с тем же именем пользователя и uid, что и у текущего пользователя системы на локальном компьютере или сервере разработки. Это позволит избежать проблем с разрешениями и владением при работе с файлами приложения как из контейнера, так и с хоста, на котором выполняется Docker.
Создайте новый файл docker-compose.yml используя любой текстовый редактор. Здесь используется nano :
нано docker-compose.yml
Скопируйте в этот файл следующее содержимое и не забудьте заменить выделенные значения соответствующими значениями в зависимости от вашего имени пользователя и uid в системе, на которой работает Docker:
~/landing-laravel/docker-compose.yml
version:"3.7"services:app:build:args:user: Сэмми идентификатор:1000контекст:./dockerfile:изображение Dockerfile : лендинг - приложение перезапуск: если - не прекратил работу_dir: /var/www/ тома:- ./ : /var/www сети:- приземление сети:приземление:водитель: мост
Сохраните и закройте файл, когда закончите. Если вы используете nano , вы можете сделать это, нажав CTRL + X , затем Y и ENTER для подтверждения.
Далее вы настроите Dockerfile, на который есть ссылка в файле docker-compose.yml , который настроит собственный образ для службы app :
нано Dockerfile
Этот файл Dockerfile является продолжением образа Docker php:7.4-fpm по умолчанию. Он использует переменные user и uid для создания нового пользователя, способного выполнять команды Artisan и Composer. Он также устанавливает несколько зависимостей PHP, необходимых для Laravel, и исполняемый файл Composer.
Скопируйте следующий контент в свой Dockerfile:
~/мой-список-задач/Dockerfile
FROM php : 7.4 - fpm # Arguments defined in docker-compose.yml ARG АРГ жидкость # Установить системные зависимости RUN apt - get update && apt - get install - y git Curl libpng - dev libonig - dev libxml2 - dev zip unzip # Очистить кэш RUN apt - get clean && rm - rf /var /lib/apt/lists/* # Установить расширения PHP RUN docker - php - ext - install pdo_mysql mbstring exif pcntl bcmath gd # Получить последнюю версию Composer COPY -- from=composer : последний /usr/bin/composer /usr/bin/composer # Создайте системного пользователя для запуска команд Composer и Artisan RUN useradd -G www - data , root - u $uid - d /home/$user $user RUN mkdir - p /home/$user/.composer && chown - R $ user : $user /home/$user # Установить рабочий каталог WORKDIR /var/www USER $user
Сохраните и закройте файл, когда закончите. Далее вы можете создать свою среду с помощью:
докер-составить-d
Эта команда выполнит Docker Compose в автономном режиме, то есть в фоновом режиме. Когда вы впервые создаете среду с пользовательским образом, Docker Compose автоматически создаст для вас образ перед созданием необходимых контейнеров. Это может занять несколько минут. Вы увидите вывод, похожий на этот:
Выход
Создание сети «landing-laravel_landing» с драйвером «bridge». Создание приложения. Шаг 1/11: ИЗ php:7.4-fpm ---> fa37bd6db22a ... Шаг 10/11: WORKDIR /var/www ---> Использование кеша – --> 769afd5d44d8 Шаг 11 из 11: ПОЛЬЗОВАТЕЛЬ $user ---> Использование кеша ---> 841eb5852b69 Успешно создано 841eb5852b69 Успешно помечено Landing-app:latest ВНИМАНИЕ: Образ для сервисного приложения был создан, поскольку он еще не существовал. Чтобы пересобрать этот образ, вы должны использовать docker-compose build или docker-compose up --build. Создание Landing-laravel_app_1... готово
Вы можете убедиться, что ваша среда запущена и работает с помощью:
docker-composePS
Выход
Имя Состояние команды Порты ---------------------------------------------- -------------------------- Landing-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
После запуска службы app вы можете запустить Composer, инструмент управления зависимостями PHP, чтобы загрузить новое приложение Laravel. Для этого вы будете использовать docker compose exec для запуска команд в службе app , где установлен PHP.
Следующая команда будет использовать Docker Compose для выполнения composer create-project , который загрузит новую установку Laravel на основе пакета laravel/laravel :
docker-composeexec app композитор create-project laravel/laravel --prefer-dist application
Creating a "laravel/laravel" project at "./application" Installing laravel/laravel (v8.4.0) - Downloading laravel/laravel (v8.4.0) - Installing laravel/laravel (v8.4.0): Extracting archive Created project in /var/www/application > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies Lock file operations: 104 installs, 0 updates, 0 removals … Package manifest generated successfully. 71 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully.
Эта установка создает новый файл .env на основе файла .env.example по умолчанию, который поставляется с Laravel. Файл .env содержит учетные данные базы данных и другие конфиденциальные параметры приложения и должен быть уникальным для каждой среды, в которой работает приложение. Вы вернетесь для редактирования этого файла после завершения настройки среды разработки.
Затем скопируйте файлы приложения в тот же каталог, что и файл docker-compose.yml , чтобы вы могли поделиться файлом переменных среды Laravel с Docker Compose. Затем вы можете удалить каталог application , созданный Composer:
приложение cp-rT.
приложение rm-rfv
Ваше приложение теперь загружено, но вам нужно будет включить пару сервисов в файл Docker Compose, чтобы иметь возможность доступа к приложению из браузера. Служба nginx будет обслуживать приложение с помощью веб-сервера Nginx, а служба db будет размещать базу данных MySQL приложения.
Во-первых, down свою среду с помощью:
docker-compose вниз
Выход
Остановка Landing-laravel_app_1 ... готово Удаление Landing-laravel_app_1 ... готово Удаление сети Landing-laravel_landing
Это приведет к удалению всех контейнеров и сетей, связанных с этой средой. Прежде чем редактировать файл docker-compose.yml для добавления новых служб, создайте новый каталог для совместного использования файлов конфигурации с контейнерами. Это понадобится вам, чтобы правильно настроить Nginx для работы с PHP-приложением Laravel.
mkdir-p docker-compose/nginx
Затем создайте новый файл landing-laravel.conf , содержащий пользовательский блок сервера Nginx. Позже вы настроите том для совместного использования этого файла в сервисном контейнере nginx .
Откройте новый файл конфигурации Nginx с помощью:
nano docker-compose/nginx/landing-laravel.conf
Следующий блок сервера настраивает Nginx для обслуживания приложения Laravel с использованием внешнего сервиса ( app ) для обработки PHP-кода. Скопируйте это содержимое в свой файл конфигурации Nginx:
Включите следующую конфигурацию для службы nginx на том же уровне, что и ранее настроенная служба app . Это создаст новый сервис на основе образа nginx:alpine , и все запросы на порт 8000 хоста, на котором работает Docker, будут перенаправлены на порт 80 в контейнере сервиса. Помимо файлов приложения, вы также предоставите общий доступ к тому, содержащему файл конфигурации Nginx для приложения Laravel:
Затем включите следующий блок конфигурации для службы db . Это создаст службу на основе образа MySQL 8 по умолчанию и извлечет значения, определенные в файле среды Laravel, для настройки доступа к базе данных:
Note . Для получения более подробной информации о контейнеризации сред Laravel, включая пояснения об общих томах и сетях, обратитесь к нашему полному руководству «Как установить Laravel с помощью Docker Compose в Ubuntu 20.04».
Сохраните и закройте файл, когда закончите редактирование. Наконец, обновите ваш точечный env-файл Laravel ( .env ), чтобы указать конфигурацию хоста базы данных MySQL на хост, на котором будет работать служба MySQL, называемый db :
нано .env
Файл .env , который автоматически создается Composer при установке, содержит некоторые значения по умолчанию, которые вы, возможно, захотите изменить, например APP_NAME и APP_URL . Переменную базы данных DB_HOST необходимо изменить, чтобы она указывала на службу, в которой будет работать MySQL, и вы можете ссылаться на нее по имени службы, как определено в файле docker-compose.yml . В этом примере вы использовали db в качестве имени службы базы данных, поэтому она будет доступна в контейнерной сети как хост с именем db .
Измените свой .env соответствующим образом, используя следующий пример в качестве основы. Выделенные значения были обновлены здесь, чтобы отразить состояние разрабатываемого приложения:
Вам не нужно изменять какие-либо другие разделы этого файла, но вы можете настроить его в соответствии с вашим конкретным вариантом использования.
Сохраните и закройте файл, когда закончите редактировать его содержимое.
Теперь вы можете запустить обновленную среду с помощью:
докер-составить-d
Выход
Создание сети "landing-laravel_landing" с драйвером "bridge" Создание Landing-laravel_app_1... сделано Создание Landing-laravel_db_1... готово Создание Landing-laravel_nginx_1... готово
После полной настройки среды вы можете теперь указать в своем браузере localhost или IP-адрес вашего удаленного сервера через порт 8000 :
http:// локальный хост :8000
Если все работает как положено, вы увидите такую страницу:
В следующей части этой серии вы создадите миграцию базы данных для настройки таблицы links .