Sherlocate, una app de seguimiento

La aplicación de seguimiento y trackeo que he usado durante los últimos diez años para mis rutas en bici se está poniendo pesada con la publicidad y subscripción de pago. Por esto me he creado mi propia aplicación mediante un contenedor docker que corre en el vps. Se trata de Sherlocate.
El sistema es muy sencillo, el teléfono manda la ubicación al servidor y este muestra una página web con un mapa en el que, cualquiera que conozca tu código de trackeo puede ver tu ubicación actual y la ruta que has seguido para llegar allí. A las 0:00 se borran los datos de posicionamiento de forma que sólo se muestra el rastro del día actual.
Para enviar los datos desde el teléfono vamos a usar la app Trackar Client, una sencilla app que permite configurar el servidor al que le vamos a enviar los datos de posicionamiento.
Para recibir y mostrar los datos he creado Sherlocate, una sencilla webapp que simplemente muestra un mapa con la ubicación y ruta que ha seguido el usuario que está enviando los datos. La app la tengo corriendo en un vps mediante docker detrás de un proxy inverso con npm. En el propio repositorio de Github tienes toda la info.
Si tienes curiosidad por ver el resultado, puedes ver mi último rastreo aquí.
Sherlocate 📍
Sherlocate es una solución de rastreo en tiempo real autohospedada, simple y ligera. Permite recibir datos de ubicación desde la aplicación oficial de Android Traccar Client, almacenar la última posición de forma persistente y mostrarla de forma interactiva en una página web única (SPA) con mapas dinámicos de Leaflet.js.
🛠️ Estructura del Proyecto
El proyecto está compuesto por los siguientes archivos:
- main.py: Backend desarrollado en FastAPI que gestiona la API de localización y sirve el frontend.
- templates/index.html: Frontend SPA con mapa interactivo Leaflet.js, historial de ruta (breadcrumbs), indicador de batería y telemetría.
- Dockerfile: Archivo para compilar la imagen de Docker basada en
python:3.11-slim. - requirements.txt: Dependencias Python.
- docker-compose.yml: Orquestación de Docker Compose que lee las variables desde un archivo
.envexterno. .env: Archivo de configuración local con las contraseñas e identificadores de los dispositivos (no se sube al repositorio)..env.example: Plantilla de ejemplo para configurar el archivo.env.
🚀 Despliegue Rápido (Docker Compose)
- Copia el archivo de plantilla a tu configuración real:
cp .env.example .env - Edita el archivo
.envcon tus dispositivos y contraseñas. - Ejecuta el siguiente comando para compilar e iniciar el contenedor en segundo plano:
docker compose up -d --build - El servicio estará disponible en
http://localhost:8000. Sus datos de posicionamiento se guardarán de forma persistente en la carpeta./datade tu servidor.
🔒 Configuración detrás de Nginx Proxy Manager (NPM)
Si utilizas Nginx Proxy Manager para exponer el servicio a Internet con un dominio propio y SSL (HTTPS), configúralo de la siguiente manera:
- Añade un nuevo Proxy Host.
- Domain Names: Tu subdominio (ej:
tracker.midominio.com). - Scheme:
http - Forward Hostname / IP:
- Si NPM está en la misma red de Docker que Sherlocate, puedes usar el nombre del contenedor:
sherlocate - Si NPM está fuera de Docker o en otra red, usa la IP local del servidor (ej:
192.168.1.100o la IP de docker172.17.0.1).
- Si NPM está en la misma red de Docker que Sherlocate, puedes usar el nombre del contenedor:
- Forward Port:
8000 - Websockets Support: Desactivado está bien (esta app usa short polling).
- Block Common Exploits: Activado (recomendado).
- En la pestaña SSL, solicita un certificado de Let’s Encrypt y activa Force SSL.
📱 Configuración en la App de Android (Traccar Client)
Configura la app Traccar Client (o cualquier cliente de geolocalización compatible con HTTP) en tu dispositivo Android:
- Dirección del servidor:
- Introduce la URL de tu endpoint de tracking pasando la contraseña del dispositivo como parámetro URL:
http://[IP-DE-TU-SERVIDOR]:8000/api/tracking?password=CONTRASEÑA_DEL_DISPOSITIVO(o usando HTTPS con tu dominio si usas un proxy inverso:https://midominio.com/api/tracking?password=CONTRASEÑA_DEL_DISPOSITIVO).
- Introduce la URL de tu endpoint de tracking pasando la contraseña del dispositivo como parámetro URL:
- Identificador del dispositivo: Introduce el identificador único que definiste en
.env(ej.123456). - Frecuencia: Ajusta el intervalo de envío (se recomiendan 5 o 10 segundos para un rastreo fluido en tiempo real).
- Proveedor de localización: Selecciona GPS o Mixto para garantizar la precisión de las coordenadas.
- Inicia el servicio: Activa el interruptor “Estado del servicio” en la pantalla principal.
Y nada más, gracias a la IA y la inversión en un vps cualquier cosa que necesites la tienes en producción en unos pocos días.