SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-10-30

So sánh app theo dõi vị trí self-hosted

So sánh Traccar, OwnTracks, Dawarich và Home Assistant theo nhu cầu lưu lịch sử hoặc xem trực tiếp, đồng thời giữ ingest endpoint ngoài Internet mở.

Ứng dụng theo dõi vị trí tự host nào phù hợp với bạn

Việc chọn ứng dụng theo dõi vị trí tự host phụ thuộc vào một câu hỏi: bạn muốn lưu lịch sử cho riêng mình, hay muốn theo dõi vị trí trực tiếp cùng với những người khác? Dawarich giải quyết nhu cầu thứ nhất. Đây là giải pháp thay thế tự host cho Google Maps Timeline và nó cho phép nhập lịch sử vị trí bạn đã có. Traccar giải quyết nhu cầu thứ hai. Nó được xây dựng cho phần cứng GPS và quản lý đội xe, coi điện thoại như một thiết bị theo dõi thông thường. OwnTracks nằm ở tầng dưới cả hai, đóng vai trò là ứng dụng trên điện thoại và định dạng tin nhắn. Home Assistant đã biết vị trí điện thoại của bạn nếu bạn đang chạy nó, nhưng mặc định nó sẽ xóa lịch sử sau mười ngày.

Hãy chọn dựa trên những gì bạn muốn xem vào tháng tới:

  • Bản đồ mọi nơi bạn đã đến vào tháng Ba vừa qua, bao gồm các địa điểm và chuyến đi: Dawarich.
  • Bản đồ trực tiếp của nhiều thiết bị, với hàng rào địa lý (geofence) và quy tắc sự kiện: Traccar.
  • Một điện thoại gửi vị trí của nó vào hệ thống bạn đang chạy: OwnTracks ở chế độ HTTP.
  • Tự động hóa khi ở nhà hoặc ra ngoài, không quan tâm đến lịch sử: Chỉ cần dùng Home Assistant.

Đối với việc báo cáo qua HTTP, điện thoại cần kết nối được tới một endpoint HTTPS mà bạn kiểm soát, vì vậy phần máy chủ sẽ có mục riêng bên dưới. Nếu bạn vẫn đang cân nhắc xem còn những gì nên cài đặt trên máy chủ, danh sách tổng hợp những thứ đáng để tự host trong năm nay sẽ cho thấy vị trí của một ứng dụng theo dõi so với các dịch vụ khác.

Traccar: phần cứng GPS, đội xe và vị trí trực tiếp

Traccar là một server theo dõi. Nó giao tiếp bằng các protocol mà thiết bị GPS chuyên dụng sử dụng. Mỗi protocol dùng một port riêng, được đánh số từ 5001 đến 5267 trong danh sách protocol hiện tại. Hướng dẫn Docker của Traccar cũng publish toàn bộ dải 5000 đến 5300 cho cả TCP và UDP. Hướng dẫn này cảnh báo rằng mỗi port được publish sẽ tạo một tiến trình docker-proxy riêng và tiêu tốn nhiều memory. Vì vậy, chỉ publish các port mà thiết bị của bạn sử dụng, hoặc tắt userland proxy của Docker để Docker dùng iptables NAT, sẽ nhẹ hơn. Traccar còn cung cấp live map, geofence, event rule và report. Web interface mặc định listen trên port 8082.

Trên điện thoại, Traccar có app Traccar Client cho Android và iOS. App này gửi dữ liệu bằng protocol OsmAnd, mặc định listen trên port 5055. Các setting của app quyết định thời lượng pin và số lượng bản ghi. Distance yêu cầu cập nhật sau mỗi N mét khi thiết bị đang di chuyển. Interval bật việc gửi dữ liệu theo thời gian khi khoảng cách bằng 0, chỉ hoạt động trên Android, hoặc khi accuracy được đặt ở mức cao nhất. Angle kích hoạt cập nhật khi hướng di chuyển thay đổi theo số độ, nếu accuracy được đặt ở mức cao nhất. Stationary Heartbeat quy định hành vi khi thiết bị không di chuyển. Tài liệu của Traccar cho biết kết quả chính xác của các setting này không được đảm bảo, vì điện thoại là bên quyết định.

Traccar đi kèm database H2 nhúng để installer hoạt động mà không cần thiết lập thêm. Project không khuyến nghị dùng H2 trong production. Tài liệu của project hướng dẫn thay thế bằng MySQL, MariaDB và PostgreSQL, đồng thời khuyến nghị TimescaleDB, một time series database xây dựng trên PostgreSQL, cho các deployment lớn. Hãy chuyển database trước khi tích lũy nhiều history, vì sau đó việc giữ lại history sẽ yêu cầu migrate dữ liệu hiện có sang database thay thế.

Traccar không phù hợp khi: đây là một console để theo dõi sự việc ở thời điểm hiện tại. Report của nó tập trung vào đội xe, chuyến đi, điểm dừng và các bản tổng hợp. Vì vậy, dữ liệu các cuối tuần trong một năm của riêng bạn sẽ giống một query result hơn là một timeline.

OwnTracks: ứng dụng điện thoại, Recorder và Frontend

OwnTracks là thiết lập cổ điển tối giản. Ứng dụng gửi một payload JSON nhỏ mỗi khi xác định thiết bị đã di chuyển, và nó có thể gửi qua MQTT (message queuing telemetry transport) hoặc HTTP thông thường. Ở chế độ HTTP, endpoint là một URL có dạng http[s]://[user[:password]@]host[:port]/path, được xác thực bằng HTTP Basic, và dự án khuyến nghị mạnh mẽ sử dụng giao thức https://. Đối với OwnTracks Recorder, đường dẫn là /pub.

Chế độ giám sát quan trọng hơn bất kỳ cài đặt máy chủ nào. Quiet chỉ gửi dữ liệu khi bạn yêu cầu. Manual thêm tính năng giám sát vùng và yêu cầu vị trí tiêu thụ điện năng thấp. Significant là chế độ tự động thông thường. Trên iOS, Move gửi dữ liệu ngay khi thiết bị đã di chuyển được locatorDisplacement mét hoặc locatorInterval giây đã trôi qua, tùy điều kiện nào đến trước, với mặc định là 100 mét và 300 giây. Trên Android, Move yêu cầu cập nhật vị trí mỗi 10 giây theo mặc định. OwnTracks ghi chú chế độ Move tiêu thụ pin ở mức tương đương ứng dụng điều hướng, và khuyến nghị dùng cho các chuyến đi hoặc khi đang sạc thay vì dùng hàng ngày.

OwnTracks Recorder lưu trữ dữ liệu nhận được và cung cấp một bản đồ nhỏ, còn OwnTracks Frontend riêng biệt cung cấp giao diện web đầy đủ hơn phía trên nó, với bản đồ nhiệt, lọc theo phạm vi ngày và lịch sử được vẽ dưới dạng điểm hoặc đường. Nhiều người không bao giờ cài đặt Recorder, vì payload là giống hệt nhau bất kể ứng dụng trỏ vào Recorder, Dawarich hay Home Assistant. Đó là lý do để bắt đầu từ đây: ứng dụng này là một trình tạo dữ liệu ổn định, đơn giản, và bạn có thể thay đổi lựa chọn về trình tiêu thụ dữ liệu sau này.

Dawarich: giải pháp thay thế Google Maps Timeline tự host

Dawarich được phát hành theo giấy phép AGPL-3.0 và chạy bằng file Docker Compose. Bản cài đặt mặc định hiện tại gồm ba container: ứng dụng Rails tích hợp các tác vụ nền Sidekiq, PostgreSQL và Redis. Ứng dụng này phục vụ tại cổng 3000. Các nguồn dữ liệu nhập vào bao gồm Google Maps Timeline, OwnTracks, Strava, Immich, các file GPX và GeoJSON, cùng dữ liệu EXIF trong ảnh của bạn. Danh sách nhập liệu này biến nó thành một dòng thời gian thay vì chỉ là bản đồ trực tiếp, vì nó có thể tiếp nhận dữ liệu lịch sử từ trước khi bạn cài đặt máy chủ.

Quá trình ingest (nhập dữ liệu) sử dụng một HTTP endpoint đi kèm API key từ trang tài khoản của bạn. OwnTracks gửi dữ liệu đến /api/v1/owntracks/points?api_key=... và Overland gửi đến /api/v1/overland/batches?api_key=.... GPSLogger sử dụng lại endpoint của OwnTracks.

Hãy lưu ý đường đi của key này. Nó nằm trong query string, và định dạng log mặc định của nginx ghi lại toàn bộ dòng request, vì vậy key sẽ xuất hiện dưới dạng văn bản thuần trong /var/log/nginx/access.log tại mỗi điểm dữ liệu. Hãy coi file log đó là thông tin mật, xoay vòng key nếu bạn chuyển log đến bất kỳ hệ thống tập trung nào và tuyệt đối không dán URL đang hoạt động vào các luồng hỗ trợ kỹ thuật.

Đối với file compose, các volume và chính sách restart, hãy tham khảo cơ chế container để chạy compose trên VPS. Trang này chỉ dừng lại ở bước đưa ra quyết định.

Home Assistant: mạnh về hiện diện, yếu về lưu trữ lịch sử

Nếu bạn đang chạy Home Assistant, bạn đã có sẵn tính năng theo dõi thiết bị. Ứng dụng companion sẽ báo cáo vị trí, còn integration OwnTracks cung cấp cho bạn một webhook URL và một encryption key để dán vào ứng dụng. Khi đã cấu hình MQTT, integration này sẽ lắng nghe các tin nhắn MQTT thay vì HTTP.

Giới hạn nằm ở thời gian lưu trữ. Recorder của Home Assistant mặc định là purge_keep_days: 10, và tiến trình tự động dọn dẹp (auto purge) chạy mỗi đêm vào lúc 04:12 giờ địa phương để ngăn database tăng trưởng không kiểm soát. Mặc định đó phù hợp cho database tự động hóa gia đình nhưng lại không phù hợp cho việc lưu trữ vị trí. Home Assistant trả lời câu hỏi "có ai ở nhà không". Để trả lời câu hỏi "tôi đã ở đâu vào ngày 14 tháng 3", hãy giữ lại lịch sử đó trước khi nó bị xóa: tăng purge_keep_days, vô hiệu hóa auto_purge, hoặc gửi cùng luồng dữ liệu đó đến một nơi lưu trữ khác. Việc giữ lại nhiều lịch sử hơn sẽ làm database của recorder phình to; nếu bạn vô hiệu hóa auto_purge, tài liệu hướng dẫn khuyến nghị bạn nên tự lên lịch cho các lệnh recorder.purge định kỳ.

Theo dõi liên tục hay chia sẻ theo thời điểm?

Theo dõi liên tục nghĩa là ứng dụng gửi dữ liệu cả ngày bất kể bạn có di chuyển hay không, và kho lưu trữ được tạo ra chính là mục đích cốt lõi. Chia sẻ theo thời điểm nghĩa là mọi người theo dõi nhau trong một chuyến đi, và kho lưu trữ chỉ là hệ quả phụ không ai yêu cầu. Cùng một phần mềm phục vụ cả hai mục đích với các thiết lập khác nhau.

Đối với theo dõi liên tục, hãy ưu tiên báo cáo dựa trên khoảng cách di chuyển thay vì bộ đếm thời gian ngắn, lưu database trên bộ nhớ mà bạn thực sự sao lưu, và quyết định thời gian lưu trữ ngay từ ngày đầu tiên thay vì đợi đến khi đầy ổ cứng. Đối với chia sẻ theo thời điểm, chỉ tăng tần suất báo cáo khi cần thiết và đưa điện thoại về chế độ tiết kiệm năng lượng sau đó. OwnTracks tích hợp tính năng này thành một tùy chọn trong ứng dụng, và Traccar Client cũng thực hiện tương tự thông qua các trường khoảng cách và khoảng thời gian.

Nếu bạn muốn tạo một liên kết chia sẻ trong hai giờ cho một chuyến đi duy nhất, hãy kiểm tra release notes của server bạn chọn trước khi bắt đầu. Traccar cung cấp các liên kết chia sẻ thiết bị tạm thời, còn Dawarich cung cấp các liên kết chia sẻ vị trí trực tiếp với tùy chọn mật khẩu, ngày hết hạn và khả năng thu hồi ngay lập tức.

Bạn có thực sự cần một MQTT broker không?

Hãy bắt đầu mà không cần nó. Chế độ HTTP chỉ yêu cầu một URL, mật khẩu và TLS (transport layer security), và mọi máy chủ được liệt kê ở trên đều chấp nhận nó. Một broker chỉ thực sự cần thiết khi có nhiều thiết bị cùng cần một luồng dữ liệu tại cùng một thời điểm, ví dụ như Home Assistant phản hồi một vùng trong khi trình ghi dữ liệu lưu lại lịch sử, hoặc các thành viên trong gia đình theo dõi vị trí của nhau.

MQTT là giao thức publish và subscribe, và Mosquitto là broker phổ biến nhất. Listener mặc định của nó sử dụng cổng 1883 ở dạng cleartext; hãy cấu hình một TLS listener trên cổng 8883 và chỉ mở cổng đó. Kiểm soát truy cập được thực hiện theo từng topic, vì vậy một tài khoản có thể được cấp quyền publish owntracks/alice/phone và không được phép đọc bất kỳ nội dung nào khác. Đây chính là lý do thực tế để sử dụng MQTT trong thiết lập gia đình: việc ai có thể thấy ai được thực thi bởi broker, nằm dưới tầng ứng dụng, nên lỗi ứng dụng không thể làm lộ dữ liệu.

Cái giá phải trả là thêm một service cần quản lý, với chứng chỉ riêng, danh sách người dùng riêng và chế độ lỗi riêng. Một broker ngừng chấp nhận kết nối trông giống hệt như một chiếc điện thoại mất sóng, và cả hai đều không thông báo cho bạn biết.

Một điện thoại sẽ tạo ra bao nhiêu dòng vị trí?

Các con số dưới đây là phép tính, không phải số đo. Chúng giả định khoảng thời gian báo cáo cố định, mỗi lần báo cáo tạo một dòng và không có dữ liệu nào khác.

Biểu đồPosition rows per phone at a fixed reporting interval (arithmetic)
Dữ liệu đằng sau biểu đồ này
[
  {
    "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"
  }
]

Một điện thoại báo cáo mỗi phút sẽ ghi 43,200 dòng mỗi tháng và 525,600 dòng mỗi năm. Tăng khoảng thời gian lên 15 phút thì một năm còn 35,040 dòng. Ứng dụng thực tế phức tạp hơn, vì chúng báo cáo cả khi điện thoại di chuyển chứ không chỉ theo thời gian, đồng thời ngừng báo cáo khi điện thoại đứng yên. Vì vậy, hãy xem các con số này là ví dụ với khoảng thời gian cố định, không phải dự báo.

Nửa triệu dòng mỗi năm là ít đối với PostgreSQL. Chi phí gây vấn đề trước tiên là việc vẽ chúng: một bản đồ được yêu cầu render dữ liệu của cả năm ở độ phân giải đầy đủ sẽ làm trình duyệt bị treo từ lâu trước khi database nhận thấy vấn đề. Vì vậy, các ứng dụng này thường gom lịch sử thành các chuyến đi và địa điểm. Hãy đo số thực tế trên máy của bạn thay vì tin một con số trong bài blog:

SELECT pg_size_pretty(pg_total_relation_size('tc_positions'));

Đó là bảng positions của Traccar trên PostgreSQL. Sau một tháng sử dụng thông thường, hãy chạy lệnh tương đương cho server bạn chọn, rồi nhân kết quả với 12. Theo mặc định, Home Assistant tự động xóa lịch sử cũ. Hãy chọn quy tắc lưu giữ khi bảng vẫn còn nhỏ, và bảo đảm backup bao gồm database chứ không chỉ config, vì không thể tái tạo lịch sử vị trí từ nguồn nào khác.

Chi phí pin là do điện thoại quyết định, không phải server

Đây là phần mà self-hosting không thay đổi được. Hệ điều hành quyết định khi nào GPS thức dậy, một app chạy nền được phép chạy bao lâu và có duy trì hoạt động qua đêm hay không. Android quản lý năng lượng rất chặt đối với các tác vụ chạy nền, còn iOS gửi các thay đổi vị trí đáng kể thay vì một luồng dữ liệu liên tục. Server không có quyền quyết định những việc này. Vì vậy, đặt reporting interval ngắn hơn trong app chỉ là một yêu cầu, còn điện thoại xử lý yêu cầu đó theo cách nó cho phép.

Những gì bạn kiểm soát nằm trên điện thoại: cấp quyền vị trí nền ở chế độ luôn cho phép, loại app tracking khỏi battery optimisation và chọn reporting mode phù hợp với lịch sử dụng trong ngày. Để Move mode cả tuần là cách khiến điện thoại hết pin từ 4 giờ chiều.

Ở phía server, triệu chứng là một loạt row có timestamp cũ. OwnTracks và Traccar Client khi bật offline buffering sẽ giữ các điểm trong lúc offline rồi gửi dồn khi mạng hoạt động trở lại. Vì vậy, write time và fix time là hai giá trị khác nhau. Khi bản đồ vẽ một đường thẳng băng qua thành phố, đó là khoảng trống trong các lần xác định vị trí, không phải một con đường.

Phía server: TLS và đường ingest có xác thực

Điện thoại cần một hostname mà nó phân giải được và một certificate mà nó tin cậy. Certificate tự ký là lý do phổ biến nhất khiến bản cài mới hoàn toàn không nhận được dữ liệu: app không vượt qua được TLS handshake rồi dừng, còn log của server vẫn trống vì request chưa hoàn tất. Log trống trông giống lỗi ở điện thoại, nhưng không phải.

Có 2 cách rõ ràng. Terminate TLS trong nginx bằng certificate hợp lệ, cụ thể là certificate Let's Encrypt phía trước nginx, rồi mở các cổng 80 và 443. Cổng 80 phải tiếp tục truy cập được vì plugin nginx của certbot xác minh domain bằng challenge HTTP-01. Let's Encrypt chỉ thực hiện challenge này trên cổng 80, nên hãy redirect cổng này sang HTTPS thay vì đóng nó. Chỉ khi chuyển sang challenge DNS-01 hoặc TLS-ALPN-01 thì bạn mới có thể chỉ chạy với cổng 443. Hoặc không expose inbound port nào bằng Cloudflare Tunnel để không có gì listen trên public IP. Cách này phù hợp với Dawarich và OwnTracks vì ingest của chúng dùng HTTP thông thường.

Có một giới hạn với phương án tunnel. Protocol OsmAnd của Traccar dùng HTTP, nên client trên điện thoại đi qua reverse proxy hoặc tunnel mà không gặp vấn đề. Các protocol nhị phân mà phần cứng GPS chuyên dụng sử dụng là raw TCP hoặc UDP trên những cổng riêng. Các cổng này phải thực sự được mở trên firewall của VPS và firewall mạng riêng của provider. Trên hầu hết host, đây là một control panel khác.

Sau khi endpoint trả lời, hãy kiểm tra đường đi bằng một request thay vì đoán từ app:

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

Endpoint hoạt động sẽ trả về status 2xx. Mã 401 nghĩa là server từ chối credentials hoặc chưa nhận được chúng, còn transport vẫn hoạt động bình thường. Nếu curl báo lỗi trước khi nhận được status line, hãy kiểm tra thông báo lỗi: DNS, connection bị từ chối, timeout và lỗi TLS là các vấn đề khác nhau. Hãy xử lý đúng vấn đề được báo trước khi chỉnh app.

Một ingest endpoint công khai làm lộ vị trí của bạn

Ingest URL không có xác thực sẽ tiết lộ vị trí của bạn cho bất kỳ ai tìm thấy nó, và luôn có người tìm thấy.

  • Bất kỳ ai có URL đều có thể ghi point vào lịch sử của bạn. Các point giả khó phát hiện và mất nhiều công sức để xóa.
  • URL không phải là secret. Nó nằm trong cài đặt app trên điện thoại, trong access log của reverse proxy, trong browser history nếu bạn từng test bằng tab, và trong mọi screenshot bạn đính kèm khi nhờ hỗ trợ.
  • Read API không được bảo vệ, chẳng hạn /api/0/last của OwnTracks Recorder, sẽ cung cấp vị trí mới nhất của bạn cho bất kỳ ai truy vấn API đó.
  • Hostname luôn public dù bạn làm gì. Certificate mới được cấp sẽ xuất hiện trong certificate transparency log trong vòng vài phút, vì vậy một địa chỉ bạn chưa từng công bố vẫn có thể bị phát hiện.

Dùng HTTP Basic trên TLS cho OwnTracks, API key cho Dawarich và mô hình account của Traccar cùng một device identifier duy nhất. Đặt admin interface phía sau cùng cơ chế xác thực với ingest path, vì interface là nơi có thể đọc toàn bộ hành trình. Sau đó kiểm tra ai đã liên tục truy cập sau tuần đầu tiên:

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

Các mobile IP address của điện thoại bạn phải chiếm phần lớn danh sách này. Bất kỳ địa chỉ nào khác có count cao đều đáng để kiểm tra, và thêm rate limit cho ingest location trong nginx không tốn chi phí gì.

Tracker cũng có thể âm thầm ngừng hoạt động. Container dừng, điện thoại tiếp tục buffer dữ liệu, và bạn chỉ biết sau vài tuần khi phát hiện một chuyến đi bị thiếu. Trỏ container health check hoặc systemd OnFailure= đến ntfy server của bạn để thông báo im lặng đó đến điện thoại đang gửi dữ liệu.

Ai khác có thể xem lộ trình và cách thực thi quyền truy cập

Traccar thực thi quyền truy cập thông qua người dùng và quyền hạn của thiết bị: một tài khoản chỉ thấy được các thiết bị mà quản trị viên đã cấp quyền, và API sử dụng session hoặc token. OwnTracks qua MQTT thực thi quyền này tại broker bằng các topic ACL, đây là phương thức bảo mật mạnh nhất vì một tài khoản không thể subscribe vào một topic thì sẽ không thể đọc được dữ liệu, bất kể ứng dụng thực hiện thao tác gì. OwnTracks qua HTTP không có lớp bảo mật tương đương, nên toàn bộ cơ chế kiểm soát truy cập phụ thuộc hoàn toàn vào những gì nằm sau endpoint. Dawarich cũng hỗ trợ chia sẻ vị trí trực tiếp cho gia đình, với mỗi thành viên tự kiểm soát việc chia sẻ của riêng mình.

Theo dõi vị trí gia đình không chỉ là vấn đề kỹ thuật mà còn là vấn đề về sự đồng thuận. Mọi người có điện thoại gửi dữ liệu vị trí đều phải biết rằng thiết bị của họ đang gửi dữ liệu đó và biết cách dừng lại. Một trình theo dõi mà người dùng không thể tự tắt thì không được coi là tính năng dành cho gia đình.

Self-hosting không khắc phục được những gì

  • Hệ điều hành trên điện thoại quyết định thời điểm GPS được bật, nên việc hao pin và các khoảng trống trong lộ trình chủ yếu do điện thoại gây ra, không phải do server.
  • Google đã thay đổi cách export dữ liệu Timeline. Hãy đọc tài liệu import hiện tại của Dawarich trước khi lên kế hoạch migration, vì file Google cung cấp hôm nay không giống file mà mọi người đã import 2 năm trước.
  • Endpoint của bạn nhìn thấy địa chỉ IP mobile của bạn trong mọi request, và mọi network nằm giữa cũng vậy. Self-hosting thay đổi bên lưu bản ghi đó. Nó không xóa bản ghi.
  • Lịch sử vị trí không thể thay thế. Hãy backup database, restore một lần để xác nhận bản backup hoạt động, và giữ bản sao ở dạng encrypted, vì đây là file nhạy cảm nhất trên server.

FAQ

Ứng dụng self-hosted nào thay thế Google Maps Timeline?

Dawarich. Ứng dụng này được xây dựng như một lựa chọn có thể self-host thay cho Google Timeline. Nó import bản export của Google Maps Timeline cùng dữ liệu từ OwnTracks, Strava, Immich, GPX, GeoJSON và EXIF của ảnh. Ứng dụng hiển thị lịch sử dưới dạng địa điểm và chuyến đi thay vì bản đồ trực tiếp. Traccar cũng có thể lưu các điểm này, nhưng giao diện của nó là console quản lý đội xe và các báo cáo là báo cáo đội xe. Hãy kiểm tra tài liệu import của Dawarich để biết format export mà ứng dụng yêu cầu trước khi lên kế hoạch migration, vì export của Google đã thay đổi.

Tôi có thể dùng OwnTracks mà không cần MQTT broker không?

Có. Đặt app ở HTTP mode và cung cấp URL có dạng http[s]://[user[:password]@]host[:port]/path, trong đó /pub là URL dành cho OwnTracks Recorder. App gửi cùng JSON payload và xác thực bằng HTTP Basic. OwnTracks khuyến nghị mạnh mẽ scheme https://. Bạn có thể thêm broker sau, khi 2 service cần dùng cùng một stream đồng thời hoặc khi muốn đặt access control theo từng topic để broker quyết định ai được xem dữ liệu của ai.

Một năm lịch sử vị trí cần bao nhiêu storage?

Hãy tính theo số row thay vì gigabyte. Mỗi phút ghi nhận 1 report tương đương 525,600 row mỗi năm cho mỗi điện thoại. Cứ 15 phút ghi nhận 1 report tương đương 35,040. Cả 2 mức này đều nhỏ đối với PostgreSQL. Giới hạn thực tế là trình duyệt phải vẽ 1 năm điểm trên cùng một bản đồ, nên các app này có cơ chế aggregate. Sau 1 tháng, hãy đo table của bạn bằng pg_total_relation_size rồi nhân với 12.

Tại sao lịch sử vị trí của tôi có khoảng trống?

Hệ điều hành của điện thoại quyết định khi nào đánh thức GPS và khi nào dừng app chạy nền, nên phần lớn khoảng trống bắt đầu từ đó. Cấp cho app quyền truy cập vị trí nền trong mọi thời điểm, loại app khỏi cơ chế tối ưu pin và kiểm tra reporting mode. Trong OwnTracks trên iOS, Move mode publish mỗi locatorDisplacement mét hoặc locatorInterval giây, mặc định là 100 mét và 300 giây. Trên Android, app mặc định request một fix mỗi 10 giây. Dù dùng cách nào, mức tiêu thụ pin cũng tương đương một app dẫn đường. Nếu các row đến muộn theo từng đợt và có timestamp cũ, đó là offline buffer đang được flush. Nghĩa là các fix đã được lấy, chỉ có quá trình upload bị trễ.

URL bí mật có đủ để bảo vệ location endpoint không?

Không. Một ingest endpoint không có authentication cho phép bất kỳ ai biết URL ghi các điểm giả vào lịch sử của bạn. URL không phải là thông tin bí mật: nó nằm trong app settings, reverse proxy access log, browser history và mọi screenshot bạn chia sẻ. Hostname cũng có thể tự được phát hiện, vì certificate mới sẽ xuất hiện trong certificate transparency log không lâu sau khi được cấp. Hãy dùng HTTP Basic qua TLS hoặc API key, đặt rate limit cho ingest path và bảo vệ admin interface bằng cùng cơ chế authentication.

Bài viết này có hữu ích không?

#tự lưu trữ#privacy#traccar#owntracks#dawarich#gps