Skip to content
Quayel

Platform

Everything between a commit and a served request.

Quayel builds your code, places it on machines you own, fronts it with a real gateway, and tells you what happened. This page walks through each piece.

$curl -fsSL https://agent-api.quayel.com/install.sh | sudo bash

Deployments

Ship on push, or on click — your call, per service.

Auto-deploy is a per-service switch, so the repos that should ship themselves do, and the ones that need a human don't.

GitHub App, not a webhook you maintain

Install the Quayel app on the repos you choose. Pushes to the deploy branch trigger a build automatically, and the connection can be revoked from GitHub at any time.

Four ways in

A connected GitHub repo, any reachable Git URL, a Dockerfile in your tree, or a prebuilt image from a registry. Same pipeline downstream.

Builds without a Dockerfile

Nixpacks inspects the project and produces an image for most common stacks. Bring your own Dockerfile when you need the control.

Rolling updates

Replicas are replaced one at a time so the service keeps answering. If the new version won't come up, the old one keeps serving.

Pre- and post-deploy scripts

Run migrations before the new version starts, or warm a cache once it's healthy. Both hooks live with the service.

Maintenance mode

Flip a switch to serve a maintenance page instead of the service while you do something disruptive.

Deploymentauto_deploy: on
  1. Push to main
    a41f902 · Merge pull request #218
  2. Build
    nixpacks · cached layers reused
  3. Deploy
    app-1 · rolling, 2 replicas
  4. Live
    api.acme.com · 200 in 41ms

Servers & agent

One command turns a bare host into part of your platform.

The agent takes a fresh Ubuntu or Debian machine and leaves it ready to run workloads, front traffic, and report on itself. Add as many machines as you need and choose which one each service runs on.

One command to enroll

The installer sets up Docker Engine and Compose, initialises Swarm with an overlay network, installs nixpacks, brings up the gateway, and registers the host against your organization.

The agent keeps itself current

It compares its installed version against the published installer and updates in place, so a fleet doesn't drift apart over months.

Hardware and runtime facts sync

CPU model, cores, memory, disk and the state of Docker and nixpacks are reported back, so the dashboard reflects the machine rather than what you typed when you added it.

Placement is explicit

Each service names the server it runs on and how many replicas it keeps there. A service lives on one machine; spread different services across as many machines as you like.

Servers3 enrolled · 9 services
app-1fra4 services
srv-8f2a.server.quayel.cloud
22%
48%
data-1fra2 services
srv-1c93.server.quayel.cloud
61%
72%
stagingams3 services
srv-4d70.server.quayel.cloud
8%
19%

Gateway & domains

A real edge on every server, configured from the dashboard.

Apache APISIX runs on each host. Quayel keeps its routes in sync with your services so you never edit config on the box.

Domains with certificates attached

Add a hostname to a service and Quayel creates the DNS record and provisions the certificate. Nothing to renew, nothing to cron.

Host and path routing

Route a hostname, or a path prefix under one, straight to a service port. Rules sync into the server's APISIX instance as you save them.

JWT-guarded routes

Put a route behind token verification without adding auth middleware to the service itself. Configure the claims and algorithm from the dashboard.

Conditions and redirects

Match on request attributes to steer traffic, and manage permanent or temporary redirects for hostnames you've retired.

GatewayTLS issued
api.acme.com/v1/*api-gateway:4000JWT
acme.com/web:3000
old.acme.com/*301 → acme.com
Rules sync to APISIX on every change — no config files to edit on the box.

Service config

The knobs you expect, in one place.

Environment, storage, ports and limits live with the service and apply on the next deploy.

Environment variables

A key-value map per service, applied on the next deploy and written into the generated compose definition.

Storage

Named volumes, bind mounts and file mounts, declared per service so state survives redeploys.

Resource limits

CPU and memory ceilings per service, so one noisy workload can't take a host down with it.

Ports

Publish container ports on the host where you need direct access, alongside whatever the gateway routes.

Observability

What ran, what it's doing, and who set it going.

Enough signal to answer an incident question without SSHing into three boxes.

Logs live, then archived

Build and runtime output streams while a run is in flight and is written to object storage when it finishes, so you can still read what happened last week.

Metrics from the machine

CPU, memory, network and replica counts arrive on a heartbeat from the agent rather than being inferred from the last action you took.

Actions with an actor

Every deploy, restart and rebuild records who triggered it and which commit it put live — the answer to 'what changed and who changed it'.

Status that self-corrects

Stale readings are ignored in favour of fresher ones, so the UI converges on what the servers actually report.

api-gateway · build loglive
12:04:11build: detected node 24 · nixpacks plan resolved
12:04:26build: layers cached (4/6) · image pushed
12:04:31deploy: rolling update 1/2 · api-gateway_app
12:04:38deploy: rolling update 2/2 · converged
12:04:39health: 200 OK · api.acme.com (41ms)
12:04:40logs: archived to object storage

Sources & templates

Start from your repo — or from something already built.

Postgres, MySQL, MariaDB, MongoDB, Redis and Valkey come preconfigured in the catalogue, so standing up a dependency isn't a research project. They deploy like any other service, with their own volumes and domains.

GitHub

Install the app, pick repos, choose a branch. Push-to-deploy from there.

Git URL

Any reachable repository, with the branch and build settings you specify.

Dockerfile

Already containerized? Quayel builds your Dockerfile as written.

Container image

Point at an image in any registry and run it with your env and ports.

Templates

Databases and other open-source services, preconfigured and ready to deploy.

Architecture

What actually runs where.

Quayel is a control plane. The parts that touch your traffic and your data run on your machines.

ComponentRoleWhere
qagentRuns on each host. Executes actions, reports metrics and hardware, manages containers and keeps the gateway in sync.Docker container, privileged
Apache APISIXPer-server edge. Terminates TLS, routes by host and path, applies auth and redirect rules.Ports 80 / 443
etcdConfiguration store backing APISIX on the host.Internal network only
Docker SwarmSchedules and supervises service replicas on the machine.Overlay network
Quayel control planeOrgs, services, deployments, access control and the public API. Never holds your workload data.api.quayel.com

Try it

Enroll a server and deploy something

The fastest way to judge a deployment platform is to put a real service on it. That takes about five minutes here.