Найти тему

NGINX UNIT и Laravel

На днях решил использовать Laravel Sail для нового проекта, но к сожалению хоть Sail и генерирует docker-compose.yml, но запустить docker из командной строки Windows не получится. Для запуска прийдется использовать wsl как костыль для запуска docker.

Можно конечно воспользоваться проверенными решениями в виде LAMP
XAMPP или OpenServer да и готовые решения на основе Docker контейнеров NGINX + PHP-FPM + MYSQL + Redis разбросаны по всему интернету.

Но здесь попался на глаза сервер приложений
NGINX UNIT выпущенный в 2017 году и в мае 10, 2023 получившем версию 1.30.0. вызвал интерес.
К тому же как-то очень мало информации о нем не только на русских интернет ресурсах , но и на зарубежных. Готовых базовых конфигураций для docker-а от которых можно было бы оттолкнуться практически нет. Хоть вся информация и присутствует на сайте, к примеру для
Laravel и Docker Images, но она как-то подана сумбурно и назвать хоть один из примеров базовым готовым решение для старта - нельзя.

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

docker-compose.yml
version: "3.9"
services:
nginx-unit:
build: ./system/nginx-unit
volumes:
- .:/var/www/html/mscp
working_dir: /var/www/html/mscp
ports:
- 80:80
db:
image: mysql:5.7.42
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
restart: always
volumes:
- ./system/mysql:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: mcsp
redis:
image: redis:7.0.12
ports:
- 6379:6379

В каталоге ./system/nginx-unit
Dockerfile
FROM unit:1.30.0-php8.2

COPY ./*.pem /docker-entrypoint.d/
COPY ./*.json /docker-entrypoint.d/
COPY ./*.sh /docker-entrypoint.d/

ARG SITE_PATH=/var/www/html/mscp

USER root

RUN mkdir -p ${SITE_PATH} && \
chown -R unit:unit ${SITE_PATH} && \
chmod -R 775 ${SITE_PATH}

WORKDIR ${SITE_PATH}

config.json
{
"listeners": {
"*:80": {
"application": "laravel.test"
}
},
"applications": {
"laravel.test": {
"type": "php",
"processes": 20,
"working_directory": "/var/www/html/mscp",
"root": "/var/www/html/mscp/public/",
"script": "index.php",
"user": "unit",
"group": "unit"
}
}
}

Создаем образ с Unit
docker compose build --no-cache

Запускаем docker контейнеры
docker compose up -d

PS.
Если вам не хочется устанавливать локально composer то можно воспользоваться composer-ом через docker

docker pull composer
docker run --rm --interactive --tty --volume .:/app composer <команда>

К примеру:
Создаем Laravel приложение
docker run --rm --interactive --tty --volume .:/app composer create-project laravel/laravel example-app