DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
Skip to content
VGSources
Blog

How to Self-Host Healthchecks on a VPS with Docker Compose

A complete Docker Compose guide to running Healthchecks on your own VPS, including prerequisites, database choices, reverse-proxy headers, SMTP, PostgreSQL upgrades, backups, and troubleshooting.
Length10 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The most straightforward supported deployment is Docker Compose on a Linux VPS: run Healthchecks in the official web container, connect it to PostgreSQL (managed or on the same host), and put a TLS-terminating reverse proxy such as Caddy or NGINX in front. You need a DNS name, Docker Engine with Compose, working SMTP credentials, and a tested plan for persistent database backups.

This guide covers the complete path from an empty VPS to a secured administrator login, then explains database layouts, proxy headers, upgrades, and the failure modes that commonly make an otherwise healthy container return errors.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What a self-hosted Healthchecks installation contains

Healthchecks is a web application that receives periodic “I am alive” pings from cron jobs, scheduled tasks, and other automation. A production installation is more than one HTTP process: it needs application settings, a database, background workers, and a front end that handles HTTPS.

Component Role Where it can run
Healthchecks web container Serves the dashboard and API, applies migrations at startup, and runs the uWSGI application server. Docker on your VPS
Database Stores users, checks, ping history, schedules, and configuration. SQLite, PostgreSQL, or MySQL; PostgreSQL may be on the VPS or managed separately.
Alert, report, and SMTP workers Processes check state changes, scheduled reports, and outgoing mail. Started by the reference container setup.
TLS reverse proxy Obtains and renews certificates, accepts public HTTPS traffic, and forwards requests to the web container. Caddy, NGINX, a load balancer, or another controlled proxy.
Persistent storage and backups Protects the database from host failure, accidental deletion, and upgrade mistakes. Docker volume plus an off-server copy.

The pre-built image supports amd64, arm/v7, and arm64. It does not terminate TLS, so an Internet-facing instance must have a proxy or load balancer in front of it.

#1 Best Overall
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized

Prerequisites and sensible planning

DNS and a Linux host

Choose a DNS name such as health.example.net and point its A or AAAA record at the VPS before requesting a certificate. The host must be able to accept inbound connections on the ports used by your reverse proxy, normally TCP 80 and 443. Keep the application and database on a private Docker network; expose only the proxy to the public Internet.

Software and credentials

  • A current Linux VPS with Docker Engine and Docker Compose support.
  • An SMTP account that permits the server to send alert and administrative mail.
  • A method for retaining database backups somewhere other than the VPS.
  • Shell access with permission to run Docker commands.

The official material does not publish a universal CPU or RAM minimum. Size the host from the number of checks and their retention period, worker activity, database placement, and any other services sharing the machine. A small personal installation and a high-volume monitoring service should not be sized from the same rule of thumb.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Required application settings

Healthchecks’ Docker configuration expects these values in its environment file:

Variable Purpose Operational guidance
ALLOWED_HOSTS Lists host names accepted by the application. Include the exact DNS name users will visit; do not use a broad wildcard unnecessarily.
DEFAULT_FROM_EMAIL Sender address used for application mail. Use an address permitted by your SMTP provider.
EMAIL_HOST SMTP server name. Use the provider’s documented hostname.
EMAIL_HOST_USER and EMAIL_HOST_PASSWORD SMTP authentication. Store the password only in the protected environment file or secret store.
SECRET_KEY Cryptographic signing key for the application. Generate a unique, unpredictable value; never copy a public example or reuse a key from another installation.
SITE_ROOT Canonical public URL. Set it to the final HTTPS URL, including the scheme.

Choose the database layout before installing

Healthchecks supports SQLite, PostgreSQL, and MySQL. The choice is primarily an operations decision rather than a feature switch.

Layout Advantages Costs and responsibilities Good fit
SQLite on the VPS Fewest moving parts and simplest single-host setup. Backups, file durability, and concurrency are your responsibility; moving the database to another host later requires a migration plan. Small, single-server installations with modest check volume.
PostgreSQL container on the VPS Both services can be described in one Compose project and backed up together. You maintain the database container, volume, upgrades, monitoring, and recovery. Operators who want a self-contained stack.
Managed PostgreSQL Database maintenance, durability options, and often automated backups are handled by the provider. Additional recurring cost, network connectivity requirements, and provider-specific restore procedures. The official VPS walkthrough’s architecture, or any installation where separating failure domains matters.
MySQL Supported by the application and familiar to teams already operating it. You still need a managed or self-managed service and a tested backup process. Existing MySQL operations environments.

Do not choose a database solely because it is present in a sample file. Decide who will perform backups, who can restore after corruption, and whether the database should survive a complete VPS loss. A same-host database is operationally convenient; a managed database reduces host-level work but introduces a network dependency.

Install Healthchecks with Docker Compose

1. Obtain the application configuration

Use the Healthchecks source tree or a release configuration that contains the official Docker files. Keep the files in a dedicated directory owned by an administrator account, and review the image tag before every upgrade rather than silently following an unreviewed moving tag.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (4GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (4GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • CanaKit Mega Heat Sink - Black Anodized

2. Create the environment file

From the project directory, copy the supplied template:

cp docker/.env.example docker/.env

Edit docker/.env and set every required value. Generate the secret key with a cryptographically secure method available on your system; for example, a local password manager or a secure random generator. The exact value must never be committed to a public repository, pasted into a support forum, or shared between unrelated Healthchecks instances.

Set SITE_ROOT and ALLOWED_HOSTS to the DNS name you actually configured. If you later change the public hostname, update both the DNS and application settings together so redirects, cookies, and host validation agree.

3. Start the Compose project

Change into the Docker directory and start the services:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
cd docker
docker compose up

For a server intended to stay online after you disconnect, run the project in detached mode according to your Compose version. Watch the initial output for database connectivity, migration completion, and worker startup. The reference image applies database migrations at startup and launches the alert, report, and SMTP workers in the container.

4. Create the first administrator

After the web service and database are available, create an administrator account:

Rank #3
CanaKit Raspberry Pi 5 Essentials Starter Kit (4GB RAM)
  • CanaKit Raspberry Pi 5 Essentials Starter Kit
docker compose run web /opt/healthchecks/manage.py createsuperuser

Answer the prompts with a long, unique password. This command runs the management script in the Compose project, so execute it from the directory containing the project’s Compose file.

5. Sign in and verify the basics

Open the configured HTTPS address and sign in. Create a disposable check and send a test ping from a system that can reach the public URL. Confirm that the check changes state, that an alert can be delivered through SMTP, and that the administrator can sign out and back in. A successful page load alone does not prove that workers, mail, or the database are functioning.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Put HTTPS and the reverse proxy in front

Why the proxy is mandatory for public exposure

The Docker image serves the application but does not terminate TLS. Place Caddy, NGINX, or another controlled TLS proxy in front of it. The proxy should obtain a certificate for the DNS name, redirect plain HTTP to HTTPS, and forward traffic to the private web service over the Docker network or a restricted local port.

Set forwarding headers safely

Healthchecks uses proxy headers to detect secure requests and to apply IP-based rate limiting. The proxy must discard any client-supplied X-Forwarded-Proto, replace it with the original scheme (https for an HTTPS request), and set X-Forwarded-For to the client address. Do not blindly pass these headers from an untrusted Internet client.

If another load balancer sits in front of your proxy, define which hop is trusted and preserve the real client address according to that product’s documented chain format. A malformed chain can make every request appear to originate from one proxy or can let a client spoof its scheme.

Recognize proxy-related failures

  • An HTTP 403 CSRF error on an otherwise valid HTTPS form submission often means X-Forwarded-Proto is wrong or being overwritten.
  • Unexpected host validation errors usually indicate that the requested DNS name is missing from ALLOWED_HOSTS.
  • Certificate issuance failures generally mean DNS is not pointing at the VPS or the proxy’s public ports are blocked.

Fix the proxy configuration first, then retry in a fresh browser session so an old redirect or cookie does not conceal the result.

Rank #4
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
  • Includes Raspberry Pi 5 16GB with 2.4Ghz 64-bit quad-core CPU (16GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized

Configure SMTP for alerts and administration

Enter the SMTP host, user, password, and default sender in the environment file before relying on Healthchecks for notifications. Use a sender address authorized by the mail service and check whether the provider requires TLS, a specific port, or an application password. Those transport details vary by provider and are not supplied by Healthchecks itself.

Send a test alert after installation. If the web interface works but mail does not, inspect the container logs for authentication or connection errors, verify outbound SMTP is allowed by the VPS network, and confirm that the sender domain has the required DNS authentication records. Avoid “fixing” delivery by disabling authentication or exposing SMTP credentials in a public Compose file.

Back up the database and prepare for PostgreSQL upgrades

What must be backed up

The database contains the information that makes the service useful: accounts, checks, schedules, state history, and settings. A Docker volume is persistence, not a backup. Keep a recoverable database dump or provider backup outside the VPS, protect it as sensitive data, and periodically perform a restore rehearsal on an isolated system.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Upgrade sequence for a PostgreSQL image change

PostgreSQL major versions require a data-directory upgrade; changing an image tag without upgrading the data directory can leave the database unable to start. Follow this order:

  1. Take and verify a full database backup before changing any PostgreSQL image version. Record where the copy is stored and how it was validated.
  2. Stop the db and web containers so no process writes to the old data directory.
  3. Identify the Docker volume that contains PostgreSQL’s data and confirm that it is the volume you intend to upgrade.
  4. Run the documented PostgreSQL data-directory upgrade procedure for the source and target versions. Do not substitute an arbitrary filesystem copy for the upgrade tool’s procedure.
  5. Update the PostgreSQL image tag in the Compose configuration, keeping the tag pinned to the reviewed release.
  6. Start the stack, watch the database and web logs, and verify that migrations complete and the administrator can sign in.
  7. Send a test ping and alert, then retain the pre-upgrade backup until the new instance has passed your recovery checks.

The full backup belongs at the beginning of this sequence, not after the new container starts. If the upgrade fails, stop the services and restore the original data directory or backup rather than repeatedly starting containers against a partially converted directory.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Security and day-to-day operations

  • Protect the secret key. Treat it like an application signing secret. Restrict permissions on docker/.env and rotate it only with a planned session and token impact assessment.
  • Keep the database private. Do not publish PostgreSQL or MySQL ports to the Internet when the web container can reach the database on an internal network.
  • Use controlled HTTPS. Renew certificates automatically, monitor renewal failures, and redirect HTTP rather than leaving users to choose an insecure scheme.
  • Validate proxy identity. Trust forwarding headers only from the proxy or load balancer you operate.
  • Pin image tags. Review release notes and image changes before upgrading; current tags change over time.
  • Monitor workers as well as the web page. A dashboard that loads can coexist with stopped alert or SMTP workers.
  • Test recovery. A backup that has never been restored is an assumption, not a recovery plan.

Choose between common deployment variants

Decision Option A Option B Choose based on
Database location PostgreSQL or SQLite on the VPS Managed PostgreSQL Whether you prefer one-host simplicity or an independent database failure domain.
TLS termination Caddy NGINX or an existing load balancer Which proxy your team already patches, monitors, and can configure with correct forwarding headers.
Backup responsibility Local volume plus your own off-site dumps Managed backups plus your own export Who owns retention, encryption, restore testing, and incident response.
Host usage Dedicated VPS Shared VPS with other services Whether resource spikes, maintenance, or a compromise in another service could affect monitoring.
Expected check volume Single-host database and workers Separated database and more deliberate capacity planning Check frequency, retention, worker load, and the consequences of delayed alerts.

There is no official universal performance benchmark or minimum resource profile to decide these choices for every installation. Start with the simplest topology that meets your recovery and availability requirements, then measure database growth, worker backlog, and host utilization as real check traffic accumulates.

Best Value
CanaKit Raspberry Pi 5 Essentials Starter Kit (8GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
  • Includes 32GB EVO+ Micro SD Card pre-loaded with 64-bit Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit 45W PD Power Supply for the Raspberry Pi 5
  • Display Cable - 6 foot (Supports up to 4K 60p)

Troubleshooting checklist

The containers stop during startup

Read the Compose output rather than restarting repeatedly. A missing environment value, invalid database credentials, unreachable managed database, or a failed migration will normally be visible in the web or database logs. Correct the underlying setting, then start the project again.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The site redirects incorrectly or reports CSRF failures

Confirm that SITE_ROOT uses the public HTTPS URL and that the proxy sets, rather than forwards, X-Forwarded-Proto. Clear stale cookies after correcting the scheme and test a new login.

Healthchecks rejects the hostname

Compare the browser’s hostname with ALLOWED_HOSTS, including subdomains and spelling. DNS, the certificate name, the proxy’s host routing, and this application setting must all refer to the same public name.

Checks appear, but no alert arrives

Verify SMTP credentials, sender permissions, outbound network access, and worker logs. Confirm the check’s notification rules and trigger a deliberate test event instead of waiting for a production failure.

A PostgreSQL upgrade will not start

Do not delete the volume or keep changing tags at random. Stop the stack, preserve the original volume, locate the verified pre-upgrade backup, and repeat the documented data-directory upgrade with matching source and target versions. If recovery is urgent, restore the known-good backup to a separate instance and validate it before repointing the application.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quick Recap

Bestseller No. 1
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$259.95
Bestseller No. 2
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (4GB RAM)
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (4GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (4GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$209.99
Bestseller No. 3
CanaKit Raspberry Pi 5 Essentials Starter Kit (4GB RAM)
CanaKit Raspberry Pi 5 Essentials Starter Kit (4GB RAM)
CanaKit Raspberry Pi 5 Essentials Starter Kit
$189.99
Bestseller No. 4
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
CanaKit Raspberry Pi 5 16GB Starter Kit PRO - Turbine Black (128GB Edition) (16GB RAM)
Includes Raspberry Pi 5 16GB with 2.4Ghz 64-bit quad-core CPU (16GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$419.99
Bestseller No. 5
CanaKit Raspberry Pi 5 Essentials Starter Kit (8GB RAM)
CanaKit Raspberry Pi 5 Essentials Starter Kit (8GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM); Includes 32GB EVO+ Micro SD Card pre-loaded with 64-bit Pi OS, USB MicroSD Card Reader
$229.99

A practical maintenance routine

  1. Review Healthchecks and base-image releases before applying an image update.
  2. Read the release notes and confirm that the planned database change does not require a major-version data-directory conversion.
  3. Take a fresh, restorable database backup and record its location.
  4. Apply the update during a period when delayed checks and alerts are acceptable.
  5. Check web access, administrator login, a test ping, alert delivery, worker activity, and database logs.
  6. Keep the rollback copy until those checks pass and your normal retention policy has captured the new state.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.