Skip to content

Migrate from DigitalOcean Droplets to Quake AI Compute

Migration · Updated Jun 2026

Coming from another cloud?

▸DigitalOcean·Droplets, Volumes, Snapshots

Dropletshigh

  • API surface is DigitalOcean’s proprietary REST/CLI/Terraform tooling rather than OpenStack Nova/Neutron/Glance APIs (Droplets are managed via DigitalOcean UI/CLI/API/Terraform).
  • Billing is usage-based with per-second billing (60-second minimum and monthly cap) rather than the typical per-hour, quota-based charge model users often see in OpenStack-based clouds.
  • Droplets include a bundled outbound transfer allowance with each plan (starting at 500 GiB/month) rather than a separate bandwidth quota/metering model users often encounter in OpenStack deployments.
  • Droplets are described as Linux-based VMs on virtualized hardware with local SSD storage, whereas OpenStack deployments commonly expose distinct block storage (Cinder) and image services (Glance) and may not bundle bandwidth/monitoring/firewalls into the instance offering.
DigitalOcean docs ↗

Volumeshigh

  • Uses proprietary /v2/volumes API instead of OpenStack Cinder /v3/{project_id}/volumes; actions like attach/detach/resize via undocumented POST /volumes/{id}/actions rather than /os-volume-attach etc.
  • Enforces single-instance attachment only (one Droplet at a time); OpenStack supports multi-attach volumes.
  • Volume names must be globally unique per region; OpenStack uses IDs primarily with optional display names.
  • Size specified in GiB (binary) with 1 GiB to 16 TiB range; OpenStack typically GiB but flexible.
DigitalOcean docs ↗

Migrate from DigitalOcean droplets to Quake AI compute

This guide covers migrating compute workloads from DigitalOcean Droplets to Quake AI (OpenStack Nova). DigitalOcean does not support image export, so the recommended approach is rebuild and rsync: provision a fresh Nova instance, install your application stack, and transfer data.

Service mapping#

DigitalOcean to Quake AI

DigitalOcean serviceQuake AI equivalentKey difference
Droplet sizes (plans)FlavorsA Droplet must select a predefined “size” bundle (RAM/vCPU/disk/transfer) rather than choosing from an OpenStack flavor catalog that many... see details
Images (Distributions, 1-Click Apps, Snapshots, Backups, Custom Images)ImagesDigitalOcean classifies images into specific types (snapshots, backups, applications/1-Click, distributions, custom) rather than OpenStack... see details
DropletsInstancesAPI surface is DigitalOcean’s proprietary REST/CLI/Terraform tooling rather than OpenStack Nova/Neutron/Glance APIs (Droplets are managed... see details
SSH keys (Account/Team SSH keys)Key PairsSSH keys are managed at the account/team level via /v2/account/keys and then referenced by ID/fingerprint when creating Droplets, whereas... see details
Tags (for grouping Droplets)Server GroupsDigitalOcean uses tags as a grouping/selection mechanism (filtering, bulk actions, auto-inclusion in firewall/LB configs) rather than... see details
Droplet SnapshotsSnapshotsDigitalOcean requires the Droplet to be powered off for a consistent snapshot (POST /v2/droplets/{id}/actions with {"type": "snapshot"}); a... see details
Volume SnapshotsSnapshotsProprietary API /v2/volumes/{volume_id}/snapshots instead of OpenStack /v3/{project_id}/snapshots. Explicitly crash-consistent only, no... see details

Prerequisites#

  • A Quake AI account with application credentials
  • The OpenStack CLI installed and configured
  • SSH access to your Droplets
  • An SSH key pair imported to Quake AI (openstack keypair create --public-key)

Image portability#

DigitalOcean does not provide an API or UI for downloading Droplet snapshots. A dd-based workaround exists but is impractical for most migrations: it captures the entire disk (including empty space), requires a temporary Droplet, and produces images with no guarantee of bootability on OpenStack.

Recommendation: Do not attempt image export. Rebuild and rsync is faster and more reliable.

Flavor mapping#

DigitalOcean plan families map to Quake AI flavor families by their RAM-to-vCPU ratio. Basic (shared) maps to s1a, General Purpose (4:1) maps to m2a, CPU-Optimized (2:1) maps to c2a, and Memory-Optimized (8:1) maps to r2a.

DO Droplet PlanvCPUsRAM (GiB)Quake AI FlavorvCPUsRAM (GiB)Notes
s-1vcpu-1gb (Basic)11s1a.micro11Exact match
s-1vcpu-2gb (Basic)12s1a.small12Exact match
s-2vcpu-4gb (Basic)24s1a.medium24Both shared CPU
s-4vcpu-8gb (Basic)48s1a.large48Both shared CPU
gd-2vcpu-8gb (General)28m2a.large28Exact ratio match
gd-4vcpu-16gb (General)416m2a.xlarge416Exact ratio match
gd-8vcpu-32gb (General)832m2a.2xlarge832Exact ratio match
c-2vcpu-4gb (CPU-Optimized)24c2a.large24Exact ratio match
c-4vcpu-8gb (CPU-Optimized)48c2a.xlarge48Exact ratio match
c-8vcpu-16gb (CPU-Optimized)816c2a.2xlarge816Exact ratio match
m-2vcpu-16gb (Memory-Optimized)216r2a.large216Exact ratio match
m-8vcpu-64gb (Memory-Optimized)864r2a.2xlarge864Exact ratio match

Larger Basic Droplets (s-8vcpu-16gb) do not have a clean s1a match because s1a maxes out at 8 vCPU / 8 GiB. Step up to m2a.2xlarge (8 vCPU / 32 GiB) for production workloads at that scale.

General Purpose slugs come in two variants: g- (standard SSD) and gd- (Premium NVMe SSD). Both variants share the same vCPU and RAM ratios; the gd- variant adds NVMe storage and up to 10 Gbps network. The flavor mapping applies to both.

Migration approach#

If your Droplets run Docker containers, migrate images and redeploy.

  1. Push images from DigitalOcean Container Registry (or Docker Hub) to a portable registry:
bash
docker pull registry.digitalocean.com/MY_REGISTRY/MY_APP:latest
docker tag registry.digitalocean.com/MY_REGISTRY/MY_APP:latest \
  registry.example.com/MY_APP:latest
docker push registry.example.com/MY_APP:latest
  1. Provision a Nova instance on Quake AI:
bash
openstack server create \
  --image "Ubuntu-22.04" \
  --flavor m2a.xlarge \
  --network MY_NETWORK \
  --key-name MY_KEY \
  --security-group MY_SECURITY_GROUP \
  MY_INSTANCE_NAME
  1. Install Docker and deploy:
bash
ssh ubuntu@FLOATING_IP
sudo apt update && sudo apt install -y docker.io
sudo docker pull registry.example.com/MY_APP:latest
sudo docker run -d -p 80:8080 registry.example.com/MY_APP:latest

Option 2: Rebuild and rsync (non-containerized)#

For traditional LAMP/LEMP or custom application stacks.

  1. Provision a Nova instance with the same base OS:
bash
openstack server create \
  --image "Ubuntu-22.04" \
  --flavor m2a.xlarge \
  --network MY_NETWORK \
  --key-name MY_KEY \
  --security-group MY_SECURITY_GROUP \
  MY_INSTANCE_NAME
  1. Assign a floating IP:
bash
openstack floating ip create PublicStatic
openstack server add floating ip MY_INSTANCE_NAME FLOATING_IP
  1. Install your application stack on the Quake AI instance. Reuse cloud-init configs or provisioning scripts from your Droplet setup.

  2. Transfer application data:

bash
rsync -avz --progress -e "ssh -i ~/.ssh/MY_KEY" \
  root@DROPLET_IP:/path/to/app/data \
  ubuntu@FLOATING_IP:/path/to/app/data
  1. Migrate databases:
bash
# PostgreSQL
pg_dump -h DROPLET_IP -U MY_USER MY_DATABASE | \
  psql -h FLOATING_IP -U MY_USER MY_DATABASE

# MySQL
mysqldump -h DROPLET_IP -u MY_USER -p MY_DATABASE | \
  mysql -h FLOATING_IP -u MY_USER -p MY_DATABASE

Key pair and security setup#

Import your SSH key#

Import your existing SSH public key to Quake AI:

bash
openstack keypair create --public-key ~/.ssh/id_ed25519.pub my-key

Translate Cloud Firewalls to security groups#

DigitalOcean Cloud Firewalls apply at the network level or via tags. Neutron security groups apply per instance (per port). Re-create your firewall rules as security group rules:

bash
openstack security group create web-tier
openstack security group rule create web-tier \
  --protocol tcp --dst-port 22 --remote-ip 0.0.0.0/0
openstack security group rule create web-tier \
  --protocol tcp --dst-port 80 --remote-ip 0.0.0.0/0
openstack security group rule create web-tier \
  --protocol tcp --dst-port 443 --remote-ip 0.0.0.0/0

If you used DigitalOcean tag-based firewall targeting, apply the equivalent security group to each Quake AI instance individually.

Validation checklist#

After migrating each workload, verify:

  • Application responds correctly on the Quake AI instance
  • All expected ports are accessible through the security group
  • Data integrity: compare file checksums or row counts between source and destination
  • Database connectivity from the application to any migrated databases
  • DNS records updated to point to the new Quake AI floating IP
  • Monitoring in place (self-managed Prometheus + Grafana to replace DO Monitoring)
  • Managed Database data migrated to self-managed instances on Quake AI (if applicable)
  • SSL/TLS certificates installed and renewed

Provider-specific gotchas#

TopicDetail
Snapshots not portableDO snapshots are internal-only. Do not plan migration around snapshot transfer.
Reserved IPsDO Reserved IPs cannot be transferred. Update DNS to point to new Quake AI floating IPs.
Managed servicesManaged Databases, App Platform, and Functions have no Quake AI equivalent. Self-host on VMs.
Container RegistryDO Container Registry is private to your DO account. Push images to a portable registry before decommissioning.
Bandwidth modelDO includes 500 GiB to 11,000 GiB/month per Droplet depending on plan (transfer allowances are pooled across Droplets in the same account). Quake AI allocates bandwidth per instance (0.5 Gbps per 2 vCPUs). No pooling.

See also#

Usage Guidelines

The sample code, software libraries, command line tools, proofs of concept, templates, and other related technology on this page (including any of the foregoing that is provided by Quake AI personnel) is provided to you as Quake AI Content under the Quake AI Customer Agreement, or the relevant written agreement between you and Quake AI (whichever applies). Do not use this Quake AI Content in your production accounts, or on production or other critical data. You are responsible for testing, securing, and optimizing the Quake AI Content (such as sample code) as appropriate for production grade use based on your specific quality control practices and standards. Deploying Quake AI Content may incur Quake AI charges for creating or using Quake AI chargeable resources, such as running Compute instances or storing data in Object Storage. Your use is also subject to the Acceptable Use Policy.

Comparisons to third-party providers in this material reflect publicly documented behavior as of the validation date below. Pricing, quotas, service limits, and feature availability change frequently on every cloud. Verify provider-specific claims against the provider's own current documentation before relying on them for a procurement, architecture, or migration decision.

For the full policy, see Usage Guidelines.

Last validated: 22.06.2026

Quick answers

Was this page helpful?