Security & Monitoring7 min read

Self-hosted apps: the patching routine

Self-hosting means taking back a job the vendor used to do for you without ever billing it separately: applying its security patches. July 2026 was the reminder, with CVE-2026-63077 in JetBrains TeamCity, already handled on the vendor's cloud side while every On-Premises instance waited for its own administrator. Here is the routine that closes the gap.

Patching is part of what you take back

In a SaaS product, the security update is invisible: the vendor rolls it out across its own fleet, sometimes before the public announcement. The same vulnerability on an instance you host stays open until someone applies the fix. CVE-2026-63077 illustrates the gap: the flaw allowed unauthenticated execution of system commands on TeamCity On-Premises, fixed in versions 2025.11.7 and 2026.1.3, while the same vendor's cloud deployments required no action from customers. The gap is not technical, it is organisational.

What breaks when nobody owns it

  • The installed version becomes untraceable — without an inventory, nobody knows which component runs on which machine, and a security advisory cannot even be triaged.
  • The advisory reaches a dead address — vendor notifications go to a departed contractor's mailbox, or to an alias nobody reads any more.
  • The backlog grows into a dead end — three major versions behind turns a ten-minute patch into a two-day migration.
  • The update runs without a safety net — without a verified backup, a schema migration applied and then regretted cannot be replayed backwards.
  • Nobody checks afterwards — the service restarts, the home page answers, and a queue consumer stays dead for weeks without a single signal.

The four prerequisites of a routine that holds

A patching routine does not rest on goodwill, it rests on four written things. An inventory: every application, its version, its host, its owner. Advisory sources narrowed to the components actually installed, because a general feed drowns the signal. An announced window: a recurring slot where downtime is accepted, otherwise the patch waits for a quiet moment that never comes. A restorable backup, tried before it is needed. Without those four, every update turns back into a project to negotiate.

The routine, in five moves

01

Inventory what is actually running

List every exposed application, its exact version, its host and its owner. docker compose ls then docker image inspect give the real state of your containers; dpkg -l or rpm -qa that of system packages. Keep this file under version control next to your configurations: an inventory that lives only in someone's memory does not exist.

02

Subscribe to advisories for installed components, not the whole internet

For each line of the inventory, open a named subscription: the repository's Atom release feed (https://github.com/org/repo/releases.atom), the vendor's security mailing list, or an NVD query filtered on the product. One subscription per component stays triageable. Route them all to a shared mailbox, never to a personal address.

03

Set a patch window, and a fast lane

Reserve a recurring slot where downtime is accepted and announced. Two classes are enough: ordinary patches wait for the window; a critical flaw under active exploitation triggers immediate application, outside the window. Writing that rule before the incident spares you from negotiating it during.

04

Back up right before, and prove the restore

Before applying, take a database export (mysqldump, pg_dump) and a dated backup of the data volume, then record the version you are leaving. A hypervisor snapshot and an application-level backup (restic, borg) do not cover the same risk: keep both, and test a restore while it is not urgent.

05

Verify behaviour afterwards, then hand it to a probe

An open port proves nothing. After each patch, check what the application really does: health endpoint response (curl -fsS https://your-domain.com/health), queues being consumed, a test email actually sent, no new errors in the logs. Then write those checks into permanent monitoring, with Uptime Kuma for instance, which replays them without you.

Shrink the surface instead of chasing patches

An admin console or an agent protocol exposed to the public internet turns every unauthenticated flaw into an immediate incident. Put those interfaces behind a private network, a VPN or an allowlist. Updating remains mandatory, but the delay between an advisory and your patch stops being a window of exposure open to everyone.

Who updates what, exactly

On a server you administer, the split must stay clear. The host provides and maintains the foundation: the machine, the network, the storage, hypervisor availability. The applications you install on top — their versions, their patches, their configuration — remain under your administration. Nobody will update them for you, and that is the price of the control you chose. The routine described here is what makes that split sustainable: it turns a diffuse load into a short, predictable appointment.

The foundation is ours, your patch schedule stays yours

Root access, complete logs and the freedom to install your own backup and monitoring tools: the infrastructure we operate lets you apply your patches at the moment you decided.

Need help?

Browse our help center and FAQ, or write to our team — support in French, English and Arabic.