Перейти к содержимому
Главная страница » Как загрузить новое приложение Laravel с помощью Docker Compose

Как загрузить новое приложение Laravel с помощью Docker Compose

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

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

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

  1. мкдир ~/ посадка-laravel
  2. компакт-диск ~/ посадка-laravel

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

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

  1. эхо $UID
Выход
1000

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

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

  1. нано 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 :

  1. нано 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

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

  1. докер-составить -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... готово

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

  1. docker-compose PS
Выход
Имя Состояние команды Порты ---------------------------------------------- -------------------------- 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 :

  1. docker-compose exec 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:

  1. приложение cp -rT .
  2. приложение rm -rfv

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

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

  1. docker-compose вниз
Выход
Остановка Landing-laravel_app_1 ... готово Удаление Landing-laravel_app_1 ... готово Удаление сети Landing-laravel_landing

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

  1. mkdir -p docker-compose/nginx

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

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

  1. nano docker-compose/nginx/landing-laravel.conf

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

docker-compose/nginx/landing-laravel.conf
 server { listen 80; index index.php index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass app : 9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location / { try_files $uri $uri/ /index.php ? $query_string; gzip_static on; } }

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

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

  1. нано docker-compose.yml

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

 nginx : image : nginx : alpine restart : unless - stopped ports : - 8000 : 80 volumes : - ./ : /var/www - ./docker - compose/nginx : /etc/nginx/conf.d/ networks : - landing

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

 db : image : mysql : 8 restart : unless - stopped environment : MYSQL_DATABASE : $ { DB_DATABASE } MYSQL_ROOT_PASSWORD : $ { DB_PASSWORD } MYSQL_PASSWORD : $ { DB_PASSWORD } MYSQL_USER : $ { DB_USERNAME } networks : - landing

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

~/landing-laravel/docker-compose.yml
 version : "3.7" services : app : build : args : user : Сэмми пользовательский идентификатор : 1000 контекст : ./dockerfile : Dockerfile изображение : приземление - перезапуск приложения : если - не прекращено рабочий_каталог : /var/www/ тома : - ./ : /var/www network : - приземление nginx : изображение : nginx : альпийский перезапуск : если - остановлен порты : - 8000 : 80 томов : - ./ : /var/www - ./docker - compose/nginx : /etc/nginx/conf.d/ network : - посадка db : image : mysql : 8 перезапуск : если - не остановлен среда : MYSQL_DATABASE : $ { DB_DATABASE } MYSQL_ROOT_PASSWORD : $ { DB_PASSWORD } MYSQL_PASSWORD : $ { DB_PASSWORD } MYSQL_USER : $ { DB_USERNAME } сети : - сети посадки : посадка : драйвер : мост

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

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

  1. нано .env

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

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

~/landing-laravel/.env
 APP_NAME = ЛендингLaravel APP_ENV = локальный APP_KEY = base64:ffYPNP8kPeQDf8gE/qh3kWjk59p6gFY66kCKhhKUa2w = APP_DEBUG = true APP_URL = http://локальный хост:8000 LOG_CHANNEL = стек LOG_LEVEL = отладка DB_CONNECTION = mysql DB_HOST = БД DB_PORT = 3306 DB_DATABASE = Landing-DB DB_USERNAME = пользователь лендинга БД_ПАРОЛЬ = пароль разработчика ...

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

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

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

  1. докер-составить -d
Выход
Создание сети "landing-laravel_landing" с драйвером "bridge" Создание Landing-laravel_app_1... сделано Создание Landing-laravel_db_1... готово Создание Landing-laravel_nginx_1... готово

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

 http:// локальный хост :8000

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *