Laravel Docker · 16 min read · Sep 23, 2025

Как установить Laravel с помощью Docker на Ubuntu 22.04

Laravel — это бесплатный и открытый PHP-фреймворк, который предоставляет набор инструментов и ресурсов для создания современных PHP-приложений. С широким разнообразием совместимых пакетов и расширений Laravel стал популярным, и многие разработчики выбрали его в качестве своего фреймворка. Laravel предоставляет мощные инструменты для работы с базами данных, включая ORM (объектно-реляционный отображатель) под названием Eloquent и встроенные механизмы для создания миграций баз данных. Он поставляется с инструментом командной строки Artisan, с помощью которого разработчики могут создавать новые модели, контроллеры и другие компоненты приложения, что ускоряет общий процесс разработки приложения.

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

Мы создадим три контейнера Docker для нашего приложения Laravel.

  • Сервис app, работающий на PHP 8.2-FPM
  • Сервис db, работающий на MySQL 8.0
  • Сервис nginx, который использует сервис app для обработки PHP-кода перед тем, как предоставить приложение Laravel пользователю

Мы также создадим SSL-сертификат для нашего сайта Laravel с помощью Let’s Encrypt.

Предварительные требования

  • Сервер с установленным Ubuntu 22.04.
  • Пользователь без прав root с правами sudo.
  • Полностью квалифицированное доменное имя (FQDN), указывающее на ваш сервер. Для наших целей мы будем использовать example.com в качестве доменного имени.
  • Убедитесь, что все обновлено. $ sudo apt update
  • Установите базовые утилиты. Некоторые из них могут быть уже установлены. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Шаг 1 - Настройка брандмауэра

Первый шаг — настроить брандмауэр. Ubuntu по умолчанию поставляется с ufw (Uncomplicated Firewall).

Проверьте, работает ли брандмауэр.

$ sudo ufw status

Вы должны получить следующий вывод.

Status: inactive

Разрешите порт SSH, чтобы брандмауэр не разорвал текущее соединение при его включении.

$ sudo ufw allow OpenSSH

Также разрешите порты HTTP и HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Включите брандмауэр

$ sudo ufw enable
Команда может нарушить существующие ssh-соединения. Продолжить операцию (y|n)? y
Брандмауэр активен и включен при запуске системы

Проверьте статус брандмауэра снова.

$ sudo ufw status

Вы должны увидеть аналогичный вывод.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Шаг 2 - Установка SSL

Перед тем как продолжить, давайте сначала создадим SSL-сертификат для нашего домена. Мы создадим его вне Docker, так как это проще в обслуживании. Позже мы синхронизируем сертификаты с контейнером, который будет регулярно обновляться и обновляться.

Нам нужно установить Certbot для генерации SSL-сертификата. Вы можете установить Certbot, используя репозиторий Ubuntu, или получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным Snapd по умолчанию. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd актуальна. Убедитесь, что ваша версия Snapd актуальна.

$ sudo snap install core
$ sudo snap refresh core

Установите Certbot.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команда Certbot работает, создав символическую ссылку в директории /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Выполните следующую команду для генерации SSL-сертификата.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

Вышеуказанная команда загрузит сертификат в директорию /etc/letsencrypt/live/example.com на вашем сервере.

Сгенерируйте сертификат Diffie-Hellman group.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Проведите пробный запуск процесса, чтобы проверить, работает ли обновление SSL.

$ sudo certbot renew --dry-run

Если вы не видите ошибок, вы готовы. Ваш сертификат будет автоматически обновляться.

После настройки Docker и установки Laravel процесс обновления нужно будет изменить. Мы рассмотрим это в следующем разделе.

Шаг 3 - Установка Docker и Docker Compose

Ubuntu 22.04 поставляется со старой версией Docker. Чтобы установить последнюю версию, сначала импортируйте GPG-ключ Docker.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Создайте файл репозитория Docker.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите список репозиториев системы.

$ sudo apt update

Установите последнюю версию Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Проверьте, что он работает.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2054 (dockerd)
      Tasks: 52
     Memory: 22.5M
        CPU: 248ms
     CGroup: /system.slice/docker.service
             ??  2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

По умолчанию Docker требует прав root. Если вы хотите избежать использования sudo каждый раз, когда вы выполняете команду docker, добавьте свое имя пользователя в группу docker.

$ sudo usermod -aG docker $(whoami)

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

$ su - ${USER}

Подтвердите, что ваш пользователь добавлен в группу Docker.

$ groups
navjot wheel docker

Шаг 4 - Скачивание Laravel и установка зависимостей

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

Создайте директорию приложения Laravel.

$ mkdir ~/laravel

Перейдите в директорию.

$ cd ~/laravel

Клонируйте последнюю версию Laravel в директорию. Не забудьте . в конце команды, что означает, что Git клонирует файлы в текущую директорию.

$ git clone https://github.com/laravel/laravel.git .

Используйте образ Docker Compose, чтобы смонтировать директории, необходимые для вашего проекта Laravel. Это позволяет избежать необходимости устанавливать Composer глобально.

$ docker run --rm -v $(pwd):/app composer install

Вышеуказанная команда создает эфемерный контейнер, который монтируется в вашу текущую директорию перед удалением. Он копирует содержимое вашей директории Laravel в контейнер и гарантирует, что папка vendor, которую Composer создает внутри контейнера, копируется обратно в текущую директорию.

Установите права на директорию Laravel так, чтобы она принадлежала текущему вошедшему пользователю.

$ sudo chown -R $USER:$USER ~/laravel

Шаг 5 - Создание файла Docker Compose

Создайте и откройте файл Docker compose для редактирования.

$ nano docker-compose.yml

Вставьте в него следующий код. Здесь мы определяем три сервиса: app, webserver и db. Замените MYSQL_ROOT_PASSWORD в сервисе db на надежный пароль на ваш выбор.

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: howtoforge/app
    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

  webserver:
    container_name: webserver
    image: nginx:alpine
    restart: unless-stopped
    tty: true
    ports:
        - 80:80
        - 443:443
    volumes:
        - ./:/var/www
        - ./nginx/conf.d:/etc/nginx/conf.d
        - ./nginx/logs:/var/log/nginx
        - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
        - /etc/letsencrypt:/etc/letsencrypt
    logging:
        options:
            max-size: "10m"
            max-file: "3"
    networks:
      - app-network

  db:
    image: mysql:latest
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD
      MYSQL_USER: laraveluser
      MYSQL_PASSWORD: password
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

volumes:
  dbdata:
    driver: local

networks:
  app-network:
    driver: bridge

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Давайте подробно рассмотрим сервисы.

  • app - Этот сервис определяет приложение Laravel и запускает пользовательский образ Docker под названием howtoforge/app. Мы создадим этот образ на следующем шаге. Рабочая директория для Laravel внутри контейнера установлена в /var/www, которая сопоставляется с текущей директорией на хосте. Мы также монтируем файл конфигурации PHP, который копируется в контейнер PHP. Мы настроим это на следующем шаге.
  • webserver - Этот сервис создает контейнер, используя образ Docker Nginx и открывает порты 80 и 443 для хоста. Мы также монтируем тома для логов Nginx, пользовательской конфигурации, директории приложения Laravel и SSL-сертификатов.
  • db - Этот сервис создает контейнер, используя образ Docker MySQL, и определяет переменные окружения для настройки имени базы данных и пароля root MySQL. Вы можете назвать базу данных как угодно и заменить MYSQL_ROOT_PASSWORD на надежный пароль на ваш выбор. Также установите имя пользователя MySQL (MYSQL_USER_NAME) и пароль (MYSQL_USER_PASSWORD), которые будут иметь доступ к выбранной вами базе данных. Этот сервис также сопоставляет порт 3306 из контейнера с портом 3306 на хосте. Мы также монтируем том для пользовательской конфигурации MySQL и локальный том для данных MySQL. Это позволяет вам перезапустить сервис db, не потеряв данные.

Чтобы сделать сервисы взаимосвязанными, мы создали сеть Docker под названием app-network. Она установлена как мостовая сеть. Это позволяет контейнерам, подключенным к ней, общаться друг с другом. Драйвер мостовой сети устанавливает правила на хост-машине, чтобы контейнеры на разных мостовых сетях не могли напрямую общаться друг с другом.

Шаг 6 - Создание Dockerfile

Dockerfile используется для создания пользовательских образов. Нет стандартного образа для Laravel, поэтому нам нужно определить Dockerfile для создания пользовательского образа для Laravel. Он содержит команды для установки пакетов и настройки окружения Linux в зависимости от потребностей вашего приложения. Вы также можете опубликовать свой пользовательский образ в Docker Hub или любом частном реестре Docker. Вы можете узнать больше в нашем учебнике по Dockerfile.

Создайте и откройте Dockerfile для редактирования.

$ nano Dockerfile

Вставьте в него следующий код.

FROM php:8.2-fpm

# Копируем composer.lock и composer.json
COPY composer.lock composer.json /var/www/

# Устанавливаем рабочую директорию
WORKDIR /var/www

# Устанавливаем зависимости
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    libzip-dev \
    unzip \
    git \
    curl \
    libonig-dev

# Очищаем кэш
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Устанавливаем расширения
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd

# Устанавливаем composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Копируем содержимое существующей директории приложения в рабочую директорию
COPY . /var/www

# Устанавливаем права на рабочую директорию для пользователя www-data
RUN chown -R www-data:www-data \
        /var/www/storage \
        /var/www/bootstrap/cache

# Устанавливаем права на запись для логов и директорий фреймворка
RUN chmod 775 storage/logs \
        /var/www/storage/framework/sessions \
        /var/www/storage/framework/views

# Открываем порт 9000 и запускаем сервер php-fpm
EXPOSE 9000
CMD ["php-fpm"]

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Давайте посмотрим, что здесь происходит. Сначала мы создаем наш пользовательский образ на основе образа php:8.2-fpm Docker. Это образ на базе Debian, в котором установлен PHP 8.2-FPM. Dockerfile использует различные директивы для выполнения операций, директива RUN указывает команды для обновления, установки и настройки параметров внутри контейнера, директива COPY для копирования файлов в контейнер, директива EXPOSE для открытия порта в контейнере и директива CMD для выполнения команды.

Сначала мы копируем файлы Composer из директории Laravel на хосте внутрь контейнера в директорию /var/www. Мы также устанавливаем рабочую директорию для контейнера в /var/www. Затем мы устанавливаем различные предварительные требования и пакеты, необходимые для работы Laravel, включая расширения PHP, такие как mbstring, gd, exif, zip, pdo_mysql и pcntl. Затем мы устанавливаем менеджер пакетов Composer.

Затем мы копируем все файлы из директории Laravel в контейнер и устанавливаем права на рабочую директорию для пользователя www-data. Это пользователь, который PHP использует по умолчанию на платформе Debian. Затем мы устанавливаем правильные права на запись для директорий логов, сессий и представлений Laravel.

И, наконец, мы открываем 9000 порт для службы PHP-FPM, который будет использоваться сервером Nginx, и запускаем команду PHP для старта контейнера.

Шаг 7 - Настройка PHP

Создайте директорию PHP.

$ mkdir ~/laravel/php

Создайте и откройте файл local.ini для редактирования.

$ nano local.ini

Вставьте в него следующий код.

upload_max_filesize=40M
post_max_size=40M

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. Эти директивы устанавливают максимальный размер загружаемых файлов. Измените значение в соответствии с вашими требованиями. Вы можете добавить любую конфигурацию, специфичную для PHP, чтобы переопределить стандартные директивы.

Шаг 8 - Настройка Nginx

Создайте директорию Nginx для конфигурации сайта.

$ mkdir ~/laravel/nginx/conf.d -p

Нам нужно создать файл конфигурации Nginx, чтобы использовать PHP-FPM в качестве сервера FastCGI для обслуживания Laravel.

Создайте и откройте файл app.conf для редактирования.

$ nano ~/laravel/nginx/conf.d/app.conf

Вставьте в него следующий код.

server {
    # Перенаправляем любые http-запросы на https
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    index index.php index.html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    root /var/www/public;
    client_max_body_size 40m;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve secp384r1;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    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;
    }
}

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Вышеуказанный файл настраивает Nginx для обслуживания как HTTP, так и HTTPS версий сайта Laravel и автоматически перенаправляет любые HTTP-запросы на HTTPS. Убедитесь, что значение переменной client_max_body_size соответствует размеру загрузки, установленному на предыдущем шаге.

В блоке местоположения PHP директива fastcgi_pass указывает, что сервис app слушает на TCP-сокете на порту 9000. Сервер PHP-FPM также может слушать на Unix-сокете, что имеет преимущество перед TCP-сокетом. Но это не работает, если сервисы работают на разных хостах, что и происходит здесь, так как контейнер app работает на другом хосте, чем ваш контейнер webserver.

Шаг 9 - Настройка MySQL

Мы настроим MySQL, чтобы включить общий журнал запросов и указать соответствующий файл журнала.

Создайте директорию MySQL.

$ mkdir ~/laravel/mysql

Создайте и откройте файл my.cnf для редактирования.

$ nano ~/laravel/my.cnf

Вставьте в него следующий код.

[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Шаг 10 - Настройка файла окружения

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

Создайте копию файла окружения примера.

$ cp .env.example .env

Откройте файл .env для редактирования.

$ nano .env

Найдите блок, начинающийся с DB_CONNECTION, и обновите значения переменных в соответствии с вашими требованиями.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password

Значение DB_HOST будет сервисом db. DB_NAME, DB_USERNAME и DB_PASSWORD будут именем базы данных, именем пользователя и паролем, которые вы выбрали на шаге 4 в файле Docker compose.

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Шаг 11 - Запуск контейнеров и завершение установки Laravel

Наконец, пришло время запустить контейнеры.

$ docker compose up -d

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

$ docker ps

Вы увидите аналогичный вывод.

CONTAINER ID   IMAGE            COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
a57be976c0fa   mysql:latest     "docker-entrypoint.s…"   6 hours ago   Up 6 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                       db
85e515c4a404   howtoforge/app   "docker-php-entrypoi…"   6 hours ago   Up 6 hours   9000/tcp                                                                   app
8418bbc83bd3   nginx:alpine     "/docker-entrypoint.…"   6 hours ago   Up 6 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   webserver

После того как контейнеры запущены, пришло время завершить установку Laravel, используя команду docker compose exec, чтобы выполнять команды внутри контейнера.

Сгенерируйте ключ приложения и скопируйте его в ваш файл .env, чтобы обеспечить безопасность пользовательских сессий и шифрование пользовательских данных.

$ docker compose exec app php artisan key:generate

Создайте кэш приложения Laravel.

$ docker compose exec app php artisan config:cache

Эта команда загрузит настройки конфигурации в файл /var/www/bootstrap/cache/config.php.

Перейдите по адресу https://example.com в вашем браузере, и вы увидите следующую страницу, что подразумевает успешную установку Laravel.

Laravel Homepage

Шаг 12 - Настройка обновления SSL

Теперь, когда сайт Laravel активен, пришло время вернуться к настройкам SSL, чтобы настроить обновление. Для этого нам нужно создать скрипты, чтобы остановить сервис webserver перед началом обновления и снова запустить сервис после обновления сертификата. Certbot предоставляет два хуки, pre_hook и post_hook, для этой цели.

Создайте директорию SSL для хранения скриптов.

$ mkdir ~/laravel/ssl

Создайте скрипт server-stop.sh.

$ sh -c 'printf "#!/bin/sh\ndocker stop webserver\n" > ~/laravel/ssl/server-stop.sh'

Создайте скрипт server-start.sh.

$ sh -c 'printf "#!/bin/sh\ndocker start webserver\n" > ~/laravel/ssl/server-start.sh'

Сделайте скрипты исполняемыми.

$ chmod +x ~/laravel/ssl/server-*.sh

Теперь нам нужно сказать Certbot использовать эти скрипты. Откройте файл /etc/letsencrypt/renewal/example.com.conf для редактирования.

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

Вставьте следующие строки в конец файла.

pre_hook = /home//laravel/ssl/server-stop.sh
post_hook = /home//laravel/ssl/server-start.sh

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Проверьте процесс обновления сертификата, выполнив пробный запуск.

$ sudo certbot renew --dry-run

Вы получите аналогичный вывод, подтверждающий успех.

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Hook 'pre-hook' ran with output:
 webserver
Simulating renewal of an existing certificate for example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output:
 webserver

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

Шаг 13 - Миграция данных и консоль Tinker

Теперь, когда приложение работает, вы можете мигрировать свои данные и экспериментировать с командой tinker. Tinker — это REPL (Read-Eval-Print Loop) для Laravel. Команда tinker инициирует консоль PsySH с предзагруженным Laravel. PsySH — это консоль разработчика во время выполнения и интерактивный отладчик для PHP. Команда tinker позволяет вам взаимодействовать с приложением Laravel из командной строки в интерактивной оболочке.

Проверьте соединение с MySQL, используя команду artisan migrate в контейнере. Это создаст таблицу migrations в базе данных.

$ docker compose exec app php artisan migrate

Вы получите следующий вывод.

 INFO  Preparing database.

  Creating migration table .............................................................................................. 32ms DONE

 INFO  Running migrations.

  2014_10_12_000000_create_users_table .................................................................................. 184ms DONE
  2014_10_12_100000_create_password_resets_table ......................................................................... 259ms DONE
  2019_08_19_000000_create_failed_jobs_table ............................................................................ 102ms DONE
  2019_12_14_000001_create_personal_access_tokens_table .................................................................. 46ms DONE

Затем запустите консоль PsySH, используя команду tinker.

$ docker compose exec app php artisan tinker

Вы получите следующий запрос.

Psy Shell v0.11.10 (PHP 8.2.1 — cli) by Justin Hileman
>

Проверьте соединение с MySQL, получив данные, которые вы только что мигрировали, выполнив следующую команду на запросе консоли.

> \DB::table('migrations')->get();

Вы получите следующий вывод.

= Illuminate\Support\Collection {#3670
    all: [
      {#3679
        +"id": 1,
        +"migration": "2014_10_12_000000_create_users_table",
        +"batch": 1,
      },
      {#3681
        +"id": 2,
        +"migration": "2014_10_12_100000_create_password_resets_table",
        +"batch": 1,
      },
      {#3682
        +"id": 3,
        +"migration": "2019_08_19_000000_create_failed_jobs_table",
        +"batch": 1,
      },
      {#3683
        +"id": 4,
        +"migration": "2019_12_14_000001_create_personal_access_tokens_table",
        +"batch": 1,
      },
    ],
  }

Введите exit, чтобы выйти из консоли.

> exit
   INFO  Goodbye.

Вы можете использовать tinker, чтобы взаимодействовать с вашими базами данных и экспериментировать с сервисами и моделями. Теперь вы можете начать использовать Laravel для дальнейшей разработки.

Заключение

Это завершает наш учебник, в котором вы контейнеризировали и установили приложение Laravel с помощью Docker, MySQL и PHP. Вы также обслуживали приложение на безопасном доменном имени. Если у вас есть какие-либо вопросы, оставьте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.