AS-Programmer Laravel и среда исполнения на Docker
  • Telegram
  • Facebook
  • WhatsApp
  • Viber
  • Skype

Laravel на Docker контейнерах

Как запустить Laravel приложение на Docker контейнерах

Определим наш минимальный набор сервисов, необходимых для работы с фреймворком Laravel:

  • Веб сервер, в нашем случае это Nginx
  • php-fpm для обработки скриптов PHP
  • база данных MySQL
  • база данных Redis
  • Node.js для работы с фронтендом

Каждый сервис будет выполняться в отдельном контейнере и в случае если понадобится еще какой-нибудь (например phpMyAdmin) мы его так же сможем запустить в отдельном контейнере. Управлять и конфигурировать эти контейнеры будет Docker Compose. Чтобы не писать каждый раз все с нуля, базовый вариант находится в репозитории.

Клонируйте данный репозиторий в папку ~/my-projects/project-1/laravel-docker-1

cd ~/my-projects/project-1
git clone https://github.com/acwstudio/laravel-docker laravel-docker-1
cd laravel-docker-1

Внутри папки ~/my-projects/project-1/laravel-docker-1 будет следующая файловая структура

1. data/db/mysql/ volume для сохранения базы данных из контейнера MySQL
2. data/redis/ volume для сохранения базы данных из контейнера Redis
3. etc/db/mysql/ volume для передачи конфига в контейнер MySQL
4. etc/nginx/conf.d/ volume для передачи конфига в контейнер Nginx
5. etc/php/php.ini volume для передачи конфига в контейнер PHP
6. etc/php/Dockerfile Создание image для контейнера PHP-FPM
7. etc/redis/ volume для передачи конфига в контейнер Redis
8. etc/redis/Dockerfile Создание image для контейнера Redis
9. example-files/docker-compose.yml.example Шаблон для docker-compose.yml файла
10. example-files/.env.example Шаблон для .env файла
11. example-files/laravel.conf.example Шаблон для nginx.conf файла
12. example-files/my.cnf.example Шаблон для my.cnf файла
13. example-files/php.ini.example Шаблон для php.ini файла
14. example-files/redis.conf.example Шаблон для redis.conf файла
15. laravel-app/ volume c кодом Laravel приложения для передачи в контейнеры PHP и Nginx

Предварительные действия

  1. В папке laravel-app/ создаем симлинк project на код Laravel приложения.
    cd ~/my-projects/project-1/laravel-docker-1/laravel-app
    ln -s ~/my-projects/project-1/laravel-app-1 project
  2. Копируем файл example-files/docker-compose.yml.example в корневую директорию под именем docker-compose.yml
    cd ../
    cp example-files/docker-compose.yml.example docker-compose.yml
    nano docker-compose.yml
    Здесь вы можете добавить или удалить сервис. Например, в продакшен точно не нужен phpMyAdmin. Для демонстрации не будем ничего удалять.
  3. Копируем файл example-files/.env.example в корневую директорию под именем .env и открываем для редактирования
    cp example-files/.env.example .env
    nano .env
    Оставляем только указанные ниже строки, остальное комментим или удаляем
    # App settings
    APP_NAME=LarApp1
    APP_PATH=./laravel-app/project
    # Port Mappings
    PORT_DATABASE=3300
    PORT_PHPMYADMIN=8080
    PORT_HTTP=8000
    PORT_HTTPS=8100
    PORT_REDIS=6379
    # mysql settings
    MYSQL_DATABASE=db_1
    MYSQL_ROOT_USER=root
    MYSQL_ROOT_PASSWORD=root
    MYSQL_USER=dev
    MYSQL_PASSWORD=dev
    # Docker Compose Environment Variables
    PHP_VER_FPM=7.2
  4. Копируем файл example-files/laravel.conf.example в соответствующую директорию под именем etc/nginx/conf.d/laravel.conf
    cp example-files/laravel.conf.example etc/nginx/conf.d/laravel.conf
    nano etc/nginx/conf.d/laravel.conf
    Здесь нас все устраивает и ничего менять не будем
  5. Копируем файл example-files/my.cnf.example в соответствующую директорию под именем etc/db/mysql/my.cnf
    cp example-files/my.cnf.example etc/db/mysql/my.cnf
    nano etc/db/mysql/my.cnf
    Здесь тоже все устраивает
  6. Копируем файл example-files/php.ini.example в соответствующую директорию под именем etc/php/php.ini
    cp example-files/php.ini.example etc/php/php.ini
    nano etc/php/php.ini
    Ничего не меняем
  7. Копируем файл example-files/redis.conf.example в соответствующую директорию под именем etc/redis/redis.conf
    cp example-files/redis.conf.example etc/redis/redis.conf
    nano etc/redis/redis.conf
    Здесь мы установим пароль. Файл содержит много справочной информации, поэтому надо приложить некоторые усилия, чтобы найти строку requirepass foobared (~770 line). Раскомментируйте и замените foobared на свой пароль. Мы установим my_redis

На этом предварительные действия закончены.

После проведения подготовки, запускаем docker-compose.yml
docker-compose up -d

В браузере набираем
localhost:8000 для локального компьютера
ip-your-vps:8000 для VPS

В браузере набираем
localhost:8081 для локального компьютера
ip-your-vps:8081 для VPS

Меню

  • Вводная часть
  • Laravel на Docker
  • Reverse Proxy

Get in touch

  • acwstudio2018@gmail.com
  • +7(921) 439-9531
  • Russia, Saint-Petersburg

© Untitled. All rights reserved. Demo Images: Unsplash. Design: HTML5 UP.