Docker Compose: Source Build
Build images from the local checkout with Docker Compose, with optional Infisical bypass.
Last updated
This page covers:
docker-compose.source.yml
Use this path when you want to build the app from the repository instead of pulling prebuilt runtime images.
What this path requires
You need:
- Docker with Compose support
- a populated
.env - source checkout
Infisical or raw envs
This path supports both:
With Infisical
Set:
INFISICAL_PROJECT_ID=
INFISICAL_ENV=dev
INFISICAL_TOKEN_API=
INFISICAL_TOKEN_WORKER=
INFISICAL_TOKEN_MIGRATE=
INFISICAL_TOKEN_TOOLS=Without Infisical
Set:
SKIP_INFISICAL=trueThen provide the full application env set directly. See Environment Reference.
What this compose file creates
It creates:
postgresredisapiworkerwebmigrate
Optional profiles:
docstools
Standard deployment flow
docker compose -f docker-compose.source.yml build
docker compose -f docker-compose.source.yml up -dCommon follow-up commands:
docker compose -f docker-compose.source.yml ps
docker compose -f docker-compose.source.yml logs --tail=200 api worker web migrate
docker compose -f docker-compose.source.yml --profile tools build tools
docker compose -f docker-compose.source.yml --profile tools run --rm \
-e SYSTEM_ADMIN_PASSWORD="YourStrongPasswordHere" \
tools pnpm seed:system-adminThe tools profile is not started by up -d. Build it explicitly before running seeds or other operator commands through Compose.
If you are using SKIP_INFISICAL=true, the tools and migrate containers still validate the same runtime config schema as the app. A partial .env is not enough.
Ports
Default host mappings:
| Service | Default host port | Container port |
|---|---|---|
| API | 3000 | 3000 |
| Web | 5173 | 8080 |
| Docs | 3001 | 3000 |
ArcLocale note
Normal deployment builds do not need translation-provider API keys or extra npm registry auth.
The web build is forced into ArcLocale cache-only mode during Docker builds. That means:
- the build uses committed translation cache
- no translation API calls happen during a normal deployment build
- missing cache entries fail the build instead of silently reaching out to a provider
When to choose this path
Choose source build when:
- you want full control of the build on your host
- GHCR access is not convenient yet
Next step
After the stack is up, continue with Routing and Domains and Post-Deploy Bootstrap.