Self-Hosting Fasten Health with Docker Compose
What Is Fasten Health?
Fasten Health is a self-hosted personal health record aggregator. It connects to healthcare providers via the FHIR protocol (the healthcare industry standard for data exchange) to pull your medical records — lab results, prescriptions, immunizations, visits — into one private dashboard. Instead of logging into five different patient portals, you query one local database. Your health data never leaves your server.
Updated February 2026: Verified with latest Docker images and configurations.
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 512 MB of free RAM
- 2 GB of free disk space
- A domain name (optional, for remote access)
Docker Compose Configuration
Create a docker-compose.yml file:
services:
fasten:
image: ghcr.io/fastenhealth/fasten-onprem:v1.1.3
container_name: fasten-health
restart: unless-stopped
ports:
- "9090:8080"
volumes:
- fasten_data:/opt/fasten/db
- fasten_cache:/opt/fasten/cache
environment:
# Log level: trace, debug, info, warn, error
- LOG_LEVEL=info
# JWT signing key — CHANGE THIS to a random 32+ character string
- JWT_ISSUER_KEY=changeme_generate_a_random_string_here
volumes:
fasten_data:
fasten_cache:
Fasten Health uses SQLite internally — no external database required. The application binary is statically compiled in Go and runs in a minimal container.
Start the stack:
docker compose up -d
Initial Setup
- Open
https://your-server-ip:9090in your browser (Fasten serves HTTPS by default) - Create your account — this is the first and only user account
- Navigate to Sources to connect healthcare providers
- Search for your provider (e.g., “Kaiser Permanente”, “MyChart”) and authenticate with your patient portal credentials
- Fasten pulls your records via FHIR — this may take a few minutes for large medical histories
Fasten supports 25,000+ FHIR-enabled healthcare institutions in the US. Search by hospital name, health system, or insurance provider.
Configuration
Connecting Healthcare Providers
Each provider connection authenticates separately via OAuth. Fasten acts as a SMART on FHIR client:
| Step | What Happens |
|---|---|
| Search | Find your provider in Fasten’s directory |
| Authenticate | Log in to your patient portal via OAuth popup |
| Sync | Fasten pulls available FHIR resources (labs, meds, conditions) |
| Dashboard | Records appear in condition-specific dashboards |
Records update when you manually trigger a re-sync. Automatic background sync is planned but not yet implemented.
Condition Dashboards
Fasten organizes records into condition-specific views. If you have diabetes-related records, a diabetes dashboard shows relevant lab results (A1C, glucose), medications, and visit history together. This is generated automatically from your FHIR data — no manual categorization needed.
Data Storage
All data is stored locally in SQLite:
fasten_datavolume: database files with your health recordsfasten_cachevolume: cached provider metadata
No data is sent to external servers. Fasten doesn’t phone home, track usage, or require an internet connection after the initial provider sync.
Reverse Proxy
Nginx Proxy Manager configuration:
- Scheme: https (Fasten serves HTTPS internally)
- Forward Hostname: fasten-health
- Forward Port: 8080
- Enable SSL with Let’s Encrypt
For Caddy:
health.yourdomain.com {
reverse_proxy https://fasten-health:8080 {
transport http {
tls_insecure_skip_verify
}
}
}
Backup
Back up the SQLite database:
docker compose stop fasten
docker run --rm -v fasten_data:/data -v $(pwd):/backup alpine tar czf /backup/fasten-backup.tar.gz /data
docker compose start fasten
Your health records are irreplaceable. Schedule automated backups and store copies offsite.
Troubleshooting
Provider not found in search
Symptom: Your healthcare provider doesn’t appear when searching. Fix: Fasten’s provider directory covers FHIR-enabled US institutions. If your provider isn’t listed, they may not support FHIR, or they may use a parent health system’s portal (try searching for the health system name instead of the individual hospital).
OAuth authentication fails
Symptom: The provider login popup shows an error or redirects back without connecting.
Fix: Ensure your Fasten instance is accessible via HTTPS — many providers require the callback URL to use TLS. Check that your JWT_ISSUER_KEY is set and the container has been restarted after changing it.
Records incomplete after sync
Symptom: Some records are missing after syncing a provider. Fix: Not all providers expose all FHIR resource types. Lab results and medications are most commonly available. Imaging, notes, and full visit records depend on the provider’s FHIR implementation. Re-sync to check for newly available data.
Resource Requirements
- RAM: ~80 MB idle, ~150 MB during sync
- CPU: Low (Go binary, minimal background work)
- Disk: ~100 MB for application, plus data growth based on number of records and providers
Verdict
Fasten Health solves a real problem: your medical records are scattered across multiple patient portals with no unified view. It’s the only self-hosted option that actually connects to healthcare providers via FHIR rather than requiring manual data entry. The dashboard is functional and the setup is straightforward.
The limitation is scope — it’s a record aggregator, not a health tracker. It doesn’t track workouts, weight, or daily metrics. For that, pair it with Endurain (fitness tracking) or wger (workout management). Fasten handles the medical data; other tools handle the daily health data.
Frequently Asked Questions
Does Fasten Health work outside the United States?
Currently, Fasten Health’s provider directory covers FHIR-enabled US healthcare institutions. Providers outside the US that support FHIR may work if you can manually add their endpoint, but the built-in directory is US-focused. International FHIR support varies widely by country.
What health records can Fasten access?
It depends on what your provider exposes via FHIR. Lab results, medications, immunizations, conditions, and allergies are most commonly available. Full clinical notes, imaging studies, and detailed visit records depend on the provider’s FHIR implementation. Each provider decides what data to share through the standard.
Is my health data encrypted?
Fasten stores data in a local SQLite database on your server. Data at rest isn’t encrypted by default — SQLite doesn’t support transparent encryption. For encryption, use full-disk encryption (LUKS) on the host volume. Data in transit between Fasten and healthcare providers uses TLS via FHIR/OAuth.
Can multiple family members use one Fasten instance?
Fasten currently supports a single user account per instance. For multiple family members, run separate Fasten containers, each with their own data volume and port mapping.
Does Fasten automatically sync new records?
Not yet. Records update when you manually trigger a re-sync from the Sources page. Automatic background sync is on the roadmap but not implemented as of v1.1.x.
How do I export my data from Fasten?
You can export records in FHIR JSON format through the web UI. This is useful for sharing data with another provider or migrating to a different health record system.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments