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 |