Docker Deployment Guide
Deploy the generated Account services with customer-managed database, network, and reverse-proxy infrastructure.
Important project boundary
The CLI archive contains the generated admin-panel/, api-backend/, and landing-page/ folders. It never includes or publishes the source-repository docker/infra, docker/proxy, or docs directories. Those paths are BowlerKit operator tooling, not customer deliverables. Do not copy them into a customer project; provide equivalent customer-managed database, Redis, network, and reverse-proxy infrastructure instead.
Guest projects do not need this guide.
Customer-managed infrastructure
The generated Compose files expect external shared and web networks. Create and secure those networks with your infrastructure provider or deployment system, then attach PostgreSQL, Redis, Laravel, and the optional Go service according to your environment. The source-repository docker/infra and docker/proxy files are not a supported customer package.
Account services
Provision a database/user with your infrastructure tooling, then configure the generated Account project:
cd admin-panel
cp .env.example .env.production
# Set DB_*, REDIS_*, APP_URL, mail, Firebase, and RevenueCat values.
docker compose up -d --buildThe admin-panel compose services are named backend, queue, and scheduler. It is not a docs or admin-panel service stack.
The Go service is optional:
cd ../api-backend
cp .env.example .env.production
# Match Laravel's shared DB/Redis settings.
docker compose up -d --buildIts production compose file expects external web and shared networks and exposes the service internally as api-backend:8080.
Documentation site
The BowlerKit documentation site is maintained separately and is not included in a customer archive. Customer projects do not need to deploy docs/ or its Compose file.
Reverse-proxy contract
If your deployment uses a reverse proxy, route Laravel-owned paths to the Laravel backend service and keep /api/v1/app/* on Laravel compatibility mode by default:
| Prefix | Default upstream |
|---|---|
/api/v1/auth/* | Laravel |
/api/v1/auth/security/* | Laravel |
/api/v1/uploads* | Laravel |
/api/v1/webhooks* | Laravel |
/api/v1/app/* | Laravel compatibility mode |
/admin* | Laravel |
| catch-all | configured application upstream |
To use Go performance mode, deploy the Go service on web and change the /api/v1/app/* upstream to api-backend:8080 only after parity validation. Keep auth issuance, uploads, webhooks, and destructive account routes on Laravel.
Useful commands
# Inspect a Compose project
docker compose ps
docker compose logs -f backend
docker compose logs -f api-backend
# Run Laravel migrations in the backend container
docker compose exec backend php artisan migrateRun each command from the directory whose compose file owns the service. Never run migrate:fresh against production, and do not delete named volumes unless you intend to destroy application/database state.
Review every hostname, secret, Firebase credential mount, RevenueCat secret, trusted-proxy CIDR, and route before exposing a deployment. BowlerKit's repository-level infrastructure and Caddy configuration are operator-only examples and are not published or supported as customer production assets.
