211 lines
5.3 KiB
Markdown
211 lines
5.3 KiB
Markdown
# Examples
|
|
|
|
## Quick Start with plug-n-pray
|
|
|
|
The fastest way to Dockerize any Laravel project:
|
|
|
|
```bash
|
|
# From your Laravel project root:
|
|
curl -fsSL https://raw.githubusercontent.com/blax-software/docker-laravel/main/scripts/plug-n-pray.sh | bash
|
|
|
|
# Or with options:
|
|
curl -fsSL https://raw.githubusercontent.com/blax-software/docker-laravel/main/scripts/plug-n-pray.sh | bash -s -- \
|
|
--php=8.4 \
|
|
--name=my-app \
|
|
--host=my-app.localhost
|
|
```
|
|
|
|
Or if you have `blax-software/laravel-workkit` installed:
|
|
|
|
```bash
|
|
php artisan workkit:plug-n-pray
|
|
```
|
|
|
|
This generates:
|
|
- `docker-compose.yml` — Full stack with app, MySQL, Redis, and Traefik
|
|
- `.env.docker` — Database/Redis connection values to merge into `.env`
|
|
- `docker/supervisor/` — Directory for custom supervisor programs
|
|
|
|
Then:
|
|
```bash
|
|
docker network create web # once per machine
|
|
docker compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## Example: Minimal API (no frontend tooling)
|
|
|
|
```yaml
|
|
services:
|
|
app:
|
|
image: blaxsoftware/laravel:php8.4
|
|
volumes:
|
|
- ./:/var/www/html
|
|
ports:
|
|
- "80:80"
|
|
environment:
|
|
ENABLE_QUEUE: "true"
|
|
ENABLE_SCHEDULER: "true"
|
|
```
|
|
|
|
---
|
|
|
|
## Example: Full Stack with Traefik
|
|
|
|
Assumes Traefik is already running on the `web` network.
|
|
|
|
```yaml
|
|
networks:
|
|
web:
|
|
external: true
|
|
internal:
|
|
|
|
volumes:
|
|
mysql-data:
|
|
redis-data:
|
|
|
|
services:
|
|
app:
|
|
image: blaxsoftware/laravel:php8.4
|
|
volumes:
|
|
- ./:/var/www/html
|
|
- ./docker/supervisor:/etc/supervisor/custom.d
|
|
environment:
|
|
ENABLE_QUEUE: "true"
|
|
ENABLE_SCHEDULER: "true"
|
|
ENABLE_LARAVEL_PERMS: "1"
|
|
networks:
|
|
- web
|
|
- internal
|
|
depends_on:
|
|
mysql:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.docker.network=web
|
|
- traefik.http.routers.my-app.rule=Host(`my-app.localhost`)
|
|
- traefik.http.routers.my-app.entrypoints=web
|
|
- traefik.http.routers.my-app.service=my-app-http
|
|
- traefik.http.services.my-app-http.loadbalancer.server.port=80
|
|
|
|
mysql:
|
|
image: mysql:8.0
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: secret
|
|
MYSQL_DATABASE: my_app
|
|
volumes:
|
|
- mysql-data:/var/lib/mysql
|
|
networks:
|
|
- internal
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-psecret"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
volumes:
|
|
- redis-data:/data
|
|
networks:
|
|
- internal
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
```
|
|
|
|
---
|
|
|
|
## Example: With Horizon
|
|
|
|
```yaml
|
|
services:
|
|
app:
|
|
image: blaxsoftware/laravel:php8.4
|
|
volumes:
|
|
- ./:/var/www/html
|
|
environment:
|
|
ENABLE_HORIZON: "true" # replaces basic queue worker
|
|
ENABLE_SCHEDULER: "true"
|
|
```
|
|
|
|
---
|
|
|
|
## Example: Custom Supervisor Programs
|
|
|
|
Mount your own `.conf` files into `/etc/supervisor/custom.d/`:
|
|
|
|
```yaml
|
|
services:
|
|
app:
|
|
image: blaxsoftware/laravel:php8.4
|
|
volumes:
|
|
- ./:/var/www/html
|
|
- ./docker/supervisor/reverb.conf:/etc/supervisor/custom.d/reverb.conf
|
|
```
|
|
|
|
`docker/supervisor/reverb.conf`:
|
|
```ini
|
|
[program:reverb]
|
|
command=/usr/local/bin/php -d variables_order=EGPCS /var/www/html/artisan reverb:start --host=0.0.0.0 --port=8080
|
|
autostart=true
|
|
autorestart=true
|
|
user=www-data
|
|
priority=25
|
|
startsecs=5
|
|
stdout_logfile=/proc/1/fd/1
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/proc/1/fd/2
|
|
stderr_logfile_maxbytes=0
|
|
```
|
|
|
|
---
|
|
|
|
## Example: Override PHP-FPM
|
|
|
|
```yaml
|
|
volumes:
|
|
- ./docker/php-fpm.conf:/etc/supervisor/conf.d/php-fpm.conf
|
|
```
|
|
|
|
---
|
|
|
|
## Example: Multiple PHP Versions in One Compose
|
|
|
|
```yaml
|
|
services:
|
|
app-legacy:
|
|
image: blaxsoftware/laravel:php8.1
|
|
volumes:
|
|
- ../legacy-app:/var/www/html
|
|
|
|
app-new:
|
|
image: blaxsoftware/laravel:php8.4
|
|
volumes:
|
|
- ../new-app:/var/www/html
|
|
```
|
|
|
|
---
|
|
|
|
## plug-n-pray.sh Options
|
|
|
|
| Flag | Default | Description |
|
|
|------------------|------------------------|----------------------------------------------------------|
|
|
| `--php=VERSION` | `8.4` | PHP version |
|
|
| `--name=NAME` | directory name | Project name (used for container names & Traefik router) |
|
|
| `--host=HOST` | `NAME.localhost` | Traefik hostname |
|
|
| `--db=NAME` | project name | MySQL database name |
|
|
| `--db-pass=PASS` | `secret` | MySQL root password |
|
|
| `--image=IMAGE` | `blaxsoftware/laravel` | Docker image |
|
|
| `--no-queue` | — | Disable queue worker |
|
|
| `--no-scheduler` | — | Disable scheduler |
|
|
| `--horizon` | — | Enable Horizon (auto-disables basic queue) |
|
|
| `--no-redis` | — | Skip Redis service |
|
|
| `--no-mysql` | — | Skip MySQL service |
|
|
| `--force` | — | Overwrite existing files |
|