8.9 KiB
Laravel
Docker
Запустить Laravel веб-приложение с FrankenPHP очень просто: достаточно смонтировать проект в директорию /app официального Docker-образа.
Выполните эту команду из корневой директории вашего Laravel-приложения:
docker run -p 80:80 -p 443:443 -p 443:443/udp -v $PWD:/app dunglas/frankenphp
И наслаждайтесь!
Локальная установка
Вы также можете запустить ваши Laravel-проекты с FrankenPHP на локальной машине:
-
Добавьте следующую конфигурацию в файл с именем
Caddyfileв корневой директории вашего Laravel-проекта:{ frankenphp } # Доменное имя вашего сервера localhost { # Укажите веб-корень как директорию public/ root public/ # Включите сжатие (опционально) encode zstd br gzip # Выполняйте PHP-файлы из директории public/ и обслуживайте статические файлы php_server } -
Запустите FrankenPHP из корневой директории вашего Laravel-проекта:
frankenphp run
Laravel Octane
Octane можно установить с помощью менеджера пакетов Composer:
composer require laravel/octane
После установки Octane выполните Artisan-команду octane:install, которая создаст конфигурационный файл Octane в вашем приложении:
php artisan octane:install --server=frankenphp
Сервер Octane можно запустить с помощью Artisan-команды octane:frankenphp:
php artisan octane:frankenphp
Команда octane:frankenphp поддерживает следующие опции:
--host: IP-адрес, к которому должен привязаться сервер (по умолчанию:127.0.0.1)--port: Порт, на котором сервер будет доступен (по умолчанию:8000)--admin-port: Порт, на котором будет доступен административный сервер (по умолчанию:2019)--workers: Количество worker-скриптов для обработки запросов (по умолчанию:auto)--max-requests: Количество запросов, обрабатываемых перед перезагрузкой сервера (по умолчанию:500)--caddyfile: Путь к файлуCaddyfileFrankenPHP (по умолчанию: stubbedCaddyfileв Laravel Octane)--https: Включить HTTPS, HTTP/2 и HTTP/3, а также автоматически генерировать и обновлять сертификаты--http-redirect: Включить редирект с HTTP на HTTPS (включается только при передаче --https)--watch: Автоматически перезагружать сервер при изменении приложения--poll: Использовать опрос файловой системы для отслеживания изменений в файлах через сеть--log-level: Установить уровень логирования, используя встроенный логгер Caddy
Tip
Чтобы получить структурированные JSON-логи (полезно при использовании решений для анализа логов), явно укажите опцию
--log-level.
Подробнее о Laravel Octane читайте в официальной документации.
Laravel-приложения как автономные бинарные файлы
Используя возможность встраивания приложений в FrankenPHP, можно распространять Laravel-приложения как автономные бинарные файлы.
Следуйте этим шагам, чтобы упаковать ваше Laravel-приложение в автономный бинарный файл для Linux:
-
Создайте файл с именем
static-build.Dockerfileв репозитории вашего приложения:FROM --platform=linux/amd64 dunglas/frankenphp:static-builder # Скопируйте ваше приложение WORKDIR /go/src/app/dist/app COPY . . # Удалите тесты и другие ненужные файлы, чтобы сэкономить место # В качестве альтернативы добавьте эти файлы в .dockerignore RUN rm -Rf tests/ # Скопируйте файл .env RUN cp .env.example .env # Измените APP_ENV и APP_DEBUG для продакшна RUN sed -i'' -e 's/^APP_ENV=.*/APP_ENV=production/' -e 's/^APP_DEBUG=.*/APP_DEBUG=false/' .env # Внесите другие изменения в файл .env, если необходимо # Установите зависимости RUN composer install --ignore-platform-reqs --no-dev -a # Соберите статический бинарный файл WORKDIR /go/src/app/ RUN EMBED=dist/app/ ./build-static.shCaution
Некоторые
.dockerignoreфайлы могут игнорировать директориюvendor/и файлы.env. Убедитесь, что вы скорректировали или удалили.dockerignoreперед сборкой. -
Соберите:
docker build -t static-laravel-app -f static-build.Dockerfile . -
Извлеките бинарный файл:
docker cp $(docker create --name static-laravel-app-tmp static-laravel-app):/go/src/app/dist/frankenphp-linux-x86_64 frankenphp ; docker rm static-laravel-app-tmp -
Заполните кеши:
frankenphp php-cli artisan optimize -
Запустите миграции базы данных (если есть):
frankenphp php-cli artisan migrate -
Сгенерируйте секретный ключ приложения:
frankenphp php-cli artisan key:generate -
Запустите сервер:
frankenphp php-server
Ваше приложение готово!
Узнайте больше о доступных опциях и о том, как собирать бинарные файлы для других ОС в документации по встраиванию приложений.
Изменение пути хранения
По умолчанию Laravel сохраняет загруженные файлы, кеши, логи и другие данные в директории storage/ приложения. Это неудобно для встроенных приложений, так как каждая новая версия будет извлекаться в другую временную директорию.
Установите переменную окружения LARAVEL_STORAGE_PATH (например, в вашем .env файле) или вызовите метод Illuminate\Foundation\Application::useStoragePath(), чтобы использовать директорию за пределами временной директории.
Запуск Octane как автономный бинарный файл
Можно даже упаковать приложения Laravel Octane как автономный бинарный файл!
Для этого установите Octane правильно и следуйте шагам, описанным в предыдущем разделе.
Затем, чтобы запустить FrankenPHP в worker-режиме через Octane, выполните:
PATH="$PWD:$PATH" frankenphp php-cli artisan octane:frankenphp
Caution
Для работы команды автономный бинарник обязательно должен быть назван
frankenphp, так как Octane требует наличия программы с именемfrankenphpв PATH.