Dokploy and Traefik
Deploy the app stack with Dokploy using the Dokploy compose variant and path-based Traefik routing.
Last updated
This page covers the Dokploy-oriented deployment path using:
docker-compose.dokploy.yml
This compose file:
- pulls prebuilt runtime images
- expects Dokploy to manage service domains
- expects Traefik to handle public routing
- uses Infisical for app configuration
If you are not using Infisical for this environment, use one of the non-Dokploy deployment guides instead. The Dokploy compose variant is intentionally Infisical-backed.
What this compose file includes
Services included in the stack:
postgresredisapiworkerwebmigrate
Optional profiles:
docstools
Minimal Dokploy env bootstrap
This path expects the normal application env values to live in Infisical.
The Dokploy env file only needs the bootstrap values and local infra secrets:
POSTGRES_PASSWORD=change-me
REDIS_PASSWORD=change-me
INFISICAL_PROJECT_ID=your-project-id
INFISICAL_ENV=prod
INFISICAL_TOKEN_API=...
INFISICAL_TOKEN_WORKER=...
INFISICAL_TOKEN_MIGRATE=...
INFISICAL_TOKEN_TOOLS=...
INFISICAL_API_URL=https://app.infisical.comApplication values such as DATABASE_URL, FRONTEND_URL, STORAGE_*, BETTER_AUTH_*, and RESEND_* should be stored in Infisical for this path.
Recommended Dokploy service-domain layout
| Service | Host | Path | Container port |
|---|---|---|---|
web | remote-eaze.example.com | / | 8080 |
api | remote-eaze.example.com | /api | 3000 |
api | remote-eaze.example.com | /admin/redis | 3000 |
api | remote-eaze.example.com | /admin/queues | 3000 |
api | api.remote-eaze.example.com | / | 3000 |
The root-domain admin routes are intentional. They make it easier for logged-in browser sessions to access Redis dashboard and Bull Board without cross-host cookie surprises.
Dokploy domain/path settings
For the root-domain API and admin routes, use path-based entries on the api service.
Recommended values:
| Host | Path | Internal Path | Strip Path | Container port |
|---|---|---|---|---|
remote-eaze.example.com | /api | / | Off | 3000 |
remote-eaze.example.com | /admin/redis | / | Off | 3000 |
remote-eaze.example.com | /admin/queues | / | Off | 3000 |
Why:
- The backend already expects those exact paths.
- Rewriting or stripping them would break route matching.
Deploy sequence
- Create the Dokploy app from the repository.
- Select
docker-compose.dokploy.yml. - Set the Dokploy env values shown above.
- Add the service-domain mappings.
- Deploy.
- After the stack is healthy, build the
toolsprofile on the Dokploy host if you need seeds or maintenance commands. - Run the bootstrap steps from Post-Deploy Bootstrap.
Notes on docs and tools profiles
Docs
The app stack includes a docs profile, but the documentation site can also be deployed separately with:
docker-compose.docs.yml
If you deploy the docs site separately in Dokploy, the target container port is still 3000.
Tools
The tools profile is for one-off operational commands such as seeds.
Build it first from the Dokploy-generated checkout:
cd /etc/dokploy/compose/<dokploy-project>/code
sudo docker compose -p <dokploy-project> -f docker-compose.yml --profile tools build toolsThen use that same generated checkout for bootstrap or maintenance commands. The full seed and reset flows are documented on Post-Deploy Bootstrap.
Health and docs access
If you attach the api.remote-eaze.example.com hostname to the api service, these become clean direct URLs:
https://api.remote-eaze.example.com/healthhttps://api.remote-eaze.example.com/health/livehttps://api.remote-eaze.example.com/documentation
Next step
Continue with Routing and Domains and then Post-Deploy Bootstrap.