Clouds and clusters
Each location is one Kubernetes cluster: Oracle Kubernetes Engine (OKE) on OCI, or Google Kubernetes Engine (GKE) on Google Cloud. All of a company’s applications and databases run on the same cloud. Sevalla is moving every company from Google Cloud to OCI. New companies start on OCI, existing companies move in waves, and static site builds already run on OCI for everyone. Static sites, buckets and load balancers don’t move: they run on Cloudflare. Where the two clouds differ, this page says so. Migration to Oracle Cloud Infrastructure covers the schedule and what changes for you.Applications
Builds and images
Every deployment from Git builds a new container image. The build runs as a sandboxed job on the cluster in the application’s location, with the application’s build strategy (Nixpacks, Railpack, Buildpacks or Dockerfile). On OCI, builds run on nodes reserved for builds, apart from running applications. By default, a build that runs longer than 30 minutes fails. Sevalla stores each image in a private registry on the application’s cloud. Each image is tagged with its deployment, which is what lets Sevalla roll back and lets pipelines promote an image to another application without rebuilding it. An application from a Docker image skips the build: the cluster pulls the image from its registry on every deployment.Processes and instances
Each application gets its own Kubernetes namespace, and each of its processes runs there as its own set of containers:
Each instance of a process is one container with the CPU and memory of the process’s instance size. During a rollout, Kubernetes starts new instances before it stops the old ones. If the new version isn’t ready within 20 minutes, the deployment fails and the previous version, which kept serving traffic, stays live. A process with a disk runs one instance and is restarted instead (the old instance stops before the new one starts), so its deployments have a short interruption.
How a request reaches an application
- Cloudflare. The application’s
sevalla.appaddress and its custom domains point to Cloudflare. Cloudflare ends the TLS connection with a certificate it issues for each domain, and applies its DDoS protection. See DDoS protection. - Sevalla’s application worker. A Cloudflare Worker that Sevalla runs at the edge reads the domain’s settings and, in this order: blocks IP addresses outside the application’s IP restrictions with
403, redirects HTTP to HTTPS with301, answers with503andRetry-After: 300while maintenance mode is on, and serves the response from the edge cache when CDN or edge caching has a copy. If the application is hibernating, the worker holds the request while the application wakes up, for up to about 3 minutes. - The cluster. The worker forwards the request to the cluster in the application’s location, where Sevalla’s ingress matches the domain to the application’s web process.
- The web process. Kubernetes spreads requests across the web process’s instances. The instance answers, often after querying a database over an internal connection.
- The response goes back the same way. The worker stores it at the edge if caching applies, and adds an
Access-Control-Allow-Origin: *header when the application didn’t set one.
Private networking
Services in the same location talk over the cluster’s private network. Each web process, background worker and database has a private hostname inside the cluster. By default, a namespace doesn’t accept traffic from other namespaces: an internal connection opens the path between an application and a database, or between two applications. Internal connections only work within one location. A TCP proxy gives a process a public hostname and port for protocols other than HTTP. It goes through Sevalla’s TCP proxy in the location, not through Cloudflare.Outbound traffic
- On OCI, each location sends outbound traffic from one fixed IP address.
- On Google Cloud, outbound traffic comes from any of Google Cloud’s published IP ranges for the region.
25, 465 and 587 on both clouds, and also 2525 on OCI. To send email, use your email provider’s HTTP API.
Databases
ext.sevalla.app with its own port, through Sevalla’s TCP proxy in the location. That traffic doesn’t pass through Cloudflare, and the database’s IP restrictions apply at the proxy. The legacy external connection hostnames were turned off on Oct 15, 2026.
Backups depend on the cloud:
- On Google Cloud, Sevalla takes a daily snapshot of the database’s volume and keeps it for 7 days. You can also take manual backups.
- On OCI, Sevalla writes compressed dumps of the database (for example
.sql.gz) on a schedule to the backup targets you add: Sevalla object storage buckets or your own S3-compatible storage. A database on OCI without a backup target has no backups.
Static sites
Object storage
- S3 API. Applications and tools connect to the bucket’s R2 endpoint with any S3-compatible client. See Connect with the S3 API.
- Dashboard uploads. Files you upload in the dashboard go through Sevalla’s API to the bucket, up to 300 MB per file.
- Public access. When you turn it on, the bucket gets a public domain,
<bucket>.sevalla.storage, served through Cloudflare’s CDN.
Logs and metrics
- Access logs come from Cloudflare: every request through the edge is logged, then attributed to its service.
- Runtime logs are collected from your processes’ output (
stdoutandstderr). - Metrics such as CPU, memory, storage and instance counts come from the cluster.
Isolation
- One namespace per service. Every application and every database has its own Kubernetes namespace, and namespaces don’t accept traffic from each other unless an internal connection allows it.
- Sandboxed containers. Application instances and builds run in sandboxed containers that isolate each container in its own user namespace, without access to the Kubernetes API.
- Resource limits. Each instance gets the CPU and memory of its instance size, with up to 20 GB of ephemeral storage that doesn’t survive a restart.
- Edge protection. For HTTP traffic, Cloudflare handles TLS and absorbs DDoS attacks before requests reach a cluster. TCP proxies and database external connections don’t go through Cloudflare.
What Sevalla manages and what you manage
Shared responsibility covers security duties in detail.
Where your data is
Applications, their disks and databases store their data in the location you choose. Data leaves that location only in these cases:- Cached copies. With CDN or edge caching on, and for every static site, Cloudflare keeps copies of responses in its edge locations near your visitors.
- Static site files and object storage live in Cloudflare R2.
- Logs. Cloudflare processes every request to your services, and Sevalla keeps access and runtime logs for the Logs and Analytics tabs.
- Database backups on OCI go to the backup targets you add.
- Support conversations. Anything you share in a support chat is stored by Sevalla’s chat provider.