FitTrackee logo

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.