Endurain is a self-hosted fitness tracking service designed to give users full control over their data and hosting environment. It's similar to Strava but focused on privacy and customization.
It is similar to FitTrackee and i am currently testing both. The current limit with FitTrackee is the lack of an easy and scalable Garmin Integration.
Endurain is provided with a docker-compose. Installation instructions are here.
As usual, create a dadicated user with proper folders for data storage:
useradd -m -d /data/daemons/endurain endurain mkdir /data/endurain /var/log/endurain chown endurain:endurain /data/endurain /var/log/endurain
Then grab the example docker-compose.yml here, put it under /data/daemons/enbdurain/docker-compose.yml and customize like the following:
services: endurain: container_name: endurain image: ghcr.io/joaovitoriasilva/endurain:latest environment: - TZ=Europe/Rome - DB_PASSWORD=<< random password for the database >> - SECRET_KEY=<< see below >> - FERNET_KEY=<< see below >> - GEOCODES_MAPS_API=<< see below >> - ENDURAIN_HOST=https://train.mydomain.com - UID=0 - GID=0 - BEHIND_PROXY=true volumes: - /data/endurain/backend/user_images:/app/backend/user_images # necessary for user image persistence on container image updates - /data/endurain/backend/files/bulk_import:/app/backend/files/bulk_import # necessary to enable bulk import of activities. Place here your activities files - /data/endurain/backend/files/processed:/app/backend/files/processed # necessary for processed original files persistence on container image updates - /var/log/endurain:/app/backend/logs # log files for the backend ports: - "5123:8080" depends_on: postgres: networks: - endurain-network postgres: image: postgres:latest container_name: postgres environment: - POSTGRES_PASSWORD=<< same password as above database password >> - POSTGRES_DB=endurain - POSTGRES_USER=endurain - PGDATA=/var/lib/postgresql/data/pgdata ports: - "5432:5432" volumes: - /data/endurain/postgres:/var/lib/postgresql/data networks: - endurain-network networks: endurain-network: {}
To generate the SECRET_KEY run the following command:
openssl rand -hex 32
To generate the FERNET_KEY go to this page or issue the following command, if you have the relevant modules installed:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
The GEOCODES_MAPS_API is needed even if the 1request/second, 5000 request/day limit is enough for you. Otherwise, you need to upgrade to a paid plan on Geocode. To get the key just do the free registration and get the key.
Volumes will be mounted under /data/endurain.
Pick an available port.
UID and GID are set to 0 because i use rootless podman, in this case 0 means to run the container as the endurain host user, not root, and this is what we want.
Now run as usual:
podman compose pull podman compose up
Please note that due to database initialization time, the first startup might fail on the Endurain app. In this case let the database initialize properly, shut down and restart the containers.
I have deployed Endurain on a subdomain, because i already had one set up for it. Check The Reverse Proxy concept for more details:
server { server_name train.mydomain.com; listen 443 ssl; listen 8443 ssl; access_log /var/log/nginx/train.mydomain.com_access_log main; error_log /var/log/nginx/train.mydomain.com_error_log info; location / { proxy_pass http://127.0.0.1:5123; proxy_redirect default; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Forwarded-Proto $scheme; } client_max_body_size 100M; include com.mydomain/certbot.conf; }
To start it, and set it up on boot, as usual follow my indications Using Containers on Gentoo, so link the user-containers init script:
ln -s /etc/init.d/user-containers /etc/init.d/user-containers.endurain
and create the following config file:
USER=endurain DESCRIPTION="Fitness tracker"
Add the service to the default runlevel and start it now:
rc-update add user-containers.endurain default rc-service user-containers.endurain start
Go to the web UI and do the first login as user admin with password admin, then immediately change the password.
You can now start adding users and using the tool!
Create the following /etc/logrotate.d/endurain file:
/var/log/endurain/* { missingok notifempty }