Skip to content
This repository was archived by the owner on Oct 25, 2026. It is now read-only.
Syed Ahmer Shah edited this page Oct 25, 2026 · 1 revision

The repository ships a production-style Docker setup: Apache with PHP 8.3 and OPcache, MySQL 8.4, Redis for cache, sessions and the queue, a queue worker and the scheduler.

Run it

cp deploy/docker/app.env.example deploy/docker/app.env
# put a key in APP_KEY:  php -r "echo 'base64:'.base64_encode(random_bytes(32)), PHP_EOL;"
docker compose up -d --build

Open http://localhost:8080. On first boot the app container runs the migrations and, with SEED_ON_BOOT=true, seeds films, cinemas and shows.

Services

Service What it does
app Apache + PHP 8.3 serving public/, runs migrations on boot, caches config, routes, views and events
worker php artisan queue:work --tries=3 for e-mail, waitlist alerts and web push
scheduler php artisan schedule:work: expires seat holds, sweeps waitlists, extends the weekly schedule
mysql MySQL 8.4 with utf8mb4
redis Cache, sessions and queue

Image layout

The Dockerfile has three stages: Node builds the Vite assets, Composer installs production dependencies with an optimised class map, and the final PHP-Apache image copies only what it needs. deploy/docker/entrypoint.sh picks the role from CONTAINER_ROLE (app, worker or scheduler).

Production notes

  • Put a TLS-terminating proxy in front and set TRUSTED_PROXIES so rate limits and bans see the real client IP.
  • Set SESSION_SECURE_COOKIE=true once the site is served over HTTPS.
  • deploy/docker/app.env holds secrets and is ignored by Git and by the Docker build context.

Clone this wiki locally