Guides
Docker Compose
Bring an API, a worker, a database and Redis onto Skiff from the Compose file you already have. Skiff turns each service into a project, worker or managed database, so your stack gets backups, rollbacks and the dashboard. Services keep finding each other by the same names, so db:5432 in your config keeps working.
Check a file first
This shows what your file would become, and changes nothing:
skiff compose plan
skiff compose plan -f deploy/compose.yml --name shopCreate a stack
- 1
Open Stacks in the dashboard
Choose New stack, then give a repository or paste your file. Services that build from source need a repository. - 2
Check the file
Skiff lists what it will create, what will work differently and anything to fix first. - 3
Fill in missing values
Values like${DB_PASSWORD}come from what you enter here, then from a.envfile beside the Compose file. Check again after filling them in. - 4
Create it
Databases start first, then apps deploy independs_onorder.
Change a stack
For a stack from a GitHub repository, push your Compose file. Safe changes apply on their own, and only the services that changed are redeployed. A push that would delete data, or that has a problem, waits for you: the stack shows why, you get an alert, and new code still deploys with the current settings. Review those with Update. For a pasted file, or another Git host, use Update for every change. Values you entered earlier are remembered, encrypted, so it only asks for new ones.
- Deleting data needs your OK. Removing a database, a volume or an app with a volume is only applied once you confirm it.
- Database images and credentials can't be changed this way.A new password or major version doesn't apply to existing data, so Skiff refuses the update and explains why. To change one, back up and restore into a new database service.
- Your file wins. Settings or environment variables you changed in the dashboard are replaced if they differ from the file, and the update lists them first.
What each service becomes
- Stock Postgres, MySQL, MongoDB and Redis imagesbecome managed databases with daily backups, using your file's image, username, password and database name. They stay private. Other images, like
pgvector/pgvector, run as ordinary private apps, and their data is covered by volume backups. - Services that publish a port become public apps with HTTPS. Skiff serves one port per app, so only the first is used.
- Services with no published port stay private, and only the stack can reach them.
- A service with the same build, environment and volumes as an app, but its own command and no port, becomes that app's worker.
What's different from Compose
- Folders on your machine, like
./nginx.conf:/etc/nginx.conf, can't be used because they won't exist on the server. Build the file into the image or use a named volume. - Volumes can only be shared between an app and its workers.
- Health checks are used when they make an HTTP request. Otherwise a private service counts as ready once its port opens.
- Not supported:
privileged,network_mode,devices,extends,secretsandconfigs. Keys likerestartandnetworksare ignored.