Wodby CLI

wodby migrate wodby1 server

Preview, apply, or verify every app migration from a Wodby 1 server

Migrate every application hosted on one Wodby 1 server. The default command is a read-only preview; --apply performs the resumable migrations and --verify validates them after testing and DNS cutover. Each application has an isolated resume-state file and is processed sequentially. Runtime failures are reported per app while remaining apps continue. A shared --target-git-integration-id searches that integration for every source repository by name; use --target-repository-map for per-app integrations or repository-name overrides. A missing repository match falls back to unlinked Custom CI. Use --skip-code only to omit code migration intentionally. Use repeatable --workspace-instance APP/INSTANCE values to create instances that use direct Git deployment as development workspaces: their code is checked out from the linked Git repository instead of being built by CI. By default, the newest successful file for each required backup component is selected. Use repeatable --source-backup APP/INSTANCE=BACKUP_UUID values to override individual snapshots, or --skip-data to omit data. Changes after each selected backup completed are not migrated. Test the migrated apps before changing DNS, then use --verify. When per-app state exists, --apply preserves the aggregate saved plan and continues completed work; --apply --restart replaces the saved plan after showing and confirming removal of only resources recorded as created by these migrations. Pre-existing target apps and reused resources are preserved. Restart is refused after successful verification or while any target operation remains ambiguous. --rollback deletes the Wodby 2 resources this migration created and discards its state; it refuses once --verify has succeeded, because DNS then points at Wodby 2. Migrated cron schedules stay disabled until --verify confirms that DNS points to Wodby 2, so scheduled jobs do not run on both platforms.

Usage

wodby migrate wodby1 server SOURCE_SERVER_UUID [flags]

Examples

export WODBY1_SOURCE_TOKEN=...
  export WODBY_API_KEY=...

  wodby migrate wodby1 server SERVER_UUID --target-cluster CLUSTER [target and mapping options]
  wodby migrate wodby1 server SERVER_UUID --target-cluster CLUSTER [same options] --apply
  wodby migrate wodby1 server SERVER_UUID --target-cluster CLUSTER [same options] --verify

Options

Flag Description Default
--add-missing-services Add mapped services missing from the target stack when an exact Wodby 2 service is available true
--allow-unsupported-drupal Allow Drupal 8/9 when the nginx preset does not identify Drupal 10 or newer and you have independently confirmed the application was upgraded false
--apply Create the target and import data using the displayed plan false
--exclude-app stringArray Exclude an app by exact UUID or name (repeatable) []
--exclude-instance stringArray Exclude an instance by UUID or APP/INSTANCE (repeatable) []
-h, --help help for server false
-o, --output string Output format: text or json text
--poll-interval duration Target operation polling interval 2s
--restart Replace the saved plan, safely removing migration-created target resources first when necessary (requires --apply) false
--retry-ambiguous string Retry exactly one inspected ambiguous operation ID -
--rollback Delete the Wodby 2 resources this migration created and discard its resume state false
--skip-code Intentionally omit repository/build-source migration false
--skip-data Intentionally omit database and files imports false
--source-backup stringArray Select a successful backup by APP/INSTANCE=BACKUP_UUID or INSTANCE_UUID=BACKUP_UUID (repeatable) []
--source-base-url string Wodby 1 API base URL https://api.wodby.com
--source-token string Wodby 1 API token (defaults to WODBY1_SOURCE_TOKEN) -
--state-file string Base path for secure per-app resume-state files; the plan is kept next to it (defaults to the system temporary directory) -
--target-backup-bucket string Bucket of --target-backup-integration-id for backups -
--target-backup-integration-id int Keep backups in this Wodby 2 storage integration (S3, GCS, Azure, Wasabi, Backblaze) instead of Wodby Blob or a copy of the Wodby 1 mirror; with --target-backup-bucket 0
--target-backup-window string Daily automatic backup window HH:MM-HH:MM in the organization's time zone, 30 to 180 minutes (default 02:00-05:00) -
--target-catch-mail Deliver the mail of non-production app environments to the stack's Mailpit service, so testing never emails real recipients false
--target-ci-integration-id int Wodby 2 CI integration ID override (otherwise Wodby CI with a linked repository, or automatic Custom CI fallback) 0
--target-cluster string Wodby 2 cluster ID or exact name -
--target-code-service string Target connect-build service name when the stack has more than one -
--target-env-map stringArray Map a Wodby 1 instance type to a Wodby 2 environment type (SOURCE=prod|staging|test|dev|feature) []
--target-git-integration-id int Optional Wodby 2 Git integration ID used to find and link the source repository 0
--target-git-ref string Git branch, tag, or commit to build (defaults to the source ref) -
--target-git-ref-type string Git ref type: branch, tag, or commit -
--target-import-map stringArray Backup-to-import mapping ([APP/][INSTANCE/]COMPONENT=SERVICE:IMPORT) []
--target-letsencrypt Give routes that used a custom certificate in Wodby 1 a Let's Encrypt certificate, issued once DNS points to Wodby 2, instead of uploading the certificate again false
--target-project string Wodby 2 project ID or exact name (defaults to a project-owned cluster's owner; otherwise organization-owned) -
--target-repository-map stringArray Per-app Git target (APP=GIT_INTEGRATION_ID[:REPOSITORY_NAME[:SERVICE]]) []
--target-repository-name string Exact repository name in the selected Wodby 2 Git integration (defaults to the name derived from the Wodby 1 repository URL) -
--target-service-map stringArray Source-to-target service mapping ([APP/][INSTANCE/]SOURCE=TARGET) []
--target-smtp-integration-id int Relay mail through this Wodby 2 SMTP integration instead of credentials copied from Wodby 1, also for instances that sent mail without a relay 0
--target-stack-id int Existing Wodby 2 stack ID override (managed Drupal/WordPress apps get a new catalog stack by default) 0
--target-stack-map stringArray Source-to-target stack ID mapping ([APP/][INSTANCE/]SOURCE=TARGET_STACK_ID) []
--target-version-map stringArray Source-service version override ([APP/][INSTANCE/]SOURCE_SERVICE=TARGET_VERSION) []
--target-wodby-ci Build instances that Wodby 1 deployed through third-party CI with Wodby CI, from the repository linked with --target-git-integration-id false
--verify Verify the applied migration after testing and DNS cutover false
--wait-timeout duration Timeout for each target operation 30m0s
--workspace-instance stringArray Create a direct-Git instance, by UUID or APP/INSTANCE, as a Wodby 2 development workspace instead of an app environment built by CI (repeatable) []
--workspace-storage-class string Storage class for the code and home volumes of development workspaces (defaults to the cluster's default storage class) -
--workspace-storage-service string Enabled storage service of the target stack that holds the code and home volumes of development workspaces instead of a storage class -
-y, --yes Approve a new migration plan without an interactive prompt false

Options inherited from parent commands

Flag Description Default
--access-token string Access token -
--api-base-url string Public REST API base URL https://apiv2.wodby.com/v1
--api-key string API key -
--ci-config-path string Path to CI config /tmp/.wodby-ci.json
--verbose Verbose output false

See also

wodby migrate wodby1