166 lines
7.3 KiB
Markdown
166 lines
7.3 KiB
Markdown
---
|
|
title: wger
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, fitness, workout, nutrition, python, django, agpl]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=fitness, https://github.com/wger-project/wger, https://wger.de]
|
|
---
|
|
|
|
# wger 🏋️
|
|
|
|
> Application **FLOSS de gestion d'entraînements, nutrition et poids** écrite en Python/Django, avec API REST. Référence open source auto-hébergeable pour le suivi fitness complet.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | https://wger.de/ |
|
|
| **GitHub** | https://github.com/wger-project/wger |
|
|
| **License** | AGPL-3.0-or-later |
|
|
| **Langage** | Python (Django) |
|
|
| **Étoiles** | ⭐6.2k (GitHub) / ⭐917 (selfh.st rank) |
|
|
| **Dernière MAJ** | 2026-06-04 |
|
|
| **Catégorie** | [[cat-fitness]] |
|
|
|
|
## Description
|
|
|
|
wger (prononcé « vɛɡɐ ») est une application web **libre et open source** de gestion d'entraînements, de nutrition et de poids corporel. Écrit principalement en Python avec le framework **Django**, le projet vise à fournir une alternative crédible aux services commerciaux comme MyFitnessPal, Strong ou Jefit, tout en gardant un contrôle total sur ses données de santé.
|
|
|
|
Côté fonctionnalités, wger offre un **gestionnaire de routines d'entraînement** flexible avec règles de progression automatique, une **base de données d'exercices** collaborative (wiki), un **tracker de poids et mesures corporelles**, un **journal nutritionnel** s'appuyant sur la base collaborative **Open Food Facts**, une **galerie de photos** de progression, et un **mode multi-utilisateurs** basique permettant la gestion d'une petite salle de sport. Une **API REST** complète permet l'intégration avec des outils tiers et des automatisations (Home Assistant, scripts de nutrition, etc.).
|
|
|
|
L'**écosystème est multi-plateforme** : le backend web s'accompagne d'apps natives pour **Android** (Google Play et F-Droid), **iOS**, et **Flathub** (Linux desktop), toutes basées sur Flutter et consommant l'API REST. La **traduction est gérée par Weblate** (multilingue, dont français complet). Le projet est **261 contributeurs**, **9000+ commits**, et un rythme de release soutenu (v2.5 en avril 2026, suivi Django 6, Python 3.14 supporté).
|
|
|
|
## Installation
|
|
|
|
### Via Docker (recommandé)
|
|
|
|
Le repo dédié [wger-project/docker](https://github.com/wger-project/docker) fournit un template prêt à l'emploi :
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
db:
|
|
image: postgres:16-alpine
|
|
restart: unless-stopped
|
|
volumes:
|
|
- wger-db:/var/lib/postgresql/data
|
|
environment:
|
|
POSTGRES_USER: wger
|
|
POSTGRES_PASSWORD: wger
|
|
POSTGRES_DB: wger
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U wger"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
app:
|
|
image: wger/server:latest
|
|
container_name: wger
|
|
restart: unless-stopped
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
environment:
|
|
DJANGO_SETTINGS_MODULE: wger.settings
|
|
DJANGO_SECRET_KEY: change-me-with-pwgen-50
|
|
DJANGO_ALLOWED_HOSTS: "wger.example.com,localhost"
|
|
SITE_URL: https://wger.example.com
|
|
EMAIL_HOST: smtp.example.com
|
|
EMAIL_PORT: 587
|
|
EMAIL_HOST_USER: wger@example.com
|
|
EMAIL_HOST_PASSWORD: smtp-secret
|
|
EMAIL_USE_TLS: "True"
|
|
POSTGRES_HOST: db
|
|
POSTGRES_PORT: 5432
|
|
POSTGRES_USER: wger
|
|
POSTGRES_PASSWORD: wger
|
|
POSTGRES_DB: wger
|
|
ports:
|
|
- "8080:80"
|
|
volumes:
|
|
- wger-media:/home/wger/media
|
|
|
|
volumes:
|
|
wger-db:
|
|
wger-media:
|
|
```
|
|
|
|
```bash
|
|
# Premier lancement : créer le super-utilisateur
|
|
docker compose run --rm app wger create-superuser admin admin@example.com
|
|
```
|
|
|
|
### Installation manuelle
|
|
|
|
1. **Pré-requis** : Python 3.10+, PostgreSQL 14+, Node.js (pour le build frontend), `uv` recommandé.
|
|
2. **Cloner** : `git clone https://github.com/wger-project/wger && cd wger`
|
|
3. **Dépendances** : `uv sync` (lockfile `uv.lock` fourni).
|
|
4. **Base de données** : créer un utilisateur et une DB PostgreSQL (`createdb wger`).
|
|
5. **Variables d'environnement** : copier `.env.example` en `.env`, ajuster `DJANGO_SECRET_KEY`, `POSTGRES_*`, `EMAIL_*`.
|
|
6. **Migrations** : `uv run wger migrate`.
|
|
7. **Collectstatic** : `uv run wger collectstatic --noinput`.
|
|
8. **Serveur de dev** : `uv run wger runserver 0.0.0.0:8000`.
|
|
9. **Production** : Gunicorn + reverse proxy (Traefik/Caddy).
|
|
|
|
## Configuration
|
|
|
|
- **Premier lancement** : créer un super-utilisateur, se connecter, configurer la langue et l'unité (kg/lbs).
|
|
- **Calendrier** : créer des routines, ajouter exercices avec sets/reps/poids, planifier les jours.
|
|
- **Progression auto** : configurer des règles (ex : +2.5kg à chaque semaine complétée).
|
|
- **Nutrition** : la base d'aliments est synchronisée depuis Open Food Facts (tâche cron).
|
|
- **Mesures** : tracker poids, tour de taille, body fat %, etc. avec graphiques.
|
|
- **API tokens** : créer des tokens dans le profil utilisateur pour intégrations tierces.
|
|
- **Backups** : `pg_dump wger_db` + sauvegarde du volume `wger-media` (photos uploadées).
|
|
- **HTTPS obligatoire** via reverse proxy.
|
|
- **Email** : configurer SMTP pour envoi de notifications et réinitialisation de mot de passe.
|
|
|
|
## Alternatives
|
|
|
|
### Open Source
|
|
- [[app-workout-cool]] — Plateforme coaching moderne (TypeScript/Next.js)
|
|
- [[app-sparkyfitness]] — MyFitnessPal-like avec IA (TypeScript)
|
|
- [[app-workout-tracker]] — Tracker GPX + musculation (Go)
|
|
- [[app-wingfit]] — Fitness minimaliste français (Angular + FastAPI)
|
|
- **Hevy / Strong** clones — FitNotes (Android natif)
|
|
|
|
### Propriétaires
|
|
- **MyFitnessPal** — référence nutrition, freemium, partage de données problématique
|
|
- **Strong** (iOS/Android) — app muscu fluide, 10$/mois en premium
|
|
- **JEFIT** — routines muscu, app + web
|
|
- **Hevy** — moderne, social, 10$/mois
|
|
- **FitNotes** — gratuit mais Android only
|
|
|
|
## Sécurité
|
|
|
|
- **Chiffrement mot de passe** : Django gère nativement (PBKDF2 par défaut, Argon2 possible).
|
|
- **HTTPS obligatoire** via reverse proxy (Traefik/Caddy).
|
|
- **API tokens** : révocables, scopes à limiter par intégration.
|
|
- **2FA** : non natif dans wger core — à ajouter via reverse proxy (Authelia/Authentik).
|
|
- **CSRF, XSS, SQL injection** : protégés par défaut par Django ORM et templates.
|
|
- **Permissions** : multi-utilisateurs avec rôles (admin, utilisateur standard).
|
|
- **Uploads** : photos stockées dans le volume, valider la sanitisation des EXIF.
|
|
- **AGPL-3.0** : si vous modifiez wger et l'exposez publiquement, vous **devez** redistribuer les sources.
|
|
- **Backups** : `pg_dump` quotidien + rsync des médias photos.
|
|
|
|
## Ressources
|
|
- Site officiel : https://wger.de/
|
|
- Documentation : https://wger.readthedocs.io/
|
|
- Code source : https://github.com/wger-project/wger
|
|
- Docker template : https://github.com/wger-project/docker
|
|
- Weblate traductions : https://hosted.weblate.org/engage/wger/
|
|
- API docs : https://wger.readthedocs.io/en/latest/api.html
|
|
- Discord : https://discord.gg/rPWFv6W
|
|
- Mastodon : @wger@fosstodon.org
|
|
- selfh.st : https://selfh.st/apps/?tag=fitness
|
|
|
|
## Pages Liées
|
|
- [[cat-fitness]] — Catégorie parente
|
|
- [[app-workout-cool]] — Alternative moderne (TypeScript)
|
|
- [[app-sparkyfitness]] — Alternative nutrition+IA
|
|
- [[app-workout-tracker]] — Alternative Go
|
|
- [[app-wingfit]] — Alternative minimaliste FR
|
|
- [[recettes-docker-compose]] — Templates de déploiement
|
|
- [[securisation-home-lab]] — Bonnes pratiques sécurité
|