Migrating a server

On this page

What migrations do#

The Migrations tab moves your data from another host directly onto your Pyro server. You point Pyro at the server you are moving away from, hand over read credentials for it, choose which files to copy and what game to run once they land, and the transfer happens server to server without you having to download and re-upload anything. This is for bringing an existing server in from somewhere else. It does not move your Pyro server between Pyro nodes or regions, and purchasing or provisioning a server still happens in the billing portal.

The whole flow is a six step wizard: Connect your source, Pick what to bring over, Pick your game, Configure your install, Pick a migration strategy, and Start your migration. A progress bar at the top of the wizard shows which step you are on, and every step has a "Back" and "Continue" button so you can move freely between them. Your answers are saved as a draft as you go, so if you leave and come back the wizard reopens where you left off.

Note: Starting a migration needs the migration.create permission. With only migration.read you can see the recent migrations list but not run a new one, and the page tells you to ask a server owner who has migration.create to start it. See users and permissions for how subuser access works.

Connect your source#

The first step asks how to reach the host you are moving from. Pick a Protocol from the four choices: "SFTP (Pass)", "SFTP (Key)", "FTP", and "FTPS". Then fill in the "Remote Host" (an address like 1.2.3.4 or sftp.example.com), the Port, and the "Username". The port defaults to 22 for the SFTP options and switches to 21 when you choose FTP or FTPS, but you can change it.

For "SFTP (Pass)", "FTP", and "FTPS" you also enter a password. If you pick plain "FTP" the wizard warns that it is insecure and sends credentials and data in plaintext, and suggests SFTP or FTPS instead.

"SFTP (Key)" works differently. Pyro generates a one time ed25519 keypair on the server when you click "Generate keypair", then shows you the public key. Copy it and paste it into ~/.ssh/authorized_keys on your source host so Pyro can log in. The private key stays in Pyro's encrypted cache for one hour and never leaves the server. A "Regenerate" button issues a fresh keypair if you need one. With this option there is no password field; the connection is tested automatically on the next step.

You cannot continue past this step until you have set a password or generated a keypair.

Pick what to bring over#

When you reach the "Pick what to bring over" step, Pyro immediately tries to connect to your source and list its files. While it works you see a spinner reading "Connecting" to your host. A successful listing is required before you can move on, which is how the wizard confirms your credentials actually work.

The first time Pyro connects to a host over SFTP it shows a "Trust on First Use" dialog with the host key fingerprint. Check the fingerprint against your source host, tick "I've verified this matches my source host", and click "Accept & Proceed". This protects against man-in-the-middle attacks. If the host's key changes later, the wizard flags it and stops, since a changed fingerprint can mean tampering.

Once the listing loads you get a file tree. Tick the folders and files you want to copy. Folders are recursive, so selecting one brings everything inside it, including dotfiles. Symlinks are listed but not followed. If a folder holds more than 15,000 entries the wizard asks you to narrow your selection to specific subfolders before continuing.

If the connection fails the step explains why with a clear message, for example rejected credentials, an unreachable host, or a timeout, and offers a "Back to credentials" button so you can fix the details and try again.

Pick your game and configure it#

The "Pick your game" step is where you choose what runs on the server once your files are in place. You first pick a category, then a specific version or flavor within it. Both lists have a search box and a "Show more" button when there are a lot of options, and "Back to categories" takes you back up a level. If you change your mind later you can swap from the Software page.

After you pick, the "Configure your install" step shows the startup variables for that choice. Defaults are filled in for you, so you only need to change anything if your source server used non-standard values. Each option is labelled and may be marked "Required" or "Read-only", and some appear as switches or dropdowns depending on what the option accepts. For modpack-based games, a dedicated picker for the project and version replaces the raw ID fields.

Pick a migration strategy#

The strategy step controls how the files you move combine with the destination server. There are three options:

  • Replace wipes the destination volume, reinstalls the game fresh, then copies your selected files over. It is irreversible and the most predictable result for a clean cut-over. It is marked "Destructive" and asks you to confirm on submit.
  • Refresh keeps the destination server, reinstalls the game, and replaces the selected files. Game-specific config and saves are wiped during the reinstall. This option is only available for some games, and is greyed out as "Unavailable for this egg" when it is not supported. The wizard then tells you to choose Replace or Overlay.
  • Overlay keeps the destination server and game as they are and copies the selected files on top. The source wins on conflict, and files that only exist on the target are left in place rather than removed.

Start your migration#

The last step, "Start your migration", shows a summary of everything you chose: the source as the protocol followed by user@host:port, how many paths you selected, the software, and the strategy. Check it over and click "Start migration". Once you submit, the destination server is suspended while the migration runs to prevent data corruption, and the transfer begins right away.

Note: Starting a migration cannot be undone. The destination server is suspended for the duration, and with the Replace or Refresh strategies existing data on the destination is wiped as described above. If there is anything on the destination you want to keep, take a backup first.

If you chose the Replace strategy, clicking "Start migration" first opens a "Wipe & Reset Server" dialog. It warns that the action is "Extremely destructive" and that it deletes all files and reinstalls from scratch. You confirm by typing your server name into the field, then clicking "Wipe & Reset". The migration only begins after this confirmation.

Watching progress and history#

While a migration is running the wizard is replaced by a live progress panel. It moves through "Waiting to start", "Checking your source", "Transferring files", and "Verifying" before finishing, with a progress bar and percentage that update on their own. During the transfer it also shows how much data has moved, the current speed, and an estimated time remaining, along with the protocol and mode in use.

A "Cancel migration" button is available while it runs. Cancelling asks you to confirm and warns that partial files may remain. When a migration finishes it lands on "Migration complete", "Migration failed", or "Migration cancelled". A failed migration shows a plain-language reason, for example rejected authentication, an unreachable host, or not enough free disk space.

Below the wizard, a "Recent Migrations" table lists your past attempts with their date, source host, mode, and status. A failed entry has a "Retry" button that reopens the wizard with the previous attempt's fields filled back in, so you can correct what went wrong without starting over. Credentials are never restored, so you re-enter your password or regenerate your keypair on retry. If the last migration was cancelled, the page notes that and lets you start a new one.

After a failed migration that left the destination in a bad state, a "Wipe Server" button appears so you can reset the server to a clean install and try again. Like the Replace confirmation, it asks you to type the server name before it wipes everything.