Infrastructure

Servers and regions

What gets provisioned, how big it is, how to grow it, and where it physically runs.

Where your store runs

Hetzner Cloud, in the location you choose when you create the store:

Location Where
fsn1 Falkenstein Germany
nbg1 Nuremberg Germany
hel1 Helsinki Finland
ash Ashburn, VA United States
hil Hillsboro, OR United States
sin Singapore Singapore

Every server for a store — application, database, cache and search — is built in that one location, and it cannot be moved afterwards. Pick the one closest to your shoppers.

Database backups are held in Germany, whichever location you choose, because our backup storage exists only in Europe. If that is not acceptable for your store, tell us before you launch.

Every server runs Ubuntu 24.04.

What an environment provisions

Four servers, each with one job:

Role Default size What is on it
Application Small · 2 vCPU · 4 GB nginx, PHP-FPM, Composer, certbot, your code
Database Small · 2 vCPU · 4 GB MySQL 8.0 or 8.4
Cache Small · 2 vCPU · 4 GB Valkey 8, Redis-compatible
Search Standard · 4 vCPU · 8 GB OpenSearch 2

You pick the application size when you create the store, and can change it afterwards from the environment canvas. Small is the starting point so a store costs little before it earns anything; a catalogue with several store views, or a build that deploys many locales, wants Standard or more.

Sizes available everywhere sizes are chosen:

Size vCPU RAM
Small 2 4 GB
Standard 4 8 GB
Large 8 16 GB
XL 16 32 GB

Only the application server is exclusive to one environment. Database, cache and search clusters belong to the team, and several environments can share one — which is how an agency runs a handful of small stores off a single database server.

The network

Each team gets a private network. Your servers talk to each other on private addresses; that is what DB_HOST and the rest resolve to.

Two firewalls sit in front:

  • Application servers accept 22, 80 and 443 from anywhere.
  • Database, cache and search servers accept only SSH. They are not reachable from the internet.

That second rule is doing real work: MySQL binds to all interfaces and OpenSearch runs with its security plugin disabled, because inside the private network they are only reachable by your own machines. The firewall is what keeps that true. The one way to change it is the public endpoint toggle on a database cluster, which opens port 3306 to the world.

PHP

Set the version under Settings → PHP version. It applies on the next deploy, which rebuilds vendor/ against it.

Changing PHP version means you cannot roll back across the change — see Rollbacks.

Growing a server

Settings → Server size for the application server; Resources for a database, cache or search server.

A resize powers the machine off, changes the type, powers it back on, and re-tunes the service that runs on it — MySQL's buffer pool or OpenSearch's heap are recalculated for the new memory. The store is briefly unavailable while it happens.

Two rules, both from the provider:

  • Servers only grow. RAM must strictly increase. There is no way back down — disk cannot shrink once upgraded.
  • A shared resource cannot be resized while more than one environment is using it, and nothing can be resized during a deploy.

Faster provisioning

Nautvia keeps pre-baked images of fully installed servers. When one matches the role, size and configuration you need, the server boots from it in about a minute instead of installing from scratch. When there is no match, it falls back to a full install — correct either way, just slower.