Endurain¶
Fitness tracking application - Alternative open-source à Strava.
Informations¶
- Container: LXC 104 (192.168.1.104)
- Port: 8080
- Version: latest
- Documentation: docs.endurain.com
- GitHub: endurain-project/endurain
Accès¶
- URL locale:
http://192.168.1.104:8080 - URL publique (via reverse proxy):
https://run.ncls.ltd - Default credentials:
- Username:
admin - Password:
admin - ⚠️ Changer le mot de passe après la première connexion
- Username:
Configuration Reverse Proxy¶
Endurain est accessible via Caddy (LXC 103) :
- Config :
caddy/Caddyfilesur LXC 103 (blocrun.ncls.ltd) - Backend:
http://192.168.1.104:8080 - Frontend:
https://run.ncls.ltd(ancien domaineendurain.ncls.ltdredirige en 301)
Le .env est configuré avec BEHIND_PROXY=true et ENDURAIN_HOST=https://run.ncls.ltd pour le bon fonctionnement derrière le proxy.
Configuration¶
Structure¶
104-services/
├── docker-compose.yml
├── .env (secrets)
└── endurain/
├── data/ # Activity files, user images
├── logs/ # Application logs
└── postgres/ # PostgreSQL database
Services Docker¶
- endurain-app: Application principale (Python FastAPI)
- endurain-postgres: Base de données PostgreSQL 17.5
Variables d'Environnement¶
Configurées dans /mnt/lxc-data/104-services/.env :
DB_PASSWORD/POSTGRES_PASSWORD: Mot de passe base de donnéesSECRET_KEY: Clé secrète applicationFERNET_KEY: Clé de chiffrementTZ: Timezone (Europe/Paris)ENDURAIN_HOST: URL d'accèsBEHIND_PROXY: true si derrière reverse proxy
Fonctionnalités¶
- Tracking d'activités: Course, vélo, natation, etc.
- Intégrations: Strava, Garmin Connect
- Statistiques: Graphiques, historique, tendances
- Social: Partage d'activités, followers
- Multi-utilisateurs: Plusieurs comptes sur la même instance
Commandes Utiles¶
# Status
pct exec 104 -- docker compose -f /opt/docker/docker-compose.yml ps
# Logs application
pct exec 104 -- docker logs endurain-app -f
# Logs database
pct exec 104 -- docker logs endurain-postgres -f
# Restart services
pct exec 104 -- docker compose -f /opt/docker/docker-compose.yml restart
# Backup manuel database
pct exec 104 -- docker exec endurain-postgres pg_dump -U endurain endurain > /opt/docker/endurain/backup-$(date +%Y%m%d).sql
Mise à Jour¶
# Sur le host
pct exec 104 -- bash -c "cd /opt/docker && docker compose pull && docker compose up -d"
Note: Vérifier les release notes pour breaking changes
Backup¶
Automatique (via script)¶
Les éléments suivants sont sauvegardés quotidiennement à 05:00 vers Google Drive :
docker-compose.yml.envendurain/data/(activity files, images)
Manuel Database¶
La base de données PostgreSQL devrait être sauvegardée régulièrement :
# Backup
pct exec 104 -- docker exec endurain-postgres pg_dump -U endurain endurain > /tmp/endurain-db-$(date +%Y%m%d).sql
# Restore
pct exec 104 -- bash -c "cat /tmp/endurain-db-YYYYMMDD.sql | docker exec -i endurain-postgres psql -U endurain endurain"
Important: Ne pas sauvegarder directement le dossier
/postgrespendant que la base tourne (risque de corruption)
Dépannage¶
Container en restart loop¶
Vérifier les permissions :
# Sur le host
ls -lan /mnt/lxc-data/104-services/endurain/
# Data et logs doivent appartenir à 101000:101000
# Postgres doit appartenir à 100999:100999
Corriger si nécessaire :
chown -R 101000:101000 /mnt/lxc-data/104-services/endurain/{data,logs}
chown -R 100999:100999 /mnt/lxc-data/104-services/endurain/postgres
Oubli mot de passe admin¶
Réinitialiser via la base de données :
pct exec 104 -- docker exec -it endurain-postgres psql -U endurain
# Puis requêtes SQL pour reset password
Espace disque¶
# Vérifier espace LXC
pct exec 104 -- df -h
# Vérifier taille données
du -sh /mnt/lxc-data/104-services/endurain/*
Intégrations¶
Strava¶
- Créer application Strava API : developers.strava.com
- Configurer OAuth callback :
http://192.168.1.104:8080/api/v1/strava/callback - Ajouter credentials dans les settings Endurain
Garmin Connect¶
- Connecter dans les settings Endurain
- Sync automatique des activités
Sécurité¶
- ⚠️ Changer le mot de passe admin par défaut
- Configurer derrière reverse proxy (Caddy) pour HTTPS
- Activer 2FA si disponible
- Limiter l'accès réseau (UFW/firewall) si exposé