Decide whether Towbar fits
This comparison is about fit, not an automatic claim that one platform is safer or faster. Validate the exact workload, build method, persistence model, and recovery procedure before choosing.
1. Inventory Coolify
For every application, record:- repository or image, branch, base directory, build method, Dockerfile or Compose paths, build and start commands;
- domains, internal ports, health checks, replicas, CPU and memory limits, and restart behavior;
- runtime variables, build variables, preview variables, and shared-variable references;
- persistent volumes, directories, files, owners, permissions, and mount paths;
- scheduled tasks, webhooks, preview settings, log drains, and external dependencies; and
- the current commit or immutable image digest.
2. Map each workload
Choose a Towbar deployment mode for every application:
Read Deployment modes before moving Compose. Towbar rejects privileged containers, Docker socket mounts, host bind mounts, fixed public host ports, remote includes, external namespaces, and several other patterns that a general Compose installation may permit.
Create
towbar.yml and one entity file per app or resource. Run schema validation in the repository before connecting it, then connect each environment to its branch. Keep automatic deployments disabled during migration.
3. Recreate credentials and integrations
Configure GitHub or GitLab, registries, backup storage, notifications, log forwarding, Cloudflare, and external-secret providers in Towbar’s host environment. Only correctly configured providers appear under Manage → Integrations. Copy application values into Shared secrets or workload environment secrets. Do not copy Coolify’s encrypted database rows or encryption key into Towbar. Rotate long-lived credentials where practical, and update OAuth callback URLs, provider webhooks, CI secrets, and allowlists for the new Towbar origin.4. Prepare a destination server
Install Towbar on a separate control-plane host, register the destination server, verify its SSH host key, and complete Server Preparation. You can reuse a workload server only after checking port, network, volume-name, and proxy conflicts. A separate destination is easier to test and roll back. Deploy stateless apps first through temporary domains. Verify the expected commit or image digest, health check, logs, outbound access, scheduled jobs, and private service connections.5. Move persistent data
Use an engine-aware logical backup for databases. Coolify supports engine-specific backup and restore flows for several engines; review its current backup and restore instructions and compare the archive with Towbar’s supported format and major version. For application volumes or directories:- Create the destination volume and confirm the expected container user.
- Stop writes on the source.
- Copy the files while preserving ownership, permissions, links, and timestamps.
- Start the destination and verify reads, writes, uploads, and background work.
6. Cut over and verify
- Lower DNS TTL ahead of the change when you control DNS directly.
- Stop source writes and create the final database backup or file synchronization.
- Restore into Towbar, verify representative records, then start dependent apps.
- Test login, writes, uploads, jobs, queues, email, OAuth, webhooks, backups, and alerts through a temporary hostname.
- Assign the production domain in the manifest, sync, deploy, and update DNS if the server address changed.
- Confirm TLS, health, logs, a manual deployment, a backup, and notification delivery.
Migration checklist
- Every workload, dependency, secret, domain, job, webhook, and volume is inventoried.
- Every Towbar manifest passes schema validation and review.
- The target server is prepared and has enough CPU, memory, and disk headroom.
- Persistent data has a tested, engine-aware migration path.
- Temporary-domain tests cover critical user and background flows.
- Production cutover and rollback owners, times, and data boundaries are written down.
- Towbar backups and a restore rehearsal succeed before the source is removed.
