Moving from Coolify.

Your compose file imports as it is written, SERVICE_* names included.

  1. Connect a server

    Install the agent. It connects out to the panel.

  2. Import

    In the repository, run yawl compose import. Read the notes, then run it again with --apply.

  3. Move the data

    Restore a dump into each database, then yawl deploy.

services:
  app:
    build: .
    environment:
      - APP_URL=${SERVICE_URL_APP_3000}
      - SECRET_KEY=${SERVICE_BASE64_64_APP}
      - DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/shop
      - REDIS_URL=redis://redis:6379
    depends_on: [postgres, redis]
  postgres:
    image: postgres:16
    volumes:
      - pg-data:/var/lib/postgresql/data
  redis:
    image: redis:7
$ yawl compose import --server hel1
Added app (web).
Added postgres (postgres).
Added redis (valkey).
Note: postgres: the data in volume pg-data is not moved; restore a dump into postgres once it runs.
Note: depends_on is ignored; Yawl starts each service on its own.
Note: app SECRET_KEY is generated only with --apply; or set your own with yawl env set.
Wrote yawl.yaml. Next: yawl apply, then set the variables:
  yawl env set app DATABASE_URL --ref postgres.url
  yawl env set app REDIS_URL --ref redis.url
  yawl env set app SECRET_KEY

What becomes what

AreaComposeIn Yawl
ServicesDatabase imagespostgres, mysql, mariadb, mongo, redis and valkey become Yawl databases, backed up nightly.
build:Built from the repository's origin, on the current branch.
image:Runs that image.
ports:A web service with its own address and TLS. Without ports, a worker.
Settingsenvironment: env_file:Variables. A URL that names a database service becomes a reference, like postgres.url.
Named volumesYawl volumes at the same path.
Coolify namesSERVICE_PASSWORD_* SERVICE_USER_* SERVICE_BASE64_* SERVICE_HEX_*Made on your machine and sealed with --apply. Never printed. One name has one value in every service.
SERVICE_URL_* SERVICE_FQDN_*Make the service a web service on that port, filled with its Yawl address.
Not carriedData in volumesRestore a dump into the new database once it runs.
Database passwordsYawl makes its own. Apps get the database's url.
Bind mountsSkipped. A server's folders are not your machine's.
depends_on healthcheck networks command restartLeft out, each named once in the notes.