Self-hosting
Pick how to run it. Every option is the same binary and the same Postgres.
Open Health Sync is one Go binary, ohs, plus Postgres with the TimescaleDB extension. Raw
payloads go to a local folder or an S3 compatible bucket. That is the whole stack.
Docker Compose
The published image and a pinned TimescaleDB. The recommended start.
Raspberry Pi 5
The full stack on 4 GB, with an overlay tuned for it.
S3 raw store
Keep raw payloads in AWS S3 or any compatible bucket.
Kubernetes with Helm
The Helm chart, against a Postgres with TimescaleDB that you run.
Render, Fly.io and Railway
No server of your own: deploy templates with TimescaleDB and a persistent raw store.
Binaries and source
Linux and macOS binaries, or build it yourself with Go.
Production checklist
TLS, the reverse proxy, metrics, backups and the settings that matter.
Configuration
Every environment variable and the database pool size.
Requirements
| Minimum | Notes | |
|---|---|---|
| CPU | amd64 or arm64 | Images and binaries are published for both. |
| Memory | 4 GB for the whole stack | A Raspberry Pi 5 with 4 GB runs it with the Pi overlay. |
| Postgres | 17 with TimescaleDB | Compose pins timescale/timescaledb:latest-pg17 by digest. Only hypertables are used: no continuous aggregates, no compression policies. |
| Raw store | a writable folder, or an S3 bucket with If-None-Match | Writes are conditional and never overwrite. |
| Docker Compose | v2.24 or later | Only for the compose setups. |
Versions
Releases are 0.x: any of them may change the API, the configuration or the schema. Images are
tagged with the version and with edge (the newest final release). There is no latest tag
while the version is 0.x: pin a version, and read the
changelog before
upgrading.