Production-ready Dockerfile for Laravel Octane (FrankenPHP, Swoole, RoadRunner) powered web services and microservices. Done right.
Production-ready Dockerfiles for Laravel Octane powered web services and microservices.
The Docker configuration provides the following setup:
You can run the Docker container in different modes:
Mode | CONTAINER_MODE |
HTTP server |
---|---|---|
HTTP Server (default) | http |
FrankenPHP / Swoole / RoadRunner |
Horizon | horizon |
- |
Scheduler | scheduler |
- |
Worker | worker |
- |
git clone --depth 1 [email protected]:exaco/laravel-octane-dockerfile.git
deployment
directory, Dockerfile
, and .dockerignore
into your Octane powered Laravel projectdocker build -t <image-name>:<tag> -f <your-octane-driver>.Dockerfile .
# HTTP mode
docker run -p <port>:80 --rm <image-name>:<tag>
# Horizon mode
docker run -e CONTAINER_MODE=horizon --rm <image-name>:<tag>
# Scheduler mode
docker run -e CONTAINER_MODE=scheduler --rm <image-name>:<tag>
# HTTP mode with Horizon
docker run -e WITH_HORIZON=true -p <port>:80 --rm <image-name>:<tag>
# HTTP mode with Scheduler
docker run -e WITH_SCHEDULER=true -p <port>:80 --rm <image-name>:<tag>
# HTTP mode with Scheduler and Horizon
docker run -e WITH_SCHEDULER=true -e WITH_HORIZON=true -p <port>:80 --rm <image-name>:<tag>
# Worker mode
docker run -e CONTAINER_MODE=worker -e WORKER_COMMAND="php /var/www/html/artisan foo:bar" --rm <image-name>:<tag>
# Running a single command
docker run --rm <image-name>:<tag> php artisan about
Swoole
options in octane.php
// config/octane.php
return [
'swoole' => [
'options' => [
'http_compression' => true,
'http_compression_level' => 6, // 1 - 9
'compression_min_length' => 20,
'package_max_length' => 20 * 1024 * 1024, // 20MB
'open_http2_protocol' => true,
'document_root' => public_path(),
'enable_static_handler' => true,
]
]
];
Also, some useful Bash functions and aliases are added in utilities.sh
that maybe help.
local
environment..dockerignore
contenttesting
environment and CIThank you for considering contributing! If you find an issue, or have a better way to do something, feel free to open an issue, or a PR.
This repository is open-sourced software licensed under the MIT license.