Автор выбрал фонд FreeBSD Foundation для получения пожертвования в рамках программы Write for DOnations.
В последние несколько лет Docker стали часто использовать для развертывания приложений, поскольку он упрощает запуск и развертывание приложений в виртуальных контейнерах. При использовании набора приложений LEMP, например в системе с PHP, Nginx, MySQL и Laravel, Docker может значительно ускорить процедуру настройки.
Docker Compose упрощает процесс разработки, позволяя разработчикам определять свою инфраструктуру в одном файле, включая службы приложений, сети и томы. Docker Compose предлагает эффективную альтернативу запуску нескольких команд docker container create
и docker container run
.
В этом обучающем модуле вы создадите веб-приложение с помощью системы Laravel, используя Nginx в качестве веб-сервера и MySQL в качестве базы данных. Все это будет делаться в контейнерах Docker. Вы зададите полную конфигурацию приложения в файле docker-compose
вместе с файлами конфигурации для PHP, MySQL и Nginx.
Перед началом работы вам потребуется следующее:
sudo
. Его настройка должна быть выполнена в соответствии с указаниями обучающего модуля Начальная настройка сервера Ubuntu 18.04.На первом шаге мы загрузим последнюю версию Laravel и установим зависимости проекта, включая Composer, диспетчер пакетов PHP на уровне приложения. Мы установим эти зависимости с помощью Docker, чтобы не выполнять глобальную установку Composer.
Перейдите в домашний каталог и клонируйте последнюю версию Laravel в каталог с именем laravel-app
:
- cd ~
- git clone https://github.com/laravel/laravel.git laravel-app
Перейдите в каталог laravel-app
:
- cd ~/laravel-app
Затем смонтируйте образ composer
из Docker в каталоги, которые нужны для вашего проекта Laravel, чтобы избежать издержек глобальной установки Composer:
- docker run --rm -v $(pwd):/app composer install
Флаги -v
и --rm
команды docker run
создают виртуальный контейнер, который привязывается к текущему каталогу вплоть до его удаления. Содержимое вашего каталога ~/laravel-app
будет скопировано в контейнер, а содержимое создаваемой Composer внутри контейнера папки vendor
будет скопировано в текущий каталог.
В заключение установите в каталоге проекта такой уровень разрешений, чтобы ее владельцем был пользователь без привилегий root:
- sudo chown -R $USER:$USER ~/laravel-app
Это будет важно, когда вы будете записывать Dockerfile для образа вашего приложения на шаге 4, поскольку позволит работать с кодом прложения и запускать процессы в контейнере, не имея привилегий root.
Теперь вы разместили код приложения и можете переходить к определению служб с помощью Docker Compose.
Построение приложений с помощью Docker Compose упрощает процесс настройки и контроля версий в вашей инфраструктуре. Чтобы настроить наше приложение Laravel, мы создадим файл docker-compose
с определением служб веб-сервера, базы данных и приложения.
Откройте файл:
- nano ~/laravel-app/docker-compose.yml
В файле docker-compose
определяются три службы: app
, webserver
и db
. Добавьте в файл следующий код, при этом замените пароль root для MYSQL_ROOT_PASSWORD
, определяемый как переменная среды службы db
, надежный паролем по своему выбору:
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
Сюда включены следующие службы:
app
: это определение службы содержит приложение Laravel и запускает персонализированный образ Docker, digitalocean.com/php
, который вы определите на шаге 4. Также оно устанавливает для параметра working_dir
в контейнере значение /var/www
.webserver
: это определение службы берет образ nginx:alpine
из Docker и открывает порты 80
и 443
.db
: это определение службы извлекает образ mysql:5.7.22
из Docker и определяет новые переменные среды, в том числе базу данных laravel
для вашего приложения и пароль пользователя root для базы данных. Вы можете использовать любое имя базы данных, которое захотите, также вам следует заменить your_mysql_root_password
собственным надежным паролем. Это определение службы также сопоставляет порт хоста 3306
и порт контейнера 3306
.Каждое свойство container_name
определяет имя контейнера, соответствующее имени службы. Если вы не определите это свойство, Docker будет присваивать каждому контейнеру имена, состоящие из имени исторической личности и случайного слова, разделенных символом подчеркивания.
Для упрощения взаимодействия между контейнерами службы подключаются к соединительной сети с именем app-network
. Соединительная сеть использует программный мост, позволяющий подключенным к этой сети контейнерам взаимодействовать друг с другом. Драйвер моста автоматически устанавливает правила хоста, чтобы контейнеры в разных соединительных сетях не могли напрямую взаимодействовать друг с другом. Это повышает уровень безопасности приложений, поскольку друг с другом могут взаимодействовать только связанные службы. Также это означает, что вы сможете задавать разные сети и службы, подключающиеся к связанным функциям: например, клиентские службы приложения могут использовать сеть frontend
, а серверные — сеть backend
.
Теперь посмотрим, как добавлять тома и привязывать смонтированные образы к определениям служб для постоянного сохранения данных приложения.
В Docker имеются мощные и удобные средства для постоянного сохранения данных. В нашем приложении мы будем использовать тома и монтируемые образы для постоянного сохранения файлов базы данных, приложения и конфигурации. Тома обеспечивают гибкость резервного копирования и сохранение по прекращении жизненного цикла контейнера, а привязываемые монтируемые образы упрощают изменение кода во время разработки с немедленным отражением изменений файлов или каталогов хоста в контейнерах. Мы используем оба варианта.
Предупреждение! Использование привязываемых монтируемых образов позволяет изменять файловую систему хоста через работающие в контейнеры процессы, что включает создание, изменение или удаление важных системных файлов или каталогов. Это мощная возможность с функциями безопасности, которая может повлиять на процессы без Docker в системе хоста. Привязывемые монтируемые образы следует использовать с осторожностью.
Определите в файле docker-compose
том с именем dbdata
в определении службы db
для постоянного сохранения базы данных MySQL:
...
#MySQL Service
db:
...
volumes:
- dbdata:/var/lib/mysql
networks:
- app-network
...
Том с именем dbdata
используется для постоянного сохранения содержимого папки /var/lib/mysql
внутри контейнера. Это позволяет останавливать и перезапускать службу db
без потери данных.
Добавьте в конце файла определение тома dbdata
:
...
#Volumes
volumes:
dbdata:
driver: local
С этим определением вы сможете использовать этот том для разных служб.
Затем добавьте привязку монтируемого образа к службе db
для файлов конфигурации MySQL, которые вы создадите на шаге 7:
...
#MySQL Service
db:
...
volumes:
- dbdata:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/my.cnf
...
Этот монтируемый образ привязывает файл ~/laravel-app/mysql/my.cnf
к каталогу /etc/mysql/my.cnf
в контейнере.
Затем добавьте монтируемые образы в службу веб-сервера
. Их будет два: один для кода приложения, а другой — для определения конфигурации Nginx, которое вы создадите на шаге 6:
#Nginx Service
webserver:
...
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
Первый монтируемый образ привязывает код приложения в каталоге ~/laravel-app
к каталогу /var/www
внутри контейнера. Файл конфигурации, добавляемые в ~/laravel-app/nginx/conf.d/
, также монтируется в /etc/nginx/conf.d/
в контейнере, что позвоялет добавлять и изменять содержимое каталога конфигурации по мере необходимости.
В заключение добавьте следующие привязки монтируемых образов в службу app
для кода приложения и файлов конфигурации:
#PHP Service
app:
...
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
Служба app
привязывает монтируемый образ папки ~/laravel-app
, который содержит код приложения, к папке /var/www
. Это ускорит процесс разработки, поскольку любые изменения в локальном каталоге приложения будут немедленно отражаться в контейнере. Также вы привязываете файл конфигурации PHP ~/laravel-app/php/local.ini
к файлу /usr/local/etc/php/conf.d/local.ini
в контейнере. На шаге 5 вы создадите локальный файл конфигурации PHP.
Теперь ваш файл docker-compose
будет выглядеть следующим образом:
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
Когда закончите вносить изменения, сохраните файл и закройте редактор.
Записав файл docker-compose
, вы сможете создать персонализированный образ вашего приложения.
Docker позволяет задавать среду внутри отдельных контейнеров с помощью файла Dockerfile. Файл Dockerfile позволяет создавать персонализированные образы. которые можно использовать для установки требуемого программного обеспечения приложения и изменения настроек в соответствии с требованиями. Вы можете передавать созданные образы в Docker Hub или любой частный реестр.
Файл Dockerfile
будет располагаться в каталоге ~/laravel-app
. Создайте файл:
- nano ~/laravel-app/Dockerfile
Этот файл Dockerfile
будет задавать базовый образ и необходимые команды и инструкции для построения образа приложения Laravel. Добавьте в файл следующий код:
FROM php:7.2-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY . /var/www
# Copy existing application directory permissions
COPY . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
Сначала Dockerfile создает образ поверх образа php:7.2-fpm
Docker. Это образ на базе с установленным экземпляром PHP FastCGI PHP-FPM. Также этот файл устанавливает требуемые пакеты для Laravel: mcrypt
, pdo_mysql
, mbstring
и imagick
с composer
.
Директива RUN
задает команды для обновления, установки и настройки параметров внутри контейнера, включая выделенного пользователя и группу с именем www. Инструкция WORKDIR
задает каталог /var/www
как рабочий каталог приложения.
Создание отдельного пользователя и группы с ограниченными правами доступа снижает уязвимость при запуске контейнеров Docker, которые по умолчанию запускаются с привилегиями root. Вместо запуска этого контейнера с привилегиями root мы создали пользователя www с правами чтения и записи для папки /var/www
с помощью команды COPY
с флагом --chown
для копирования разрешений папки приложения.
Команда EXPOSE
открывает порт 9000
в контейнере для сервера php-fpm
. CMD
указывает команду, которая должна запускаться после создания контейнера. Здесь CMD
указывает команду php-fpm
, которая запускает сервер.
Когда закончите вносить изменения, сохраните файл и закройте редактор.
Теперь вы можете перейти к определению конфигурации PHP.
Вы определили инфраструктуру в файле docker-compose
, и теперь можете настроить службу PHP для работы в качестве процессора PHP для входящих запросов Nginx.
Для настройки PHP вы создадите файл local.ini
в папке php
. Это файл, который вы привязали к файлу /usr/local/etc/php/conf.d/local.ini
в контейнере на шаге 2. Создание этого файла позволит вам игнорировать файл по умолчанию php.ini
, который PHP считывает при запуске.
Создайте каталог php
:
- mkdir ~/laravel-app/php
Затем откройте файл local.ini
:
- nano ~/laravel-app/php/local.ini
Чтобы продемонстрировать настройку PHP, мы добавим следующий код для установки ограничений размера выгруженных файлов:
upload_max_filesize=40M
post_max_size=40M
Директивы upload_max_filesize
и post_max_size
задают максимальный разрешенный размер выгружаемых файлов и показывают, как задавать конфигурации php.ini
из файла local.ini
. Вы можете вставить любой параметр конфигурации PHP, который хотите игнорировать в файле local.ini
.
Сохраните файл и закройте редактор.
С сохраненным файлом PHP local.ini
можно перейти к настройке Nginx.
При настройке службы PHP вы можете изменять службу Nginx для использования PHP-FPM как сервера FastCGI для обслуживания динамического контента. Сервер FastCGI основан на двоичном протоколе для взаимодействия интерактивных программ с веб-сервером. Дополнительную информацию можно найти в статье «Понимание и реализация прокси FastCGI в Nginx».
Для настройки Nginx вы создадите файл app.conf
с конфигурацией служб в папке ~/laravel-app/nginx/conf.d/
.
Вначале создайте каталог nginx/conf.d/
:
- mkdir -p ~/laravel-app/nginx/conf.d
Затем создайте файл конфигурации app.conf
:
- nano ~/laravel-app/nginx/conf.d/app.conf
Добавьте в файл следующий код, чтобы задать конфигурацию Nginx:
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;
}
}
Серверный блок задает конфигурацию веб-сервера Nginx с помощью следующих директив:
listen
: эта директива определяет порт, который сервер прослушивает для получения входящих запросов.error_log
и access_log
: эти директивы определяют файлы для записи журналов.root
: эта директива задает путь к корневой папке, формируя полный путь для любого запрошенного файла в локальной файловой системе.В блоке расположения php
директива fastcgi_pass
указывает, что служба app
прослушивает сокет TCP на порту 9000
. С ней сервер PHP-FPM выполняет прослушивание через сеть, а не через сокет Unix. Хотя сокет Unix дает небольшое преимущество в скорости по сравнению с сокетом TCP, у него нет сетевого протокола и он пропускает сетевой стек. В случаях расположения хостов в одной системе использование сокета Unix может иметь смысл, но если службы работают на разных хостах, сокет TCP дает преимущество, позволяя подключаться к распределенным службам. Поскольку наши контейнеры app
и webserver
работают на разных хостах, в нашей конфигурации эффективнее использовать сокет TCP.
Когда закончите вносить изменения, сохраните файл и закройте редактор.
Благодаря привязке, созданной на шаге 2, любые изменения в папке nginx/conf.d/
прямо отражаются в контейнере webserver
.
Теперь посмотрим на параметры MySQL.
После настройки PHP и Nginx вы можете активировать MySQL как базу данных для вашего приложения.
Для настройки MySQL нужно создать файл my.cnf
в папке mysql
. Это файл, который вы привязали к файлу /etc/mysql/my.cnf
внутри контейнера на шаге 2. Привязка монтируемого образа позволяет игнорировать любые параметры my.cnf
, если и когда это требуется.
Чтобы продемонстрировать, как это работает, мы добавим в файл my.cnf
настройки, которые включают журнал общих запросов и задают файл журнала.
Создайте каталог mysql
:
- mkdir ~/laravel-app/mysql
Создайте файл my.cnf
:
- nano ~/laravel-app/mysql/my.cnf
Добавьте в файл следующий код, чтобы активировать журнал запросов и задать местоположение файла журнала:
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log
Файл my.cnf
поддерживает журналы, задавая для параметра general_log
значение 1
, разрешающее общие журналы. Параметр general_log_file
указывает, где будут храниться журналы.
Сохраните файл и закройте редактор.
На следующем шаге мы запустим контейнеры.
Вы определили все службы в файле docker-compose
и создали файлы конфигурации для этих служб. Теперь вы можете запускать контейнеры. В заключение мы создадим копию файла .env.example
, которую Laravel включает по умолчанию, и назовем ее .env
, поскольку Laravel использует такой файл для определения среды:
- cp .env.example .env
Теперь вы можете изменить файл .env
в контейнере app
, чтобы добавить определенные параметры вашей системы.
Откройте этот файл с помощью nano
или другого текстового редактора на ваш выбор:
- nano .env
Найдите блок, задающий DB_CONNECTION
и обновите его для отражения особенностей настройки вашей системы. Вы измените следующие поля:
DB_HOST
будет вашим контейнером базы данных db
.DB_DATABASE
будет базой данных laravel
.DB_USERNAME
будет именем пользователя для вашей базы данных. В этом случае мы будем использовать laraveluser
.DB_PASSWORD
будет защищенным паролем для этой учетной записи пользователя.DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password
Сохраните изменения и закройте редактор.
Теперь все ваши службы определены в файле docker-compose
, и вам просто нужно запустить одну команду для запуска всех контейнеров, создания томов и настройки и подключения сетей:
- docker-compose up -d
При первом запуске docker-compose up
будут загружены все необходимые образы Docker, что может занять некоторое время. После загрузки образов и их сохранения на локальном компьютере Compose создаст ваши контейнеры. Флаг -d
преобразует процесс в демона, с которым контейнеры остаются запущенными в фоновом режиме.
После завершения процесса используйте следующую команду для вывода списка всех запущенных контейнеров:
- docker ps
Вы увидите следующие результаты с данными о контейнерах app
, webserver
и db
:
OutputCONTAINER ID NAMES IMAGE STATUS PORTS
c31b7b3251e0 db mysql:5.7.22 Up 2 seconds 0.0.0.0:3306->3306/tcp
ed5a69704580 app digitalocean.com/php Up 2 seconds 9000/tcp
5ce4ee31d7c0 webserver nginx:alpine Up 2 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
В этих результатах CONTAINER ID
— это уникальный идентификатор каждого контейнера, а NAMES
перечисляет имена служб для каждого контейнера. Вы можете использовать для доступа к контейнерам оба эти идентификатора. IMAGE
определяет имя образа каждого контейнера, а STATUS
предосавляет информацию о состоянии контейнера: запущен, перезапускается или остановлен.
Сейчас мы воспользуемся docker-compose exec
, чтобы задать ключ приложения для приложения Laravel. Команда docker-compose exec
позволяет запускать конкретные команды в контейнерах.
Следующая команда будет генерировать ключ и скопирует его в файл .env
, гарантируя безопасность сеансов пользователя и шифрованных данных:
- docker-compose exec app php artisan key:generate
Теперь у вас есть все необходимые настройки среды для запуска приложения. Чтобы кэшировать эти настройки в файле, ускоряющем загрузку приложения, запустите команду:
- docker-compose exec app php artisan config:cache
Настройки конфигурации будут загружены в файл /var/www/bootstrap/cache/config.php
в контейнере.
В заключение откройте в браузере сайт http://your_server_ip
. Откроется главная страница приложения Laravel:
Когда контейнеры будут работать, и данные конфигурации будут размещены на месте, вы сможете перейти к настройке данных пользователя базы данных laravel
в контейнере db
.
При установке MySQL по умолчанию создается только административная учетная запись root с неограниченными привилегиями доступа к серверу баз данных. Обычно при работе с базой данных лучше избегать использования административной учетной записи root. Вместо этого мы создадим специального пользователя базы данных для базы данных Laravel нашего приложения.
Чтобы создать нового пользователя, запустите интерактивную оболочку bash в контейнере db
с помощью команды docker-compose exec
:
- docker-compose exec db bash
Выполните внутри контейнера вход в административную учетную запись MySQL root:
- mysql -u root -p
Вам будет предложено ввести пароль, заданный для учетной записи MySQL root при установке в файл docker-compose
.
Для начала проверьте наличие базы данных laravel
, определенной в файле docker-compose
. Запустите команду show databases
для проверки существующих баз данных:
- show databases;
В результатах вы должны увидеть базу данных laravel
:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Затем создайте учетную запись пользователя, которой будет разрешен доступ к этой базе данных. Мы используем имя пользователя laraveluser
, но вы можете заменить его любым предпочитаемым именем. Просто убедитесь, что имя пользователя и пароль соответствуют заданным в файле .env
на предыдущем шаге:
- GRANT ALL ON laravel.* TO 'laraveluser'@'%' IDENTIFIED BY 'your_laravel_db_password';
Обновите привилегии, чтобы уведомить сервер MySQL об изменениях:
- FLUSH PRIVILEGES;
Закройте MySQL:
- EXIT;
Выйдите из контейнера:
- exit
Вы настроили учетную запись пользователя для базы данных вашего приложения Laravel и готовы к миграции данных и работе с консолью Tinker.
Теперь ваше приложение запущено, и вы можете провести миграцию данных и поэкспериментировать с командой tinker
, которая запускает консоль PsySH с предварительно загруженным приложением Laravel. PsySH — это консоль времени исполнения для разработчика и интерактивный отладчик для PHP, а Tinker — это REPL для Laravel. Команда tinker
позволяет взаимодействовать с приложением Laravel из командной строки в интерактивной оболочке.
Сначала протестируйте соединение с MySQL с помощью команды Laravel artisan migrate
, которая создает в базе данных таблицу migrations
изнутри контейнера:
- docker-compose exec app php artisan migrate
Эта команда выполняет миграцию таблиц Laravel по умолчанию. Результаты подтверждения миграции выглядят следующим образом:
Output
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
После завершения миграции вы можете отправить запрос для проверки правильности подключения к базе данных с помощью команды tinker
:
- docker-compose exec app php artisan tinker
Проверьте соединение MySQL, получив данные, миграцию которых вы только что произвели:
- \DB::table('migrations')->get();
Вы получите следующий результат:
Output=> Illuminate\Support\Collection {#2856
all: [
{#2862
+"id": 1,
+"migration": "2014_10_12_000000_create_users_table",
+"batch": 1,
},
{#2865
+"id": 2,
+"migration": "2014_10_12_100000_create_password_resets_table",
+"batch": 1,
},
],
}
Вы можете использовать tinker
для взаимодействия с базами данных и экспериментов со службами и моделями.
Теперь ваше приложение Laravel завершено и вы готовы к дальнейшей разработке и экспериментам.
Теперь на вашем сервере работает приложение набора LEMP, которое вы протестировали, получив доступ к начальной странице Laravel и создав миграцию базы данных MySQL.
Главный фактор для простоты установки — Docker Compose, позволяющий создавать группу контейнеров Docker, определенную в одном файле, с помощью одной команды. Если вы хотите узнать больше о постоянной интеграции с Docker Compose, ознакомьтесь с обучающим модулем «Настройка среды постоянного тестирования интеграции с Docker и Docker Compose в Ubuntu 16.04». Если вы хотите ускорить процесс развертывания вашего приложения Laravel, вам поможет ресурс «Автоматическое развертывание приложений Laravel с помощью Deployer в Ubuntu 16.04».
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Good article. I found an easier way to install composer. Simply use:
in php-fpm Dockerfile. This line will add the ready-made composer to your image, and you do not need to install it manually from git (and you will not need git and curl in depencies, so it will make image size smaller).
At step 10 throws an error after the command, please help what is the reason? mac os version 10.15.5 (19F101)
This comment has been deleted