SSD Nodes Learn Hosting plans →
Guías Matt ConnorPor Matt Connor · Actualizado 2026-09-11

Comparativa de apps de ubicación autoalojadas

Compare Traccar, OwnTracks, Dawarich y Home Assistant según su uso: historial, mapa en directo o presencia. Proteja el endpoint de ingesta.

Qué aplicación de seguimiento de ubicación autoalojada se adapta a su caso

El seguimiento de ubicación autoalojado se divide según una pregunta: ¿quiere conservar un historial para usted o consultar una posición en directo junto con otras personas? Dawarich resuelve el primer caso. Es una alternativa autoalojada a Google Maps Timeline e importa el historial que ya tiene. Traccar resuelve el segundo. Se diseñó para hardware GPS y flotas, y trata el teléfono como otro tracker. OwnTracks se sitúa por debajo de ambos como aplicación del teléfono y formato de mensajes. Home Assistant ya conoce la ubicación del teléfono si lo ejecuta, pero elimina el recorrido después de diez días de forma predeterminada.

Elija según lo que quiera consultar el próximo mes:

  • Un mapa de todos los lugares a los que fue el pasado marzo, con lugares y viajes: Dawarich.
  • Un mapa en directo de varios dispositivos, con geocercas y reglas de eventos: Traccar.
  • Un teléfono que envía su posición a algo que ya ejecuta: OwnTracks en modo HTTP.
  • Automatizaciones de presencia en casa y ausencia, sin interés por el historial: Home Assistant por sí solo.

Nada de esto funciona hasta que el teléfono pueda acceder a un endpoint HTTPS que usted controle, por lo que el servidor tiene su propia sección más abajo. Si todavía está determinando qué más debería alojar en el equipo, la lista general de lo que merece la pena autoalojar este año muestra dónde encaja un tracker junto con todo lo demás.

Traccar: hardware GPS, flotas y posición en tiempo real

Traccar es un servidor de seguimiento. Se comunica mediante los protocolos que utilizan los rastreadores GPS dedicados. Cada protocolo escucha en su propio puerto TCP y UDP dentro del rango de 5000 a 5150. Encima ofrece un mapa en tiempo real, geocercas, reglas de eventos e informes. La interfaz web escucha en el puerto 8082 de forma predeterminada.

Para teléfonos existe la aplicación Traccar Client para Android e iOS. Envía datos mediante el protocolo OsmAnd, que escucha en el puerto 5055 de forma predeterminada. Estos ajustes determinan la duración de la batería y la cantidad de registros. Distance solicita una actualización cada N metros mientras el dispositivo está en movimiento. Interval activa los informes basados en tiempo cuando la distancia es 0. Angle activa una actualización cuando cambia el rumbo, expresado en grados. Stationary Heartbeat define qué ocurre cuando el dispositivo no está en movimiento. La documentación de Traccar indica que el resultado exacto no está garantizado en ninguno de los casos, porque lo decide el teléfono.

Traccar incluye una base de datos H2 integrada para que el instalador funcione sin configuración adicional. El proyecto no recomienda H2 para producción. Recomienda MySQL o MariaDB para servidores pequeños y PostgreSQL, opcionalmente con TimescaleDB, para servidores grandes. Migre la base de datos antes de acumular historial, porque convertir después un archivo H2 es una tarea manual y no existe una herramienta compatible para hacerlo.

Dónde encaja mal Traccar: es una consola para observar lo que ocurre ahora. Los informes son informes de flota, viajes, paradas y resúmenes. Por eso, un año de sus propios fines de semana se muestra como el resultado de una consulta y no como una línea temporal.

OwnTracks: una aplicación móvil y un endpoint, nada más

OwnTracks es la configuración clásica mínima. La aplicación publica una pequeña carga JSON cada vez que determina que el dispositivo se ha movido. Puede publicar mediante MQTT (message queuing telemetry transport) o mediante HTTP sin cifrar. En el modo HTTP, el endpoint es una URL con el formato http[s]://[user[:password]@]host[:port]/path y se autentica mediante HTTP Basic. El proyecto recomienda encarecidamente el esquema https://. Con OwnTracks Recorder, la ruta es /pub.

El modo de monitorización importa más que cualquier configuración del servidor. Quiet sólo publica cuando se lo solicita. Manual añade la monitorización de regiones y una solicitud de ubicación de bajo consumo. Significant es el modo automático normal. Move publica en cuanto el dispositivo ha recorrido locatorDisplacement metros o han transcurrido locatorInterval segundos, lo que ocurra primero, con valores predeterminados de 100 metros y 300 segundos. OwnTracks documenta que el modo Move consume batería al nivel de una aplicación de navegación y lo recomienda para un viaje o mientras el dispositivo se está cargando, no como configuración diaria.

OwnTracks Recorder almacena los datos recibidos y ofrece un mapa sencillo. Muchas personas no lo instalan porque la carga es idéntica tanto si la aplicación apunta a Recorder como si apunta a Dawarich o a Home Assistant. Por eso conviene empezar aquí: la aplicación es un productor estable y sencillo, y más adelante puede cambiar el consumidor.

Dawarich: una alternativa autoalojada a Google Maps Timeline

Dawarich usa AGPL-3.0 y se ejecuta mediante un archivo de Docker Compose. Una instalación funcional consta de cuatro contenedores: la aplicación Rails, un worker de Sidekiq para las tareas en segundo plano, PostgreSQL y Redis. La aplicación sirve el puerto 3000. Las fuentes de importación incluyen Google Maps Timeline, OwnTracks, Strava, Immich, archivos GPX y GeoJSON, y los datos EXIF de las fotografías. Esta lista de importación es lo que lo convierte en una línea de tiempo y no en un mapa en tiempo real, porque puede incorporar un historial anterior al servidor.

La ingesta se realiza mediante un endpoint HTTP que incluye una API key de la página de la cuenta. OwnTracks publica en /api/v1/owntracks/points?api_key=... y Overland publica en /api/v1/overland/batches?api_key=.... GPSLogger reutiliza el endpoint de OwnTracks.

Observe por dónde viaja esa key. Está en la cadena de consulta, y el formato de registro predeterminado de nginx escribe la línea de solicitud completa. Por tanto, la key termina en /var/log/nginx/access.log en texto claro con cada punto. Trate ese registro como un secreto, rote la key si envía registros a algún sistema central y nunca pegue una URL operativa en un hilo de soporte.

Para el archivo de Compose, los volúmenes y la política de reinicio, consulte la mecánica de contenedores para ejecutar Compose en un VPS. Esta página se detiene en la decisión.

Home Assistant: útil para presencia, inadecuado para históricos

Si ya ejecuta Home Assistant, ya dispone de seguimiento de dispositivos. La aplicación complementaria informa de la posición y la integración de OwnTracks proporciona una URL de webhook y una clave de cifrado que debe introducir en la aplicación. Con MQTT configurado, esa integración recibe mensajes MQTT en lugar de HTTP.

El límite es la retención. El recorder de Home Assistant conserva los datos durante purge_keep_days: 10 de forma predeterminada, y la purga automática se ejecuta cada noche a las 04:12, hora local, para evitar que la base de datos crezca sin límite. Ese valor predeterminado es adecuado para una base de datos de domótica, pero no para un archivo histórico de ubicaciones. Home Assistant responde a «¿hay alguien en casa?». No responde a «¿dónde estaba el 14 de marzo?» a menos que envíe el mismo flujo a otro sistema que lo conserve.

¿Seguimiento continuo o uso compartido ocasional?

El seguimiento continuo significa que la aplicación publica datos durante todo el día, tanto si usted se desplaza como si no, y que el archivo que crea es el objetivo principal. El uso compartido ocasional significa que varias personas se observan durante un viaje, y que el archivo es un efecto secundario que nadie solicitó. El mismo software admite ambos usos, con configuraciones diferentes.

Para el seguimiento continuo, prefiera los informes basados en el desplazamiento en lugar de un temporizador breve, mantenga la base de datos en un almacenamiento del que realmente haga copias de seguridad y decida la retención el primer día, no cuando el disco se llene. Para el uso compartido ocasional, aumente la frecuencia de los informes sólo mientras sea necesario y devuelva después el teléfono a un modo de bajo consumo. OwnTracks ofrece este control en la aplicación, y Traccar Client hace lo mismo mediante sus campos de distancia e intervalo.

Si quiere un enlace para compartir durante dos horas en un solo viaje, revise las notas de la versión del servidor que elija antes de comprometerse. Esta función es la que más cambia entre versiones y es el área más débil de todas las opciones descritas aquí.

¿Necesita realmente un broker MQTT?

Empiece sin uno. El modo HTTP requiere una URL, una contraseña y TLS (seguridad de la capa de transporte), y todos los servidores indicados anteriormente lo admiten. Un broker se justifica cuando más de un componente necesita el mismo flujo al mismo tiempo, por ejemplo, cuando Home Assistant reacciona ante una zona mientras un grabador guarda el historial, o cuando los miembros de una familia necesitan verse entre sí.

MQTT es un protocolo de publicación y suscripción, y Mosquitto es el broker habitual. Escucha en 1883 sin cifrado y en 8883 para TLS; debe usar sólo 8883. El control de acceso se aplica por tema, por lo que se puede permitir que una cuenta publique en owntracks/alice/phone sin darle permiso para leer ningún otro tema. Este es el argumento principal a favor de MQTT en una configuración familiar: el broker aplica quién puede ver a quién, por debajo de la aplicación, de modo que un error de la aplicación no pueda ampliar ese acceso.

El coste es otro servicio, con su propio certificado, su propia lista de usuarios y su propio modo de fallo. Un broker que deja de aceptar conexiones se comporta exactamente como un teléfono sin cobertura, y ninguno de los dos le informa de la causa.

¿Cuántas filas de posiciones generará un teléfono?

Las cifras siguientes son cálculos, no mediciones. Suponen un intervalo de reporte fijo, una fila por reporte y nada más.

ChartPosition rows per phone at a fixed reporting interval (arithmetic)
The data behind this chart
[
  {
    "label": "Every 30 seconds",
    "points_30d": "86,400",
    "points_365d": "1,051,200"
  },
  {
    "label": "Every 60 seconds",
    "points_30d": "43,200",
    "points_365d": "525,600"
  },
  {
    "label": "Every 5 minutes",
    "points_30d": "8,640",
    "points_365d": "105,120"
  },
  {
    "label": "Every 15 minutes",
    "points_30d": "2,880",
    "points_365d": "35,040"
  }
]

Un teléfono que informa una vez por minuto escribe 43,200 filas al mes y 525,600 filas al año. Si se amplía el intervalo a quince minutos, el año requiere 35,040 filas. Las aplicaciones reales son menos previsibles: informan tanto cuando el teléfono se desplaza como según el tiempo transcurrido, y dejan de informar cuando el teléfono está quieto. Por eso, considere la primera cifra un límite máximo y no una previsión.

Medio millón de filas al año es una cantidad pequeña para PostgreSQL. El primer coste relevante suele ser representarlas: un mapa al que se le pide renderizar un año de puntos con resolución completa bloquea el navegador mucho antes de que la base de datos lo note. Por eso, estas aplicaciones agregan el historial en trayectos y lugares. Mida la cantidad real en su propio servidor en lugar de confiar en una cifra de una publicación:

SELECT pg_size_pretty(pg_total_relation_size('tc_positions'));

Esa es la tabla positions de Traccar en PostgreSQL. Ejecute el equivalente para el servidor que elija después de un mes de uso normal y multiplique el resultado por doce. Ninguno de estos servidores elimina los puntos antiguos por sí solo. Conservan lo que se les envía hasta que usted lo elimina. Por tanto, defina una política de retención mientras la tabla aún sea pequeña y asegúrese de que la copia de seguridad incluya la base de datos, no sólo la configuración, porque un historial de ubicaciones no se puede reconstruir a partir de ninguna otra cosa.

El consumo de batería depende del teléfono, no del servidor

Esta es una de las partes que el alojamiento propio no cambia. El sistema operativo decide cuándo se activa el GPS, cuánto tiempo puede ejecutarse una aplicación en segundo plano y si seguirá funcionando durante la noche. Android suspende de forma agresiva las tareas en segundo plano, e iOS proporciona cambios de ubicación importantes en lugar de un flujo continuo. El servidor no puede intervenir en nada de esto. Por tanto, un intervalo de envío más corto en la aplicación es sólo una solicitud, y el teléfono la aplica como considera conveniente.

Lo que puede controlar está en el teléfono: conceda permiso de ubicación en segundo plano de forma permanente, excluya la aplicación de seguimiento de la optimización de batería y ajuste el modo de envío a la actividad del día. Mantener el modo de movimiento toda la semana es una forma segura de que el teléfono se quede sin batería a las cuatro de la tarde.

En el servidor, el síntoma es una ráfaga de filas con marcas de tiempo antiguas. Traccar Client y OwnTracks almacenan los puntos mientras no hay conexión y los envían cuando la red vuelve a estar disponible. Por eso, la hora de escritura y la hora de la posición son valores distintos. Si el mapa dibuja una línea recta a través de una ciudad, se debe a una interrupción en las posiciones registradas, no a una carretera.

El lado del servidor: TLS y una ruta de ingesta autenticada

El teléfono necesita un nombre de host que pueda resolver y un certificado de confianza. Un certificado autofirmado es la razón más común por la que una instalación nueva no recibe nada: la aplicación no completa el protocolo de enlace TLS y abandona, mientras el registro del servidor permanece vacío porque la petición nunca terminó. Un registro vacío parece un problema del teléfono, pero no lo es.

Hay dos opciones claras. Termine TLS en nginx con un certificado real, es decir, un certificado de Let's Encrypt delante de nginx, y abra sólo 443. O no exponga ningún puerto entrante mediante un Cloudflare Tunnel para que no haya nada escuchando en la IP pública, una opción adecuada para Dawarich y OwnTracks porque su ingesta usa HTTP normal.

Hay un límite en la opción del túnel. El protocolo OsmAnd de Traccar usa HTTP, por lo que un cliente de teléfono atraviesa un proxy inverso o un túnel sin problemas. Los protocolos binarios que usa el hardware GPS dedicado son TCP sin formato en sus propios puertos. Estos requieren un puerto realmente abierto, tanto en el firewall del VPS como en el firewall de red independiente del proveedor. En la mayoría de los hosts, este último se administra desde un panel de control diferente.

Cuando responda, compruebe la ruta con una petición en lugar de deducir el problema a partir de la aplicación:

curl -si -u alice:secret -H 'Content-Type: application/json' \
  -d '{"_type":"location","lat":51.5,"lon":-0.12,"tst":1788480000}' \
  https://track.example.com/pub | head -1

Un endpoint operativo responde con un estado 2xx. Un 401 significa que las credenciales son incorrectas y que el transporte funciona. Un error de curl antes de cualquier línea de estado indica un problema de DNS o TLS. Corrija el certificado antes de modificar la aplicación.

Un endpoint de ingestión abierto expone tu ubicación

Una URL de ingestión sin autenticación revela tu posición a cualquiera que la encuentre, y siempre hay alguien que la encuentra.

  • Cualquiera que tenga la URL puede escribir puntos en tu historial. Los puntos falsos son difíciles de detectar y tediosos de eliminar.
  • Una URL no es un secreto. Se guarda en la configuración de la aplicación del teléfono, en el registro de acceso del reverse proxy, en el historial del navegador si alguna vez la probaste en una pestaña y en cualquier captura de pantalla que adjuntes al pedir ayuda.
  • Un endpoint que responde a solicitudes GET sin autenticación entregará tu última posición a un crawler que haya adivinado la ruta.
  • El nombre de host es público hagas lo que hagas. Un certificado recién emitido aparece en los registros de transparencia de certificados en cuestión de minutos, por lo que una dirección que nunca publicaste sigue siendo descubrible.

Usa HTTP Basic sobre TLS para OwnTracks, la API key de Dawarich y el modelo de cuentas de Traccar con un identificador de dispositivo único. Coloca la interfaz de administración detrás de la misma autenticación que la ruta de ingestión, porque en la interfaz se puede leer todo el recorrido. Después de la primera semana, revisa quién ha estado intentando acceder:

sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Las direcciones IP móviles de tu teléfono deberían dominar esa lista. Cualquier otra dirección con un recuento alto merece una revisión, y limitar la tasa en la ubicación de ingestión de nginx no cuesta nada.

Un tracker también puede fallar sin avisar. El contenedor se detiene, el teléfono sigue almacenando datos en búfer y te enteras semanas después, cuando falta un trayecto. Configura una comprobación de estado del contenedor o un servicio systemd OnFailure= que envíe avisos a tu propio servidor ntfy, para que el silencio te llegue al mismo teléfono que está enviando los datos.

Quién más puede ver el historial y cómo se aplica ese control

Traccar aplica el control de acceso mediante usuarios y permisos de dispositivos: cada cuenta ve los dispositivos que un administrador le ha asignado, y la API utiliza una sesión o un token. OwnTracks mediante MQTT lo aplica en el broker con ACL de topics. Es la opción más sólida de estas tres, porque una cuenta que no puede suscribirse a un topic no puede leerlo, independientemente de lo que haga cualquier aplicación. OwnTracks mediante HTTP no tiene una capa equivalente, por lo que todo lo que haya detrás del endpoint constituye el control de acceso. Dawarich está diseñado para que una persona consulte su propio historial. Por eso, cuando varias personas necesitan seguirse en tiempo real, Traccar o un broker encajan mejor.

El seguimiento familiar también plantea una cuestión de consentimiento, además de una cuestión técnica. Todas las personas cuyos teléfonos publiquen datos deben saber que lo hacen y cómo detenerlo. Un tracker que una persona no puede desactivar no es una función familiar.

Qué no resuelve el autoalojamiento

  • El sistema operativo del teléfono decide cuándo se activa el GPS, por lo que el consumo de batería y los intervalos sin datos en el recorrido se deben principalmente al teléfono, no al servidor.
  • Google ha cambiado la forma de exportar los datos de Timeline. Consulte la documentación actual de importación de Dawarich antes de planificar una migración, porque el archivo que Google entrega hoy no es el mismo que se importaba hace dos años.
  • Su endpoint ve la dirección IP móvil en cada solicitud, y también la ve cada red intermedia. El autoalojamiento cambia quién conserva ese registro. No elimina el registro.
  • Un historial de ubicaciones es irremplazable. Haga una copia de seguridad de la base de datos, restáurela una vez para comprobar que la copia funciona y mantenga la copia cifrada, porque es el archivo más sensible del servidor.

FAQ

¿Qué aplicación autohospedada sustituye a Google Maps Timeline?

Dawarich. Está diseñada como una alternativa autohospedada a Google Timeline. Importa una exportación de Google Maps Timeline, además de datos de OwnTracks, Strava, Immich, GPX y GeoJSON, y metadatos EXIF de fotos. Presenta el historial como lugares y viajes, no como un mapa en tiempo real. Traccar puede almacenar los mismos puntos, pero su interfaz es una consola de flota y sus informes son informes de flota. Consulte la documentación de importación de Dawarich para conocer el formato de exportación que espera antes de planificar la migración, porque el formato de exportación de Google ha cambiado.

¿Puedo usar OwnTracks sin un broker MQTT?

Sí. Configure la aplicación en modo HTTP y proporciónele una URL con el formato http[s]://[user[:password]@]host[:port]/path, que para OwnTracks Recorder es /pub. Envía la misma carga JSON, autenticada mediante HTTP Basic, y OwnTracks recomienda encarecidamente el esquema https://. Añada un broker más adelante, cuando dos servicios necesiten el mismo flujo al mismo tiempo o cuando quiera aplicar control de acceso por tema para que el broker decida quién puede ver cada flujo.

¿Cuánto almacenamiento necesita un año de historial de ubicaciones?

Planifique en filas, no en gigabytes. Un informe por minuto son 525,600 filas al año por teléfono, y uno cada quince minutos son 35,040. Cualquiera de las dos cantidades es pequeña para PostgreSQL. El límite práctico lo impone el navegador al dibujar un año de puntos en un solo mapa. Por eso estas aplicaciones agregan los datos. Mida su propia tabla después de un mes con pg_total_relation_size y multiplique el resultado por doce.

¿Por qué tiene huecos mi historial de ubicaciones?

El sistema operativo del teléfono decide cuándo activar el GPS y cuándo detener una aplicación en segundo plano, por lo que la mayoría de los huecos empiezan ahí. Conceda a la aplicación permiso de ubicación en segundo plano para todo el tiempo, exclúyala de la optimización de batería y compruebe el modo de informes. En OwnTracks, el modo Move publica cada locatorDisplacement metros o locatorInterval segundos. De forma predeterminada, usa 100 metros y 300 segundos, y consume batería al nivel de una aplicación de navegación. Si las filas llegan tarde en una ráfaga y contienen marcas de tiempo antiguas, significa que se está vaciando el búfer sin conexión. Las ubicaciones se registraron correctamente y sólo se retrasó la carga.

¿Basta una URL secreta para proteger un endpoint de ubicación?

No. Un endpoint de ingesta sin autenticación permite que cualquiera que conozca la URL escriba puntos falsos en su historial. Además, una URL no es un secreto: aparece en la configuración de la aplicación, en el registro de acceso del reverse proxy, en el historial del navegador y en cualquier captura de pantalla que comparta. El nombre de host se puede descubrir por sí solo, porque un certificado nuevo aparece en los registros de transparencia de certificados poco después de su emisión. Use HTTP Basic sobre TLS o una clave de API, limite la tasa de solicitudes en la ruta de ingesta y mantenga la interfaz de administración detrás de la misma autenticación.

#self-hosting#privacy#traccar#owntracks#dawarich#gps