Найти в Дзене
Timeweb Cloud

Как настроить Laravel, Nginx и MySQL с помощью Docker Compose

Оглавление

Контейнеризация — способ запускать приложение со всеми зависимостями в определённой среде, которая не влияет на операционную систему. Таким образом ни одно приложение не зависит ни от другого приложения, ни от глобального окружения.

Читайте также: Краткое руководство по работе с SQLite

Если на вашем сервере, например, установлен php версии 8.1, но по каким-то причинам нужно запустить старый проект, вы можете пойти двумя путями. Первое, что приходит в голову — настроить ещё один сервер, «развернуть» на нём веб-окружение с php версии 5.6, обновить все пакеты и зависимости, где нужно — переписать код. Но есть способ проще: достаточно создать контейнер, окружение которого не будет влиять на всю остальную систему.

Приведём ещё один пример. Допустим, вы разрабатываете веб-сайт, который посещают люди. Но ваш сервер постепенно выходит из строя и нуждается в обновлении. Вам нужно перенести проект на другую машину, при этом сохранив бесперебойность работы сайта. Решение «в лоб» — построить другой сервер и скопировать файлы на него. При этом нужно обеспечить целостность базы данных, настройки серверного окружения и так далее. Непосредственно переход вы запланируете на какую-нибудь ночь, а после миграции будете чинить проект до самого утра.  Однако, если бы ваш проект представлял собой контейнер, вы бы без проблем запустили его на любом сервере той же ОС.

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

Однако не стоит путать контейнеризацию с виртуализацией. Виртуализация — по сути отдельное устройство со своими оборудованием и операционной системой. Среда контейнера же запускается из ядра основной операционной системы, значит она может работать только в основной ОС. Контейнеры потребляют меньше ресурсов.

Для разработки и запуска таких контейнерных приложений используют Docker. Он позволяет автоматизировать процессы создания и развёртывания, упрощая задачи программистам и администраторам. Подробнее о Docker и контейнеризации можно почитать в нашей статье «Что такое Docker».

В этой статье мы рассмотрим контейнеризацию на примере стека LEMP: Linux, Nginx, MySQL и PHP. Для демонстрации работы с зависимостями веб-приложений, установим Laravel.

Нам понадобится сервер с установленной ОС Ubuntu, для этого мы заказали облачное решение на cloud.timeweb.com и настроили пользователю привелегии sudo. Кроме того, на сервере должны быть установлены Docker и Docker Compose.

Установка Laravel

Laravel — бесплатный фреймворк с открытым исходным кодом. Его используют для создания архитектурно сложных веб-приложений. Загрузим в домашнюю директорию из GitHub актуальную версию:

cd ~
git clone https://github.com/laravel/laravel.git

Смонтируем образ composer в каталог проекта Laravel, поскольку крайне не рекомендуется устанавливать Composer глобально и запускать из-под суперпользователя:

cd laravel
docker run -v $PWD:/app composer install

Этой командой мы создаём виртуальный контейнер, который будет привязан к текущему каталогу; всё, что находится внутри каталога laravel скопировано в контейнер. Каталог vendor, который создал менеджер зависимостей Composer в рамках команды install, также скопирован в текущий каталог, то есть в laravel.

Затем изменим права на каталог так, чтобы к нему был доступ у обычного пользователя, поскольку нам понадобится запускать процессы в контейнере без root-привилегий.

sudo chown -R username:username ~/laravel

Теперь можно приступать к работе со службами с помощью Docker Compose.

Файл Docker Compose

Для решения задач, связанных с развёртыванием проектов, которые используют несколько сервисов, разработан инструмент Docker Compose. Если Docker применяется для управления отдельными контейнерами, то Docker Compose позволяет работать с приложениями со сложной архитектурой и множеством зависимостей.

Для настройки приложения Laravel нужно создать файл docker-compose.yml и определить необходимые службы — веб-сервер и базу данных. Как это сделать, читайте далее - в полной версии статьи.

Подписывайтесь на наш канал и ставьте лайки! А еще можете посетить наш официальный сайт.