This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Endurain ====== [[https://github.com/joaovitoriasilva/endurain|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 [[https://github.com/SamR1/FitTrackee|FitTrackee]] and i am currently testing both. The current limit with FitTrackee is the lack of an easy and scalable Garmin Integration. ===== Installation ===== Endurain is provided with a docker-compose. Installation instructions are [[https://docs.endurain.com/getting-started/|here]]. As usual, create a dadicated user with proper folders for data storage: <code bash> useradd -m -d /data/daemons/endurain endurain mkdir /data/endurain /var/log/endurain chown endurain:endurain /data/endurain /var/log/endurain </code> Then grab the example docker-compose.yml [[https://github.com/joaovitoriasilva/endurain/blob/master/docker-compose.yml.example|here]], put it under **/data/daemons/enbdurain/docker-compose.yml** and customize like the following: <file - docker-compose.yml> 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: {} </file> To generate the **SECRET_KEY** run the following command: <code bash> openssl rand -hex 32 </code> To generate the **FERNET_KEY** go to [[https://fernetkeygen.com|this page]] or issue the following command, if you have the relevant modules installed: <code bash> python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" </code> 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 [[https://geocode.maps.co/|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: <code bash> podman compose pull podman compose up </code> 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. ===== Reverse Proxy ===== I have deployed Endurain on a subdomain, because i already had one set up for it. Check [[selfhost:nginx|The Reverse Proxy concept]] for more details: <file - endurain.conf> 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; } </file> ===== Autostart ===== To start it, and set it up on boot, as usual follow my indications [[gentoo:containers|Using Containers on Gentoo]], so link the **user-containers** init script: <code> ln -s /etc/init.d/user-containers /etc/init.d/user-containers.endurain </code> and create the following config file: <file - /etc/conf.d/user-containers.endurain> USER=endurain DESCRIPTION="Fitness tracker" </file> Add the service to the default runlevel and start it now: <code bash> rc-update add user-containers.endurain default rc-service user-containers.endurain start </code> ===== Configuration ===== 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! ===== Log rotation ===== Create the following **/etc/logrotate.d/endurain** file: <file - endurain> /var/log/endurain/* { missingok notifempty } </file>