FitTrackee
Self-hosted outdoor workout and activity tracker
Alternative to: strava, garmin connect, runkeeper
FitTrackee is a self-hosted web application for tracking outdoor workouts. It imports GPX files exported from apps and devices such as FitoTrack, OpenTracks and Gadgetbridge, or lets you log an activity without a file, then renders the route on OpenStreetMap-based maps. All workout data stays on your own server instead of a third-party fitness service.
FitTrackee Docker Compose example
Self-host FitTrackee on your own server, homelab, or VPS starting from this Docker Compose example.
It runs FitTrackee in Docker containers using the official postgis/postgis:18-3.6-alpine, fittrackee/fittrackee:latest images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
fittrackee-db:
image: postgis/postgis:18-3.6-alpine
volumes:
- db_data:/var/lib/postgresql
environment:
POSTGRES_USER: "fittrackee"
POSTGRES_PASSWORD: "fittrackee"
POSTGRES_DB: "fittrackee"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U fittrackee -d fittrackee"]
interval: 5s
timeout: 15s
retries: 3
restart: unless-stopped
fittrackee:
image: fittrackee/fittrackee:latest
depends_on:
fittrackee-db:
condition: service_healthy
environment:
FLASK_APP: "fittrackee"
# Production configuration profile
APP_SETTINGS: "fittrackee.config.ProductionConfig"
# Secret key used to sign sessions and authentication tokens
APP_SECRET_KEY: "changeme"
# Public URL where users reach FitTrackee
UI_URL: "changeme"
# PostgreSQL connection string
DATABASE_URL: "postgresql://fittrackee:fittrackee@fittrackee-db:5432/fittrackee"
# Number of Gunicorn worker processes
APP_WORKERS: "1"
volumes:
- uploads:/usr/src/app/uploads
- staticmap_cache:/usr/src/app/.staticmap_cache
post_start:
- command: chown -R fittrackee:fittrackee /usr/src/app/uploads /usr/src/app/.staticmap_cache
user: root
command: "sh docker-entrypoint.sh"
healthcheck:
test: ["CMD-SHELL", "wget --spider http://127.0.0.1:5000/api/check-db || exit 1"]
interval: 5s
timeout: 15s
retries: 3
restart: unless-stopped
volumes:
db_data:
uploads:
staticmap_cache:
Values set to changeme are required — replace them with your own
values before starting FitTrackee.
Prefer a managed setup? WinterFlow installs, configures, and updates FitTrackee for you using this same Docker Compose configuration.