Migrate a 20i VPS to TinyServers: Zero-Downtime Checklist

TinyServers logo

This runbook moves a Linux web workload from a 20i VPS to a TinyServers NVMe VPS while keeping the old server available during DNS propagation. It uses an initial copy, pre-cutover testing and a final data sync. “Zero downtime” still depends on the application: write-heavy systems should use maintenance mode or database replication during the final cutover.

Prerequisites

  • A live 20i VPS (Debian / Ubuntu)
  • A freshly deployed TinyServers NVMe VPS (IPv4 only)
  • SSH root access on both machines
  • Your local id_ed25519.pub public-key file
  • ~15 minutes

Start here: download the printable migration checklist and tick off every backup, test and rollback item.

1 · Generate (or reuse) an SSH key

If you don’t already have a key pair on your 20i box, create one:

# On the 20i VPS
ssh-keygen -t ed25519 -C "20i > TinyServers migration"

2 · Authorise that key on your TinyServers VPS

TinyServers doesn’t (yet) expose key upload in the panel, so we’ll append your 20i public key to ~/.ssh/authorized_keys manually:

# Still on the 20i VPS
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@NEW_IP

# ─or─
cat ~/.ssh/id_ed25519.pub | ssh root@NEW_IP 
  "mkdir -p ~/.ssh && chmod 700 ~/.ssh && 
   cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3 · Mirror your files with rsync

From inside your 20i server run:

# Replace NEW_IP with your TinyServers public IPv4.
# First preview the deletion set; remove --dry-run only after review.
rsync -aAXvz --delete --dry-run 
  -e "ssh -i ~/.ssh/id_ed25519" 
  /var/www/ root@NEW_IP:/var/www/

rsync -aAXvz --delete 
  -e "ssh -i ~/.ssh/id_ed25519" 
  /var/www/ root@NEW_IP:/var/www/

4 · Dump & import your database

# On the 20i VPS
mysqldump -u root -p --all-databases > ~/dump.sql
scp -i ~/.ssh/id_ed25519 ~/dump.sql root@NEW_IP:/root/

# On the TinyServers VPS
mysql -u root -p < /root/dump.sql

Pre-cutover test and final sync

Before changing public DNS, test the destination while the old server still serves users:

curl --resolve yourdomain.example:443:NEW_IP https://yourdomain.example/ -I
ssh root@NEW_IP 'systemctl --failed'

Verify login, forms, uploads, email, cron jobs and application logs. Then pause writes or enable maintenance mode and run one final file and database sync:

rsync -aAXvz --delete 
  -e "ssh -i ~/.ssh/id_ed25519" 
  /var/www/ root@NEW_IP:/var/www/

mysqldump -u root -p --single-transaction --all-databases | 
  ssh root@NEW_IP 'mysql -u root -p'

Review every path before using --delete; an incorrect source path can remove destination files. For a busy database, use application maintenance mode or proper replication instead of relying on one logical dump.

5 · Switch DNS (TTL = 300 s)

  1. Edit your domain’s A record to point to <NEW_IP>.
  2. Lower TTL to 300 seconds first, wait, then flip the IP.

6 · Verify & decommission

  • curl -I https://yourdomain → shows TinyServers IP.
  • Backup & destroy the old 20i VPS to stop billing.

FAQ

Will I lose data?

The initial copy is not enough for a changing site. Pause writes or use replication, run the final sync, verify row/file counts and retain the old VPS until the new service is stable.

When should I cancel the old VPS?

Keep it online and read-only for at least 24–48 hours after DNS is stable. Cancel only after logs, transactions, backups and external DNS resolvers all confirm the move.

Is there a paid migration service?

The guide is DIY. Support can clarify the TinyServers side but does not perform a complete application migration.

Compare current NVMe VPS plans →

Next step: ready to migrate? Start with an NVMe VPS Romania plan from €2.48/month and follow the zero-downtime steps above.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *