Apps

Apps

A container you deploy, scale, and put on a domain. The starting point for everything else in a project.

View .md Reviewed against 2026.9.10
On this page

What it is

An app is one container image running in your project, with the replicas, resources, storage, and networking that go with it. It is the primary thing klickops deploys, and almost everything else on the platform attaches to one: a domain routes to an app, a volume mounts into an app, a database binds its credentials into an app.

klickops starts at the container image. It does not build your code unless you connect a repository, and it does not run a pipeline of its own. If you already have an image, you are two minutes from a URL.

When you'd use it

  • You have a container image and want it running with a hostname and TLS.
  • You have a Git repository and want klickops to build it for you.
  • You are replacing a docker-compose service or a Heroku dyno with something that survives a node reboot.
Not this

A task that runs on a schedule and exits is a scheduled job, not an app. Apps are expected to stay up, so a container that exits cleanly will be restarted.

Deploy an app

  1. Open your project, go to Apps, then Deploy app.
  2. Choose the source. Either a container image, or a repository klickops builds for you. Paste an image reference and klickops inspects it, then pre-fills the port, the command, and any environment the image declares.
  3. Confirm the port your app listens on. The suggestion comes from the image, and it is usually right.
  4. Set Copies, the number of replicas. One is the default and changes later without a redeploy. CPU and memory are not yours to pick: klickops right-sizes them to what the container uses.
  5. Under Who can reach it? pick Anyone (public) if you want it public now. The default, Private, keeps it inside the project; you can add a domain later from the app's Domains tab.
  6. Review and deploy. The app appears in the list with a live status while the rollout runs.

The Apps list of a project, with status and resource use per app.The Apps list of a project, with status and resource use per app.
The Apps list of a project, with status and resource use per app.

Operating it day to day

Every app opens on Overview, and the tab strip is the whole surface.

TabWhat lives there
OverviewStatus, current image, recent revisions, rollback
LogsLive and historical container output
MetricsCPU, memory, network traffic, restarts, storage used
ScalingReplica count and autoscaling rules
DomainsHostnames, TLS, redirects, access mode
FirewallWho may reach this app, and what it may reach
ConfigurationEnvironment variables, secrets, bindings
StorageVolumes mounted into the container
BuildsAppears when the app is built from a repository
PreviewsPer-pull-request environments, when a repo is connected
ShellAn interactive session inside a running container
BackupsRestore points covering the app and its volumes
AdvancedCommand, health checks, rollout strategy, security, labels, release command and extra containers

Settings reference

SettingDefaultWhat it does
ImagenoneThe container image and tag. Changing it triggers a rollout, and the confirm dialog shows old and new.
Portfrom imageThe port your container listens on. Services and domains route to it.
Copies1How many replicas run. Scaling to zero stops the app without deleting it.
AutoscalingoffAdds replicas between a floor and a ceiling based on CPU.
CPU and memoryauto-sizedRight-sized to what the container actually uses. There is no size to pick.
Health checkon, TCPTraffic is withheld until the port accepts a connection. A TCP check needs no health endpoint; switch it to HTTP if you have one.
SecurityautomaticFollows what the image declares: an image with a non-root user runs as that user, and an image that runs as root still starts, isolated where the cluster supports it. Override it on the Advanced tab.
Watch for new tagsoffIn the Image dialog: tells you about a newer tag, or rolls it out automatically.

Limits and gotchas

  • A rollout is not instant. klickops waits for the new pods to pass their probe before it retires the old ones, so a broken image leaves the previous version serving. Apps with a volume are the exception: the old copy stops first so the new one can attach the disk.
  • Scaling to zero keeps the storage. The app stops costing compute and keeps costing storage.
  • The shell is not a deploy target. Anything you change in a running container is gone at the next rollout. Put it in the image or in configuration.
  • Environment changes restart the app. The save banner says how many pods will roll before you commit.
Careful

Deleting an app keeps its volumes: they stay in the project as detached storage, marked Orphaned on the Volumes page, until you delete them there.

  • Domains gives the app a hostname and a certificate.
  • Databases can inject its credentials straight into the app.
  • Storage that survives a rollout lives on a volume, mounted from the app's Storage tab.