What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
The most maintainable way to self-host Healthchecks is Docker Compose on a Linux VPS, with a DNS name, working SMTP credentials, persistent storage and HTTPS supplied by a reverse proxy. You can run both the Healthchecks web application and PostgreSQL on the VPS, or connect the application to a separately managed PostgreSQL or MySQL service. The official VPS pattern uses the Healthchecks Docker image, managed PostgreSQL and Caddy for TLS termination; the official Docker example also supports a self-contained web-and-database stack on one host.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
What a self-hosted Healthchecks installation contains
Healthchecks is a monitoring service for scheduled jobs. A job sends a request to its unique check URL when it starts or finishes. If the expected request does not arrive within the configured grace period, Healthchecks can notify you. Self-hosting puts the dashboard, check data and notification configuration under your control instead of using a hosted account.
As an Amazon Associate I earn from qualifying purchases.
A production deployment normally has four pieces:
- Healthchecks web container: serves the dashboard and check endpoints. The reference image uses uWSGI, runs database migrations during startup and starts the alert, report and SMTP workers in the container.
- Database: SQLite, PostgreSQL or MySQL are supported by the configuration. PostgreSQL is the usual choice when the database is managed separately or when you expect the installation to grow.
- Reverse proxy: Caddy, NGINX or another controlled proxy accepts public HTTPS traffic and forwards it to the web container. The Healthchecks image does not terminate TLS itself.
- SMTP service: an SMTP account is needed for email alerts and administrative error messages.
The Docker image has pre-built variants for amd64, arm/v7 and arm64. Your VPS architecture must match one of those images, or you must build an appropriate image yourself.
Prerequisites and decisions before installation
VPS and DNS
Choose a Linux VPS and point a DNS name such as checks.example.com at its public IP address. Wait for the DNS record to resolve before requesting a certificate. The official documentation does not publish a universal CPU or RAM minimum. Size the machine according to the number of checks, retention period, worker activity, database placement and any other services sharing the VPS rather than relying on an invented baseline.
#1 Best Overall
- [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
- [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
- [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
- [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
- [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
Software and credentials
- Docker Engine with the Docker Compose plugin.
- The Healthchecks source tree or an official release configuration containing the Docker files.
- An SMTP account, including its host, username and password.
- A private, unpredictable Django
SECRET_KEY. - A backup destination that is not dependent on the same VPS disk.
- Firewall rules that expose only the SSH port and the public HTTP/HTTPS ports needed by your proxy.
Decide where the database will live
| Arrangement | Advantages | Responsibilities and trade-offs |
|---|---|---|
| SQLite on the VPS | Simplest single-host setup and fewest moving parts. | Database and application share one host and one storage failure domain. You must protect and back up the SQLite file yourself. |
| PostgreSQL container on the VPS | Matches the official self-contained Docker example and keeps network latency low. | You operate the database volume, upgrades, monitoring and restores. A VPS outage affects both application and database. |
| Managed PostgreSQL | Separates the database from the web server and usually provides established backup and maintenance workflows. This is the database arrangement shown in the official VPS walkthrough. | Requires network access, provider credentials and a separate database bill. You still need to verify backups and recovery. |
| MySQL or a managed MySQL service | Supported by Healthchecks and useful when your existing platform standardizes on MySQL. | Same connectivity and credential-management concerns as PostgreSQL, with a different operational toolchain. |
For a personal or small team installation, SQLite or a PostgreSQL container is usually easiest. Choose managed PostgreSQL when you want the database outside the VPS, conventional database backup tooling or a clearer path to separating application and data operations.
Configure the Healthchecks environment
The official Docker setup uses an environment file. From the directory that contains the Docker configuration, copy the example file:
Recommended Free Tools
cp docker/.env.example docker/.env
Edit docker/.env and provide every value required by your chosen database and deployment. The important settings are:
| Variable | What it controls |
|---|---|
ALLOWED_HOSTS |
The hostnames Django accepts in the HTTP Host header. Include the DNS name you will use, and do not leave the production value as a broad wildcard unless you understand the exposure. |
DEFAULT_FROM_EMAIL |
The sender address used for Healthchecks-generated messages. |
EMAIL_HOST |
The hostname of your SMTP server. |
EMAIL_HOST_USER |
The SMTP login name, when your provider requires authentication. |
EMAIL_HOST_PASSWORD |
The SMTP password or application-specific credential. Treat it as a secret. |
SECRET_KEY |
Django’s signing key. Generate a unique, unpredictable value for this installation and never reuse a value copied from a public example. |
SITE_ROOT |
The canonical URL of the installation, including the HTTPS scheme and public hostname. |
Keep the file readable only by the account that administers the stack. Do not commit it to a public repository, paste it into support forums or place it in a web-served directory. If you use PostgreSQL or MySQL, also fill in the database engine, host, port, database name, username and password fields provided by the release’s example file. The exact names can change between releases, so retain the names from the version you downloaded.
Rank #2
- 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
- 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
- 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
- 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
- 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
For a generated key, use a system random generator rather than inventing a phrase. For example, on a Linux machine with OpenSSL installed:
openssl rand -hex 64
Copy the output into SECRET_KEY without sharing it. If you later replace the key, existing signed sessions and tokens may stop working, so treat key rotation as a planned change.
Install Healthchecks with Docker Compose
The following sequence follows the official Docker workflow. Run it from the Docker directory in the Healthchecks source or release configuration.
- Obtain the release files. Download or check out the official Healthchecks source/release configuration and change into its Docker directory. Use a release you can identify and reproduce rather than an untracked development checkout.
- Create the environment file. Copy
docker/.env.exampletodocker/.env, then enter the hostname, site URL, SMTP values, secret key and database settings described above. - Review persistence. Confirm that the Compose file maps the database data directory to a named volume or another persistent location. A container restart must not delete your database.
- Start the stack. Run:
docker compose up
This starts the web service and, when you selected the bundled database example, the database service. Keep the output visible during the first start so you can see migrations and configuration errors. After confirming a clean start, you can run the same stack detached with your Compose version’s detached option and inspect it with docker compose logs.
Rank #3
- [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
- [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
- [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
- [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
- [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
- Create the first administrator. In another shell, from the same Docker directory, run the documented management command:
docker compose run web /opt/healthchecks/manage.py createsuperuser
Enter the requested username, email address and password. Use a long, unique password and store it in your password manager.
- Open the site. Browse to the HTTPS address in
SITE_ROOTafter the reverse proxy is configured. Sign in with the administrator account and create a test check. - Test the complete path. Send a successful ping to the test check, deliberately miss a scheduled ping, and verify that the expected alert reaches your SMTP mailbox. This validates the application, workers, database and mail configuration together.
The image performs database migrations at startup. A migration message is therefore normal on a new deployment or after an upgrade. A migration failure is not safe to ignore: keep the old image and database state intact until you have corrected the reported connection or schema problem.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Put HTTPS in front of the container
An Internet-facing Healthchecks instance should sit behind a TLS-terminating reverse proxy or load balancer. The official Docker documentation explicitly requires this arrangement for public exposure. Caddy is used in the official VPS walkthrough because it can obtain and renew certificates, but NGINX or another controlled proxy works as well.
Proxy responsibilities
- Listen publicly on ports 80 and 443 as appropriate for certificate issuance and HTTPS traffic.
- Forward requests to the internal Healthchecks web service and keep that service off the public interface.
- Pass the original
Hostheader so Django can matchALLOWED_HOSTS. - Discard any client-supplied
X-Forwarded-Proto, then set it to the actual original scheme (httpsfor an HTTPS request). - Set
X-Forwarded-Forto the client address or a correctly maintained proxy chain. - Redirect plain HTTP to HTTPS after certificate issuance, unless you have a specific reason to allow an HTTP endpoint.
Do not blindly trust forwarding headers arriving from the Internet. The outermost proxy must overwrite them, and any additional proxy must be configured with a known, trusted chain. Healthchecks uses these headers for secure-request detection and IP-based rate limiting. If X-Forwarded-Proto is wrong, users can encounter HTTP 403 CSRF failures even though the browser is visibly using HTTPS.
Rank #4
- Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
- Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
- All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
- Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
- Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Generic reverse-proxy settings
Exact upstream ports and service names come from the Compose file you installed. In an NGINX-style configuration, the relevant intent is equivalent to:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Use your proxy’s documented syntax to ensure incoming forwarding headers are replaced rather than appended blindly. With Caddy, verify the generated proxy behavior and certificate status in its logs, then test the public URL from a separate network.
Configure email and verify alerts
Healthchecks can display checks without email, but SMTP is needed for email alerts and administrative error notifications. Enter the SMTP host, username, password and sender address in docker/.env. Your mail provider may require a dedicated application password, a specific port or TLS mode; use the provider’s current requirements and keep those credentials out of source control.
After restarting the web service, create a short-interval test check. Send one successful ping, then stop sending it long enough to exceed its grace period. Confirm that the alert arrives, that the sender is acceptable to your mail provider and that replies do not go to an unattended address. If no message arrives, inspect the container logs for authentication, DNS, certificate or connection errors before changing application settings.
Best Value
Back up the database before upgrades
A persistent Docker volume is not a backup. Keep a recoverable database copy away from the VPS and test that you can read it. At minimum, back up before changing a PostgreSQL image version, changing the database host or performing a major configuration migration.
Free tools Windows power users keep installed
One-click scans. No signup required.
PostgreSQL image-version upgrade sequence
The official README places a full database backup first. The safe order is:
- Take and verify a full backup. Complete the backup while the current PostgreSQL version is running. Record where the file is stored and verify that it can be read; an unverified archive is not a recovery plan.
- Stop application and database containers. From the Docker directory, stop both the
dbandwebservices so no process writes to the old data directory during the upgrade. - Identify the PostgreSQL volume. Use the Compose configuration and Docker’s volume inspection commands to locate the volume that contains the database data. Do not guess from a similarly named volume.
- Run the documented data-directory upgrade process. Follow the PostgreSQL and Healthchecks README procedure for the exact old and new image versions. Major PostgreSQL versions require a data-directory upgrade; changing only the image tag can leave the database unable to start.
- Update the image tag. Pin the new PostgreSQL image version in the Compose configuration after the data has been upgraded. Review the release notes and retain the old tag until the new stack is proven.
- Start and validate. Start the database and web services, watch migration and database logs, sign in, open existing checks and send a test ping.
If validation fails, stop the upgraded services and restore the verified backup or revert to the preserved old volume according to your documented rollback plan. Never delete the old volume or backup until the new deployment has passed functional tests.
Choose a deployment variant
| Variant | Best fit | Operational work |
|---|---|---|
| Single VPS with SQLite | Low check volume, one host and a preference for minimal administration. | Back up the SQLite file, protect the VPS disk and monitor free space. Database and application availability are coupled. |
| Single VPS with PostgreSQL container | Teams wanting the official self-contained Docker pattern or PostgreSQL features without a second service. | Maintain the database container and volume, perform version upgrades carefully and maintain off-host backups. |
| VPS web container plus managed PostgreSQL | Installations where database separation, managed maintenance or conventional backup tooling matters. | Secure database connectivity, manage credentials and test the provider’s restore process. The application still needs VPS and proxy maintenance. |
| VPS web container plus managed MySQL | Existing environments standardized on MySQL. | Use the release’s MySQL settings and provider-specific backup and maintenance procedures. |
There is no published universal performance benchmark that tells you when to move between these variants. Base the decision on expected check volume, retention, worker load, database placement and whether the VPS runs other workloads.
Routine operations and security checklist
- Pin image versions: use an identifiable Healthchecks release image and review changes before pulling a newer tag. Current tags change over time.
- Protect secrets: keep
SECRET_KEY, database passwords and SMTP credentials private. Rotate them through a planned change, not by casually editing a running container. - Monitor storage: check database volume growth, Docker logs and available VPS disk space. Retention settings and check volume determine growth more than a generic VPS size recommendation.
- Keep the proxy controlled: renew certificates, restrict administrative access and ensure only the proxy is publicly reachable.
- Validate forwarding headers after proxy changes: test login, CSRF-protected forms and rate-limited endpoints whenever you add a load balancer or another proxy hop.
- Back up away from the host: retain multiple recoverable copies and periodically perform a restore rehearsal on an isolated system.
- Document recovery: record the Healthchecks release, Compose files, environment-variable names, database location, volume names, proxy configuration and backup procedure.
Troubleshooting common failures
| Symptom | Likely cause | Action |
|---|---|---|
| HTTP 403 CSRF error after enabling HTTPS | The proxy sent the wrong X-Forwarded-Proto value or trusted a client-supplied header. |
Overwrite the header at the TLS-terminating proxy with the original scheme, confirm SITE_ROOT uses HTTPS and retry in a fresh browser session. |
| “Disallowed host” or similar host validation error | The public hostname is missing from ALLOWED_HOSTS. |
Add the exact DNS name, restart the web service and ensure the proxy’s Host header matches it. |
| Web container exits during startup | Missing environment value, invalid database credentials or a migration failure. | Read docker compose logs web, correct the reported setting and restart without deleting the database volume. |
| Database connection errors | Wrong host, port, credentials, network or database service state. | Check the database container or managed-service status, verify connectivity from the web container and confirm that the database settings match the release’s example file. |
| Alerts never arrive | SMTP authentication, TLS, DNS or sender-policy failure; workers may also be unable to start. | Inspect web and worker logs, verify SMTP credentials and test delivery to a mailbox you control. |
| Data disappears after a restart | The database directory was not mapped to persistent storage, or the wrong Compose project/volume was started. | Stop the stack, inspect the Compose volume mapping and Docker volumes, then restore from backup if data was removed. |
| PostgreSQL will not start after an image change | A major image-version change was made without upgrading the data directory. | Stop the stack, preserve the old volume and backup, then follow the documented PostgreSQL data-directory upgrade procedure before retrying. |
When to move beyond a single VPS
A single host is a sensible starting point, but it has a clear failure domain: a VPS outage, disk failure or firewall mistake can take out both the application and its database. Consider separating the database or adding a second recovery environment when missed alerts have a high cost, check history must be retained for a long period, or the VPS is becoming a shared production server. The move should be driven by your recovery-time and recovery-point requirements, not by an arbitrary CPU or RAM number that Healthchecks does not publish.
Before making that change, export or back up the database, record the current Compose and proxy configuration, lower DNS time-to-live if a hostname migration is planned and rehearse restoring the data into the new arrangement. Keep the old installation available until checks, users, SMTP delivery and HTTPS behavior have all been verified.
Quick Recap
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.




