DigitalOcean to UpCloud, Scaleway or Hetzner: a simple move
Moving from DigitalOcean to UpCloud, Scaleway, or Hetzner is straightforward because DigitalOcean relies on open standards like Linux, PostgreSQL, and S3.

Moving from DigitalOcean to a European cloud provider like UpCloud, Scaleway, or Hetzner is one of the most straightforward infrastructure projects a small engineering team can undertake. Unlike the big US hyperscalers, DigitalOcean is built around standard, open-source primitives: Linux virtual machines, standard PostgreSQL and MySQL databases, S3-compatible object storage, and upstream Kubernetes. Because your applications are rarely tied to proprietary APIs, you do not need to rewrite your software to leave. You can replicate your setup on an EU-owned provider, synchronize your data over the network, and switch your traffic over a single planned maintenance window.
Key takeaways
- Low technical lock-in: DigitalOcean Droplets, Managed Databases, and Spaces map directly to standard services on European clouds without code changes.
- Three distinct EU targets: UpCloud offers a very similar developer experience with high-performance storage; Scaleway provides the broadest ecosystem of managed services and serverless tools; Hetzner delivers the lowest compute prices if you are willing to manage databases and Kubernetes yourself.
- App Platform requires a choice: If you use DigitalOcean App Platform, you will either move to Scaleway Serverless Containers or transition to a standard container setup using Docker or Kubernetes.
- Egress costs are manageable: Most DigitalOcean plans include a generous outbound data transfer pool, and under the EU Data Act, switching egress fees are capped at provider cost until January 12, 2027, when they are banned entirely.
Why leaving DigitalOcean is simpler than leaving a hyperscaler
When companies migrate away from AWS, Google Cloud, or Azure, they spend most of their time untangling proprietary services. An application built on AWS often relies on IAM roles for internal authentication, DynamoDB for data storage, SQS for queuing, and Lambda for compute. Moving that application requires rewriting code and redesigning how services talk to each other.
DigitalOcean was designed differently. It became popular with startups and small teams specifically because it avoided that complexity. When you deploy on DigitalOcean, you are usually using standard Linux virtual machines (Droplets), standard open-source databases (PostgreSQL, MySQL, Redis/Valkey), an S3-compatible object store (Spaces), and standard Kubernetes (DOKS).
For a European company looking to bring its infrastructure under EU jurisdiction, this architecture is an advantage. Your application code speaks standard protocols: TCP/IP, SQL, Redis protocol, and the S3 HTTP API. European cloud providers speak these exact same protocols.
Instead of an application refactoring project, a move from DigitalOcean to Europe is a pure infrastructure migration. You build an equivalent environment on the new provider, copy your data, update your deployment pipelines, and switch your DNS records.
Choosing your destination: UpCloud, Scaleway, or Hetzner
European cloud infrastructure has matured significantly. For teams leaving DigitalOcean, three providers stand out depending on your budget, your reliance on managed services, and how much operations work your team wants to do.
UpCloud: the closest match for DigitalOcean teams
Headquartered in Finland, UpCloud is built for small and mid-sized engineering teams that want high reliability, predictable Euro billing, and a clean control panel without dozens of obscure services.
If your DigitalOcean setup consists of Droplets, Managed PostgreSQL or MySQL, Managed Redis/Valkey, Load Balancers, Managed Kubernetes, and Spaces, UpCloud has a direct one-to-one equivalent for every component. UpCloud is also well-known for its in-house MaxIOPS block storage, which offers noticeably faster disk read and write speeds than standard shared VPS storage.
For pricing, UpCloud offers entry-level Starter plans starting at approximately €3 per month for 1 vCPU and 1 GB of RAM as of 2026, alongside Cloud Native and High Performance tiers (check UpCloud’s pricing page for current specifications and regional availability). UpCloud also includes zero-cost data egress under a fair transfer policy across its plans.
Scaleway: the broadest managed ecosystem
Based in France and part of the Iliad Group, Scaleway is the closest European equivalent to a full-featured cloud platform. Like UpCloud, it covers all the core DigitalOcean primitives: Virtual Instances, Managed Databases for PostgreSQL and MySQL, Managed Redis, Kubernetes Kapsule, Load Balancers, and S3-compatible Object Storage.
Scaleway stands out if your team uses higher-level platform services. If you rely on DigitalOcean Functions or DigitalOcean App Platform, Scaleway offers Serverless Functions, Serverless Containers, and Serverless Jobs. It also provides managed messaging and queuing systems, transactional email (TEM), and an integrated observability platform (Cockpit). If your team wants to minimize server maintenance and rely on managed platform tools, Scaleway is the strongest fit.
Hetzner: maximum compute value for hands-on teams
Based in Germany with data centers in Germany and Finland, Hetzner is famous across Europe for its price-to-performance ratio. If your primary goal is reducing your monthly infrastructure bill while keeping data in the EU, Hetzner is hard to beat.
However, there is a clear trade-off: Hetzner focuses strictly on core infrastructure. It provides Cloud Servers (VMs), Block Storage Volumes, Private Networks, Firewalls, Load Balancers, and S3-compatible Object Storage. Hetzner does not offer managed databases, managed Redis, or managed Kubernetes.
If you move from DigitalOcean to Hetzner, any managed PostgreSQL clusters or DOKS (Kubernetes) clusters you currently run will need to be set up and maintained on Linux virtual machines. For teams with experienced DevOps or platform engineers, running PostgreSQL with automated backups or deploying a lightweight Kubernetes distribution (like k3s) on Hetzner VMs is routine. For teams without dedicated operations staff, the money saved on compute can easily be lost in engineering time spent managing database failovers and cluster upgrades.
Service-by-service mapping
The table below shows how DigitalOcean products map to UpCloud, Scaleway, and Hetzner.
| DigitalOcean Service | UpCloud Equivalent | Scaleway Equivalent | Hetzner Equivalent | Migration Complexity |
|---|---|---|---|---|
| Droplets (Shared & Dedicated) | Cloud Servers (Starter, Cloud Native, High Performance) | Virtual Instances (Development, General Purpose) | Cloud Servers (Shared & Dedicated vCPU) | Low. Standard Linux VMs. Rebuild via Terraform or Ansible. |
| Managed PostgreSQL / MySQL | Managed Databases (PostgreSQL, MySQL) | Managed Databases for PostgreSQL and MySQL | No managed service. Run on Cloud Servers (VMs). | Low on UpCloud/Scaleway via logical replication. Medium on Hetzner (requires self-hosting setup). |
| Managed Caching (Redis / Valkey) | Managed Valkey | Managed Inference / Redis clusters | No managed service. Run on Cloud Servers. | Low. Often migrated by warming a new cache or syncing via replicaof. |
| Spaces Object Storage | UpCloud Object Storage | Scaleway Object Storage | Hetzner Object Storage | Low. All use the S3 API. Sync files with rclone and update endpoint URLs. |
| Kubernetes (DOKS) | Managed Kubernetes (UKS) | Kubernetes Kapsule / Kosmos | No managed service. Run k3s/Talos on VMs. | Low on UpCloud/Scaleway. Redeploy Helm charts and manifests. Medium on Hetzner. |
| Load Balancers | Managed LoadBalancer | Load Balancers | Cloud Load Balancers | Low. Recreate listeners, health checks, and TLS certificates. |
| VPC & Cloud Firewalls | SDN Private Networks & Firewall | VPC, Private Networks & Security Groups | Networks & Cloud Firewalls | Low. Translate IP ranges and port rules in Terraform. |
| Volumes Block Storage | MaxIOPS / Standard Block Storage | Block Storage (5K / 15K IOPS) | Cloud Volumes | Low. Attach new volumes and sync filesystem data with rsync. |
| App Platform / Functions | No direct PaaS. Run on Kubernetes or Docker VMs. | Serverless Containers & Serverless Functions | No direct PaaS. Run Coolify, Kamal, or Docker on VMs. | Medium. Requires packaging apps as standard containers if not already containerized. |
What about pricing and switching costs?
Small teams often choose DigitalOcean for its predictable monthly pricing, where shared CPU Droplets start at approximately $4 to $7 per month and Spaces starts at a $5 per month base subscription as of 2026 (always check the provider’s official pricing page for current rates).
When moving to an EU cloud, you gain two financial benefits:
- Billing in Euros: For European companies, paying in USD introduces foreign exchange fees and monthly accounting variance. UpCloud, Scaleway, and Hetzner all bill natively in Euros.
- Lower or comparable resource costs: European providers are generally priced very competitively against US counterparts. Hetzner in particular often reduces raw compute and storage bills substantially, while UpCloud and Scaleway offer comparable or better performance per Euro spent, especially when factoring in network transfer.
Egress fees and the EU Data Act
During a migration, you have to copy your databases and object storage over the internet to the new cloud provider. On some clouds, this outbound data transfer (egress) causes a painful final bill.
On DigitalOcean, this is rarely an issue for small and mid-sized teams. Droplets and Spaces plans include generous monthly outbound transfer allowances pooled across your account. Unless you are moving many terabytes of media files in a single month, your migration traffic will likely fit inside your existing included bandwidth pool.
Furthermore, European law protects companies switching cloud providers. Under Article 29 of the EU Data Act (Regulation (EU) 2023/2854), cloud providers may not charge switching fees—including data egress charges incurred to move to another provider—above their actual direct cost, and from January 12, 2027, all switching charges and switching egress fees are banned entirely across the EU.
How to execute the migration: a 6-step checklist
If you decide to move your DigitalOcean environment to UpCloud, Scaleway, or Hetzner, you do not need a six-month roadmap. Most small teams can complete the preparation in a few days and execute the switch during a quiet evening window.
1. Inventory your DigitalOcean account
- List all active Droplets, their CPU/RAM sizes, and any local data stored on their disks (outside of databases).
- Check your Managed Databases: note the exact engine version (for example, PostgreSQL 15 or MySQL 8), database size, and extensions used.
- Check Spaces buckets: note total storage size, public vs. private access permissions (ACLs), and whether you use the built-in Spaces CDN.
- Document all Cloud Firewall rules, VPC subnet ranges, and Load Balancer health check settings.
- Lower the TTL (Time-To-Live) on your DNS records to 60 or 300 seconds a few days before the cutover.
2. Provision the EU target environment as code
- Even if you created your DigitalOcean resources by clicking around in the web console, use the migration as an opportunity to write Terraform (or OpenTofu) configurations for your new EU cloud. UpCloud, Scaleway, and Hetzner all maintain official, well-documented Terraform providers.
- Create the private network, firewall rules, virtual machines, load balancers, and database clusters in your chosen EU region (such as Frankfurt, Amsterdam, Paris, Warsaw, or Helsinki).
- Do not copy old virtual machine disk snapshots directly unless necessary. Instead, provision fresh Linux VMs on the EU cloud and deploy your application code to them.
3. Synchronize your object storage
- Create the corresponding buckets on UpCloud, Scaleway, or Hetzner Object Storage.
- Use a tool like
rcloneconfigured with both your DigitalOcean Spaces keys and your new EU S3 keys. - Run an initial background sync (
rclone syncwith checksum verification). Because this runs while your live application is still on DigitalOcean, it can take several hours or days without affecting users. - Just before cutover, you will run a final delta sync to catch any newly uploaded files.
4. Set up live database replication
- Rather than taking your app offline for hours to run
pg_dumpandpg_restore, use logical replication (for PostgreSQL) or binary log replication (for MySQL). - Configure your new EU database to subscribe to changes from your DigitalOcean Managed Database over an encrypted connection, restricting access by IP address in your DigitalOcean database firewall.
- Let the initial data copy complete, and verify that replication lag drops to near zero. Your EU database is now a live, up-to-date follower of your DigitalOcean database.
5. Point your CI/CD pipelines and test
- Update your GitHub Actions, GitLab CI, or deployment scripts to deploy your application containers or binaries to the new EU servers or Kubernetes cluster.
- Update your application’s environment variables in the new environment so it points to the new EU database, the new Redis cache, and the new S3 object storage endpoints.
- Test the new environment thoroughly using internal host file overrides or a staging domain before exposing it to public traffic.
6. Cut over traffic and keep a rollback path
- Choose a low-traffic window for your users.
- Put your application into a brief maintenance or read-only mode (so no new writes hit the DigitalOcean database).
- Verify that database replication lag is zero and run a final fast
rclonepass on your object storage. - Promote the EU database to be the primary writer.
- Update your DNS records (or proxy targets in Cloudflare/bunny.net) to point to the new EU Load Balancer IP address.
- Keep the old DigitalOcean environment running for a week or two (ideally with reverse replication configured if you need a fast rollback option) before deleting the old resources and closing out your bill.
Common pitfalls to watch out for
Even in a simple migration, a few details can catch teams by surprise:
- Hardcoded Spaces URLs: DigitalOcean Spaces URLs follow the pattern
bucket.region.digitaloceanspaces.com(orcdn.digitaloceanspaces.com). If you stored full URLs in your database rows instead of relative paths, you will need to run a database migration script to update those strings, or use a custom domain for your object storage so the URL never changes again. - Droplet metadata service: If your custom boot scripts query the DigitalOcean metadata IP (
169.254.169.254) using DigitalOcean-specific JSON paths, you may need to adjust them to standardcloud-initformats used by UpCloud, Scaleway, and Hetzner. - Database connection pools: DigitalOcean Managed Databases include built-in PgBouncer connection pooling configured in the control panel. Check how your target provider handles connection pooling (UpCloud and Scaleway offer managed pooling options, while on Hetzner you will need to install PgBouncer alongside PostgreSQL).
- SMTP port blocking: To prevent spam, DigitalOcean, UpCloud, Scaleway, and Hetzner all frequently block outbound ports 25, 465, and 587 by default on new accounts. If your servers send email directly or connect to an SMTP relay over those ports, request port unblocking from support before your migration night, or switch to an HTTP API or port 2525.
Frequently asked questions
Will moving from DigitalOcean to an EU cloud require downtime?
Most migrations require a short, planned write pause during the final cutover. Because your database and object storage are synchronized in the background while your app stays live, the actual cutover only requires pausing database writes, confirming replication lag is under a few seconds, promoting the new database, and switching DNS. For most small teams, this write pause takes between a few seconds and a few minutes.
How do we migrate DigitalOcean App Platform?
DigitalOcean App Platform is a Platform-as-a-Service (PaaS) that builds and runs code from your Git repository. If your app uses a Dockerfile, the easiest managed equivalent in Europe is Scaleway Serverless Containers. Alternatively, if you move to UpCloud or Hetzner, you can deploy your containers onto a Managed Kubernetes cluster (UpCloud) or use a lightweight deployment tool like Kamal, Docker Compose, or Coolify on a virtual machine.
Can we keep Cloudflare in front of our new EU infrastructure?
Yes, and doing so actually makes the cutover faster. If you proxy your traffic through Cloudflare (or a European alternative like bunny.net), you do not have to wait for global DNS caches to expire during the switch. When you change the origin IP address in your proxy dashboard from your DigitalOcean Load Balancer to your new EU Load Balancer, traffic shifts to the new environment almost immediately.
Which provider is best if we need GDPR and DORA compliance?
UpCloud, Scaleway, and Hetzner are all headquartered in the European Union (Finland, France, and Germany respectively) and operate EU data centers under European jurisdiction, avoiding US extraterritorial laws that apply to US-owned providers like DigitalOcean. If your company falls under the EU Digital Operational Resilience Act (DORA, which applied from January 17, 2025), moving to standard open-source infrastructure defined in Terraform also satisfies key requirements for documented ICT exit strategies and reduced vendor lock-in.
How MoveInfra can help
If your team wants to move off DigitalOcean without pulling engineers away from product work, MoveInfra handles the migration end-to-end for a fixed price. We analyze your current setup, rebuild your environment as clean Terraform code on UpCloud, Scaleway, or Hetzner, synchronize your databases and Spaces buckets with live replication, and coordinate the cutover with a 30-day rollback window. You can upload your cloud bill on moveinfra.eu to get a free inventory and compare your new monthly costs before granting any access.