wodby migrate wodby1 instance
Preview, apply, or verify a Wodby 1 instance migration
Migrate exactly one Wodby 1 app instance. The default command is a read-only preview. Add --apply to create the target and import data, then test the target using its technical route. Change DNS only after testing succeeds, and rerun the same command with --verify to validate the completed migration. Add --workspace to create an instance that uses direct Git deployment as a development workspace: its code is checked out from the linked Git repository instead of being built by CI. The preview reports why an instance cannot be one. The migration exports only the selected instance and its parent app metadata, then creates a new Wodby 2 app containing a matching app environment. Pass --target-app to add it to an existing Wodby 2 app instead; the CLI infers the app's shared stack when unambiguous and never adopts or overwrites an existing app environment. By default it imports the newest successful backup file for each required component shown in the preview. Use --source-backup BACKUP_UUID to pin all components to a different complete snapshot, or --skip-data to omit data. Changes made after the selected backup completed are not migrated. Apply is resumable and stores its plan and state in the system temporary directory, or next to --state-file when it is set. When state exists, the same --apply command preserves the saved plan and continues completed work. --apply --restart replaces the saved plan. If the migration already changed Wodby 2, the CLI first shows and confirms removal of only the resources recorded as created by this migration; 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 instance SOURCE_INSTANCE_UUID [flags]
Examples
export WODBY1_SOURCE_TOKEN=...
export WODBY_API_KEY=...
wodby migrate wodby1 instance INSTANCE_UUID --target-cluster CLUSTER [target and mapping options]
wodby migrate wodby1 instance INSTANCE_UUID --target-app APP --target-cluster CLUSTER [target and mapping options]
wodby migrate wodby1 instance INSTANCE_UUID --target-cluster CLUSTER [same options] --apply
wodby migrate wodby1 instance INSTANCE_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 |
-h, --help |
help for instance | 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 Wodby 1 BACKUP_UUID for this instance | [] |
--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 |
Secure resume-state path; the plan is kept next to it (defaults to the system temporary directory) | - |
--target-app string |
Existing Wodby 2 app ID or exact name to receive the migrated app environment | - |
--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-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 |
Create this direct-Git instance as a Wodby 2 development workspace instead of an app environment built by CI | false |
--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 |