Cómo instalar Endurain en Docker - Rastreador fitness autohospedado
Endurain: Servicio de seguimiento fitness autohospedado
Alternativa privada a Strava con control total de datos, integración Strava/Garmin y despliegue mediante Docker
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar Endurain: Servicio de seguimiento fitness autohospedado en el canal GENBYTE:
¿Qué es Endurain: Servicio de seguimiento fitness autohospedado?
Endurain es un servicio de seguimiento de actividad física diseñado para autohospedarse, ofreciendo a los usuarios control total sobre sus datos y entorno de alojamiento. Funciona como alternativa a Strava centrada en la privacidad y la personalización. El proyecto está desarrollado en Python (FastAPI) para el backend y Vue.js 3 con TypeScript para el frontend, utilizando PostgreSQL como base de datos y Redis para caché y limitación de tasa. La distribución oficial se realiza mediante imágenes Docker y un archivo docker-compose.yml.example que define los servicios necesarios: backend, frontend, base de datos PostgreSQL, Redis y Jaeger para observabilidad. El repositorio principal se encuentra en Codeberg (https://codeberg.org/endurain-project/endurain), mientras que GitHub actúa como espejo de solo lectura. La licencia es AGPL-3.0.
Características principales
Autohospedado y privado
Los datos permanecen en la infraestructura del usuario sin depender de servicios de terceros para el almacenamiento principal.
Integración con Strava y Garmin Connect
Sincronización automática de actividades desde Strava y Garmin Connect mediante librerías oficiales (stravalib, python-garminconnect).
Importación manual de archivos
Soporte para carga manual de actividades en formatos .gpx, .tcx y .fit usando gpxpy, tcxreader y fitdecode.
Frontend moderno
Interfaz construida con Vue.js 3, TypeScript, Tailwind CSS y componentes shadcn-vue, gestión de estado con Pinia y TanStack Query.
Backend robusto
API REST con FastAPI, ORM SQLAlchemy, migraciones Alembic, notificaciones vía Apprise y trazabilidad básica con Jaeger.
Configuración por variables de entorno
Todos los parámetros sensibles y de comportamiento se definen en un archivo .env, facilitando la personalización sin modificar código.
Soporte multiidioma
Traducción gestionada a través de Codeberg Translate, con posibilidad de contribuir nuevos idiomas.
Demostración pública
Instancia de prueba en https://demo.endurain.com (usuario: admin, contraseña: admin) que se reinicia diariamente a medianoche (zona horaria Europe/Lisbon).
Requisitos del sistema
- Docker Engine y Docker Compose (v2 recomendado)
- Servidor con arquitectura compatible con las imágenes oficiales (linux/amd64, linux/arm64)
- Mínimo 2 GB de RAM recomendados para PostgreSQL, Redis y servicios de aplicación
- Espacio en disco para persistencia de base de datos y archivos subidos (volumen LOCAL_PATH, por defecto /var/opt/endurain)
- Dominio o subdominio con certificado TLS válido para acceso HTTPS (requerido para OAuth con Strava/Garmin)
- Puertos 80/443 disponibles para el proxy inverso (Traefik, Nginx, Caddy u otro) que termine TLS y reenvíe al contenedor frontend/backend
Instalación con Docker Compose
Clonar el repositorio y preparar entorno
Clonar desde Codeberg (repositorio principal) y copiar el archivo de ejemplo de variables de entorno.
Editar variables obligatorias en .env
Establecer contraseñas fuertes, clave secreta, clave Fernet, zona horaria, dominio público y activar BEHIND_PROXY=true si se usa proxy inverso. Las variables DB_PASSWORD, POSTGRES_PASSWORD, SECRET_KEY, FERNET_KEY, TZ, ENDURAIN_HOST y BEHIND_PROXY son obligatorias para arrancar.
Levantar la pila con Docker Compose
Usar el archivo docker-compose.yml.example como base (renombrar a docker-compose.yml) y lanzar los contenedores en segundo plano.
Verificar estado de los servicios
Comprobar que todos los contenedores están healthy y revisar logs del backend para confirmar migraciones de base de datos.
Acceder al proyecto
Acceso local tras despliegue
Una vez el proxy inverso termine TLS y reenvíe tráfico al puerto 8080 del contenedor frontend (configuración por defecto), la interfaz web estará disponible en el ENDURAIN_HOST definido en .env (ej. https://endurain.tudominio.com).
Demostración pública
Disponible en https://demo.endurain.com con credenciales admin / admin. El entorno se reinicia cada día a medianoche (Europe/Lisbon); no almacenar datos importantes.
Casos de uso
- Deportistas que desean mantener el historial de entrenamientos en su propia infraestructura sin ceder datos a plataformas comerciales.
- Equipos o clubes que necesitan una instancia privada para compartir actividades entre miembros con control de acceso propio.
- Desarrolladores e investigadores que requieren una base de código abierta (AGPL-3.0) para extender funcionalidades de análisis de datos deportivos.
- Usuarios preocupados por privacidad que prefieren sincronizar sus dispositivos Garmin o cuenta Strava a un servicio propio antes que a la nube del proveedor.
Configuración avanzada
Configuración de correo electrónico (recuperación de contraseña)
Definir variables SMTP en .env para habilitar envío de emails. Requiere host, puerto, usuario, contraseña, tipo de seguridad (starttls) y opcionalmente remitente verificado (SMTP_FROM).
Permitir esquemas de redirección personalizados (OAuth móvil)
Añadir esquemas URI permitidos para el parámetro redirect en flujos OAuth iniciados desde navegador del sistema (apps móviles). Por defecto solo 'endurain'.
Lista de permitidos SSRF para proveedores de identidad internos
Habilitar resolución de hosts privados (Authentik, Pocket ID, Keycloak, etc.) solo para descubrimiento OIDC y JWKS. Requiere hostnames exactos o rangos CIDR; no se aceptan comodines.
Orígenes adicionales en Content-Security-Policy (connect-src)
Necesario cuando Endurain está detrás de un proxy de autenticación directa (forward-auth) que redirige llamadas API a su propio dominio para validación de sesión.
Timeouts de sesión
Activar expiración por inactividad y vida máxima absoluta de sesión. Valores en horas.
Desactivar limitación de tasa (solo desarrollo)
Por defecto RATE_LIMIT_ENABLED=true. Poner a false para entornos de pruebas sin Redis o sin necesidad de rate limiting.
Gestión y mantenimiento
Actualizar a nueva versión
Obtener últimos cambios del repositorio principal (Codeberg), reconstruir imágenes y recrear contenedores. Las migraciones de base de datos se aplican automáticamente al arrancar el backend.
Copias de seguridad de la base de datos
Realizar dump de PostgreSQL desde el contenedor de base de datos. Almacenar en ubicación externa o volumen separado.
Restaurar base de datos desde copia
Detener backend para evitar conexiones, restaurar dump y volver a levantar servicios.
Consultar logs de aplicación
Revisar logs del backend, frontend, base de datos o Redis para diagnóstico.
Limpiar recursos Docker no utilizados
Eliminar imágenes antiguas, redes y volúmenes huérfanos tras actualizaciones frecuentes.
Stack técnico
- Python 3.11+ (FastAPI, SQLAlchemy, Alembic, Apprise, stravalib, python-garminconnect, gpxpy, tcxreader, fitdecode)
- Vue.js 3 con TypeScript, Tailwind CSS, shadcn-vue, Pinia, TanStack Query
- PostgreSQL 15+ (datos principales)
- Redis 7+ (caché, rate limiting, almacenamiento de sesiones de seguridad)
- Jaeger (trazabilidad distribuida básica)
- Docker / Docker Compose (despliegue y orquestación)
- Proxy inverso externo (Traefik, Nginx, Caddy) para terminación TLS
Referencias oficiales
- Repositorio principal (Codeberg): https://codeberg.org/endurain-project/endurain
- Espejo en GitHub (solo lectura): https://github.com/endurain-project/endurain
- Documentación oficial: https://docs.endurain.com
- Demostración pública: https://demo.endurain.com
- Perfil Mastodon: https://fosstodon.org/@endurain
- Servidor Discord: https://discord.gg/6VUjUq2uZR
- Traducciones (Codeberg Translate): https://translate.codeberg.org/projects/endurain/
- Licencia AGPL-3.0: https://www.gnu.org/licenses/agpl-3.0.html
- Política de marca registrada: https://codeberg.org/endurain-project/endurain/raw/branch/master/TRADEMARK.md
- Guía de contribución: https://codeberg.org/endurain-project/endurain/raw/branch/master/CONTRIBUTING.md
- Hoja de ruta (ROADMAP): https://codeberg.org/endurain-project/endurain/raw/branch/master/ROADMAP.md
Comentarios
Publicar un comentario