You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Self-hosted dashboard for sports and fitness data β imports Strava activities into statistics, heatmaps, gear tracking and yearly overviews. Formerly "Statistics for Strava". Requested in discussion #4640.
Caveat up front: upstream documents Docker only.docs.dreeve.app has no bare-metal path. This script reproduces their image natively and is therefore not on a path the project supports β flagged as a warning in the JSON.
How it maps:
Their image is dunglas/frankenphp:1-php8.5-alpine. FrankenPHP publishes standalone binaries (frankenphp-linux-x86_64-gnu), so PHP comes bundled and the Debian PHP version is irrelevant β relevant here since composer.json requires php: >=8.5 and trixie ships 8.4.
Composer is bootstrapped through frankenphp php-cli, then composer install --no-dev --optimize-autoloader.
The Caddyfile is adapted from docker/app/config/Caddyfile (worker mode, 3 threads, http_port 8080) with absolute paths.
Migrations use the same commands as their entrypoint: bin/console app:db:migrate + cache:warmup.
SQLite via DATABASE_DIRECTORY=/opt/dreeve_data, per config/packages/doctrine.yaml.
Deliberately not reproduced: the Go fit-tool built in the first Docker stage, and the bundled shoutrrr binary. FIT file import and push notifications are therefore unavailable. Adding them means building a Go binary from docker/fit-tool/ β worth doing if the script proves useful.
Note: Strava API credentials are mandatory; without them the app has no data at all.
Dreeve does nothing without Strava credentials. Create an API application at https://www.strava.com/settings/api and put STRAVA_CLIENT_ID, STRAVA_CLIENT_SECRET and STRAVA_REFRESH_TOKEN into /opt/dreeve/.env.local, then restart the service.
Upstream only documents a Docker deployment. This script reproduces that setup natively - FrankenPHP as the server (the same one their image is based on) plus composer install - but it is not a path the project supports, so an upstream change can break it.
Activity data is stored in a SQLite database under /opt/dreeve_data via DATABASE_DIRECTORY. Back up that directory.
Not included: the Go-based fit-tool and shoutrrr notification binary that the official image bundles. FIT file import and push notifications are therefore unavailable.
Note: This is not in the official repo yetβit's just a dev version! After merging into ProxmoxVE, it will need to be recreated.
Activity
community-scripts-issue-bot commentedon Oct 12, 2026
The Dreeve script is ready for testing. Run it in the Proxmox VE shell (or on an Incus host) to create a container:
Dreeve does nothing without Strava credentials. Create an API application at https://www.strava.com/settings/api and put STRAVA_CLIENT_ID, STRAVA_CLIENT_SECRET and STRAVA_REFRESH_TOKEN into /opt/dreeve/.env.local, then restart the service.
Upstream only documents a Docker deployment. This script reproduces that setup natively - FrankenPHP as the server (the same one their image is based on) plus composer install - but it is not a path the project supports, so an upstream change can break it.
Activity data is stored in a SQLite database under /opt/dreeve_data via DATABASE_DIRECTORY. Back up that directory.
Not included: the Go-based fit-tool and shoutrrr notification binary that the official image bundles. FIT file import and push notifications are therefore unavailable.
Note: This is not in the official repo yetβit's just a dev version! After merging into ProxmoxVE, it will need to be recreated.
Discord testing thread: https://discord.com/channels/1302816934508630047/1559185052066385992