How to Migrate from AWS to a UK VPS — Step-by-Step Guide
AWS is the default choice for many UK startups — but the default isn't always the best choice, especially when you discover what AWS actually costs for a growing business.
That $15/mo EC2 instance becomes a $200/mo bill once you add RDS, load balancers, NAT gateways, EBS volumes, data transfer fees, and the 47 other services that appear on your monthly statement.
For UK businesses, there's an additional concern: data residency. Your AWS resources might be in London, but the management plane, support, and data processing pathways can cross borders in ways that complicate GDPR compliance.
This guide walks you through migrating from AWS (EC2, RDS, and related services) to a UK-based VPS — cutting your infrastructure costs by 60-80% while improving performance for UK users.
---
Before You Begin: What You're Actually Paying AWS
Let's be honest about the numbers. Here's a typical UK SaaS setup on AWS:
| AWS Service | Monthly Cost |
|---|---|
| EC2 t3.medium (2 vCPU, 4GB RAM) | £32.50 |
| RDS db.t3.small (2 vCPU, 2GB RAM) | £28.00 |
| Load Balancer (ALB) | £18.50 |
| NAT Gateway | £5.50 |
| EBS volumes (100GB gp3) | £9.50 |
| Data transfer (1TB out) | £78.00 |
| Snapshots (automated) | £5.00 |
| Total | £177.00/mo |
| Equivalent on Hostingowy: | |
|---|---|
| --------- | ------------- |
| Business VPS (4 vCPU, 4GB RAM, 80GB NVMe) | £25.00 |
| Included 1TB transfer | £0.00 |
| Included daily snapshots | £0.00 |
| Total | £25.00/mo |
Annual difference: £1,824. And the VPS runs on newer hardware with NVMe storage (AWS gp3 EBS caps at ~3000 IOPS; NVMe delivers 50,000+).
---
Migration Strategy: Lift-and-Shift
For most setups, a lift-and-shift migration works best. You move the same OS, applications, and data to the new VPS with minimal changes. This keeps the migration simple and predictable.
Architecture Before Migration (AWS)
Users → Route53 → ALB → EC2 (web/app) → RDS (database)
↓
EBS volumes (storage)
Architecture After Migration (UK VPS)
Users → Cloudflare → VPS (Nginx + App + PostgreSQL)
↓
NVMe storage (local)
You lose managed services (RDS, ALB) but gain simplicity, cost savings, and full control. For most UK startups, this trade-off is overwhelmingly positive.
---
Step 1: Provision Your UK VPS
Before touching AWS, create your destination infrastructure.
- Sign up at Hostingowy — Use code
LAUNCH100for first month free - Choose your plan — Match current specs with headroom:
| Current AWS Instance | Recommended Hostingowy Plan |
|---|---|
| EC2 t3.nano/t3.micro | Starter VPS (£4/mo — 1 vCPU, 1GB RAM, 25GB NVMe) |
| EC2 t3.small/t3.medium | Professional VPS (£10/mo — 2 vCPU, 2GB RAM, 50GB NVMe) |
| EC2 t3.large/c5.large | Business VPS (£25/mo — 4 vCPU, 4GB RAM, 80GB NVMe) |
| EC2 c5.xlarge+ | Enterprise VPS (£50/mo — 8 vCPU, 8GB RAM, 160GB NVMe) |
- Deploy Ubuntu 22.04 LTS — Takes under 60 seconds
- Note your new VPS IP — You'll need it for rsync and DNS
---
Step 2: Export Data from AWS
2a. EC2: Create a Snapshot and Launch a Temporary Instance
For a clean migration, work from a snapshot rather than a running instance:
# Create an AMI from your running EC2 instance
aws ec2 create-image --instance-id i-xxxxxxxxx --name "pre-migration-snapshot"
Launch a temporary instance from the AMI in the same subnet
aws ec2 run-instances --image-id ami-xxxxxxxxx --instance-type t3.small
SSH into the temporary instance to prepare your data:
ssh -i your-key.pem ec2-user@
2b. Package Application Files
# Create a compressed archive of your application
tar -czf app-backup.tar.gz /var/www/ /etc/nginx/ /etc/letsencrypt/
2c. Export Database
PostgreSQL (RDS or self-managed):
pg_dump -h your-rds-endpoint.rds.amazonaws.com -U username -d databasename --clean --if-exists > database_dump.sql
MySQL/MariaDB (RDS or self-managed):
mysqldump -h your-rds-endpoint.rds.amazonaws.com -u username -p --all-databases --quick --single-transaction > database_dump.sql
2d. Copy EBS Volume Data
If you have large files (user uploads, media, logs):
# Create an archive of your EBS mount point
tar -czf ebs-data-backup.tar.gz /path/to/ebs-mount/
Check archive size
ls -lh ebs-data-backup.tar.gz
---
Step 3: Transfer Data to Your UK VPS
From your local machine (has access to both AWS and the new VPS):
# Copy the archived files from your temp EC2 instance to your local machine
scp -i your-key.pem ec2-user@:~/app-backup.tar.gz .
Copy database dump
scp -i your-key.pem ec2-user@:~/database_dump.sql .
Optional: copy EBS data
scp -i your-key.pem ec2-user@:~/ebs-data-backup.tar.gz .
Upload everything to your Hostingowy VPS
scp app-backup.tar.gz root@:/root/
scp database_dump.sql root@:/root/
For large datasets (50GB+), use rsync with a direct SCP from AWS:
# From the temporary EC2 instance, rsync directly to your VPS
rsync -avz --progress -e "ssh -i /path/to/vps-key.pem" \
/var/www/ root@:/var/www/
---
Step 4: Configure Your VPS
SSH into your Hostingowy VPS:
ssh root@
4a. Install Core Software
# Update system
apt update && apt upgrade -y
Install Nginx, PostgreSQL, and Redis (adjust to your stack)
apt install -y nginx postgresql postgresql-contrib redis-server
Install Node.js 20.x (or your runtime)
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
Install Python with pip (if needed)
apt install -y python3 python3-pip python3-venv
Install Docker (if needed)
curl -fsSL https://get.docker.com | sh
4b. Restore Application Files
# Extract your application archive
tar -xzf /root/app-backup.tar.gz -C /
4c. Restore PostgreSQL Database
# Create the database user and database
sudo -u postgres createuser --superuser your_app_user
sudo -u postgres createdb your_database --owner your_app_user
Restore from dump
sudo -u postgres psql -d your_database < /root/database_dump.sql
4d. Configure Nginx
# Set up your Nginx site configuration
nano /etc/nginx/sites-available/yourdomain.com
Example configuration:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000; # Adjust for your app
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Enable the site
ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
4e. Set Up SSL with Let's Encrypt
apt install -y certbot python3-certbot-nginx
certbot --nginx -d yourdomain.com -d www.yourdomain.com
4f. Configure Your Application
# Set up environment variables
nano /var/www/your-app/.env
Set up PM2 or systemd for process management
npm install -g pm2
cd /var/www/your-app
pm2 start app.js --name your-app
pm2 save
pm2 startup
---
Step 5: Security Hardening
Before making your VPS publicly accessible:
# 1. Update SSH configuration
nano /etc/ssh/sshd_config
Set: PasswordAuthentication no
Set: PermitRootLogin prohibit-password
systemctl restart sshd
2. Set up UFW firewall
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow http
ufw allow https
ufw enable
3. Install and configure fail2ban
apt install -y fail2ban
systemctl enable fail2ban
4. Set up automatic security updates
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
5. Configure Redis with password (if installed)
nano /etc/redis/redis.conf
Uncomment and set: requirepass your-strong-password
systemctl restart redis-server
---
Step 6: Test Everything
Before touching DNS, verify your new setup:
- Test via IP: Visit
http://— does your site/app load? - Test API endpoints:
curl http:///api/health - Test database connection: Can your app connect and query?
- Check logs:
tail -f /var/log/nginx/error.log - Test SSL:
curl -I https://(after staging cert)
Use your local hosts file for full testing:
# Add to /etc/hosts (Linux/Mac) or C:\Windows\System32\drivers\etc\hosts (Windows)
yourdomain.com www.yourdomain.com
Visit https://yourdomain.com — everything should work exactly as before, but served from your UK VPS.
---
Step 7: Switch DNS
Once you're confident everything works:
- Lower TTL: Reduce your DNS TTL to 60 seconds (do this 24 hours before cutover)
- Update A records: Point your domain to the new VPS IP
- Update any other records: CNAME, MX, etc. if needed
- Wait for propagation: Usually 5–15 minutes with low TTL
- Verify globally: Use
https://www.whatsmydns.net/to check propagation
---
Step 8: Decommission AWS (After 48 Hours)
Keep both environments running for 48 hours. During this window:
- Monitor your application logs on the new VPS
- Verify all background jobs, cron tasks, and email delivery
- Run a final comparison of response times (AWS vs VPS)
- Confirm no data divergence between the old and new environments
After 48 hours of stable operation:
# Terminate EC2 instances
aws ec2 terminate-instances --instance-ids i-xxxxxxxxx
Delete RDS instance (take final snapshot)
aws rds delete-db-instance --db-instance-identifier your-db --final-db-snapshot-identifier final-snapshot
Delete load balancer
aws elbv2 delete-load-balancer --load-balancer-arn arn:aws:elasticloadbalancing:...
Release elastic IPs
aws ec2 release-address --allocation-id eipalloc-xxxxxxxxx
Delete snapshots > 48h old
(Keep one final snapshot for 30 days as safety net)
---
Cost Comparison: Before vs After
| Category | AWS (Monthly) | Hostingowy VPS (Monthly) | Savings |
|---|---|---|---|
| Compute | £32.50 (EC2) | £25.00 (VPS) | 23% |
| Database | £28.00 (RDS) | Included (self-managed) | 100% |
| Network | £102.00 (ALB + NAT + transfer) | Included (1TB) | 100% |
| Storage | £14.50 (EBS + snapshots) | Included (NVMe) | 100% |
| Total | £177.00/mo | £25.00/mo | 86% savings |
Annual savings: £1,824+
And you get: - Lower latency for UK users (15ms vs 50-150ms) - NVMe performance (50,000+ IOPS vs gp3 EBS at 3,000 IOPS) - UK data residency guaranteed (GDPR compliance by default) - Engineer support (not AWS support forums)
---
When NOT to Migrate from AWS
Honestly, AWS is the right choice if:
- You need managed Kubernetes (EKS) — running production K8s yourself requires significant DevOps expertise
- You use Lambda extensively — serverless architecture on AWS is hard to replicate on a VPS without significant re-architecting
- You have auto-scaling requirements — VPS vertical scaling takes minutes; AWS auto-scaling groups take seconds
- You need global Points of Presence — AWS has 100+ edge locations; a single UK VPS covers only European traffic well
For everyone else — single-region applications, monoliths, standard web apps, SaaS backends, APIs — migrating from AWS to a UK VPS saves you 60-80% while improving performance for your core user base.
---
Migration Checklist
- [ ] Provision Hostingowy VPS (use code
LAUNCH100for first month free) - [ ] Create AWS AMI snapshot of current EC2 instance
- [ ] Launch temporary EC2 instance from snapshot
- [ ] Export database (PostgreSQL/MySQL dump)
- [ ] Archive application files and configurations
- [ ] Transfer data to VPS
- [ ] Install required software on VPS
- [ ] Restore application files and database
- [ ] Configure Nginx/Apache and SSL
- [ ] Harden server security (SSH, firewall, fail2ban)
- [ ] Test application via IP and local hosts file
- [ ] Switch DNS (A record)
- [ ] Monitor for 48 hours
- [ ] Decommission AWS resources
---
Ready to migrate? Hostingowy offers free engineer-assisted migration for all new customers. We handle the entire migration from AWS — data transfer, DNS cutover, testing — so you don't have to lift a finger. Sign up at hostingowy.com with code LAUNCH100.
Questions? founders@hostingowy.com — we answer within 2 hours, even on weekends.