[{"data":1,"prerenderedAt":172},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-your-gps-history-with-dawarich-on-a-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":24,"featuredImage":26,"bgImage":27,"posterImage":28,"relatedSolution":26,"intro":29,"sections":30,"ctaTitle":102,"ctaBody":103,"ctaButton":104,"ctaUrl":105,"relatedPosts":106},300,"self-host-your-gps-history-with-dawarich-on-a-vps",{"fr":10,"en":8,"ar":11},"dawarich-google-maps-timeline-vps","استضافة-تاريخ-gps-الخاص-بك-مع-dawarich-على-vps","Self-host your GPS history with Dawarich on a VPS","Google Timeline moved to on-device storage, server data deleted. Self-host your GPS history with Dawarich on a root Docker NVMe VPS.",10,0,false,"2026-08-24T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[25],{"id":19,"name":20,"slug":21,"color":22,"icon":23},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdawarich-google-maps-timeline-vps-poster.svg","In December 2023, Google announced the end of server-side Timeline storage: location data migrates to the device, and data hosted on Google's side is permanently deleted. Years of trips, stops, and geolocated memories disappear with the account or the phone. To regain control of this history and preserve it durably, there is a self-hosted open source solution that runs on any VPS with Docker — and its name is Dawarich.",[31,35,45,48,58,61,86,89,92,96,99],{"type":32,"title":33,"body":34},"h2","What Google Timeline changed — and what you lose","On December 12, 2023, Google announced that location history would no longer be stored in the Google cloud: each user must migrate their data to their device before a deadline, after which Google's server deletes it with no possibility of recovery. On Android, this means your Timeline only exists as long as your phone exists — a replacement, a reset, or a deleted account wipes years of trips in seconds.\n\nBeyond the technical loss, the episode reveals a structural dependency: when a cloud service decides to change the rules, your data follows — or disappears.",{"type":36,"title":37,"items":38},"ul","What you risk losing without an alternative",[39,40,41,42,43,44],"Years of trip history: holidays, business travel, daily geolocated habits.","Heatmaps and statistics built on that data — city visits, kilometres travelled.","Continuity of tracking if your phone is lost, stolen or reset.","The ability to cross-reference your location with your photos or calendars.","Web access to history, a feature removed with the local migration.","Any control over retention period: Google now imposes automatic deletion at 3 months by default.",{"type":32,"title":46,"body":47},"Dawarich — sovereign GPS history","Dawarich is an open source web application (AGPL-3.0, over 10,000 stars on GitHub) designed specifically to replace Google Timeline on your own infrastructure. It ingests your Google Takeout data (JSON format), GPX and KML files, and stores them in a PostgreSQL database you manage.\n\nIts map displays your trips as points or lines, with density heatmap, movement statistics and search by period or location. Integration with **OwnTracks** and **Overland** enables continuous real-time tracking from your phone, without going through any third-party service. Dawarich's API also exposes an Overland-compatible endpoint, simplifying mobile configuration.",{"type":36,"title":49,"items":50},"What Dawarich can do",[51,52,53,54,55,56,57],"Import from Google Takeout export in JSON format, as well as GPX and KML files.","Display full history on an interactive map with heatmap and track layers.","Movement statistics: countries visited, cities, distance travelled per period.","Real-time tracking via OwnTracks and Overland mobile apps (iOS and Android).","Open API to export or cross-reference your data with other tools.","Multi-user management: each family member has their own isolated space.","Reverse geocoding via Photon, Nominatim, Geoapify or LocationIQ — your choice, no imposed dependency.",{"type":32,"title":59,"body":60},"Prerequisites before deploying","Dawarich runs comfortably on a modest VPS. Here is what you need:\n\n**Server resources.** 1 to 2 vCPU and 2 GB of RAM are sufficient for personal use. If you manage several years of data or multiple users, 4 GB is more comfortable for geocoding and heatmap generation.\n\n**Storage.** Location data is lightweight (text and coordinates), but bulk imports from Google Takeout can weigh several hundred MB. An NVMe SSD significantly improves search and indexing speed. Plan for at least 10 GB, more depending on the size of your archives.\n\n**Software.** Docker Engine and `docker compose` v2 installed on the server, a dedicated IPv4 address, and a domain name (for example `geo.your-domain.com`) to secure access over HTTPS.",{"type":62,"title":63,"steps":64},"steps","Install Dawarich on your VPS",[65,68,71,74,77,80,83],{"title":66,"body":67},"Update the server and install Docker","Connect via SSH to your VPS, then update packages with `apt update && apt upgrade -y`. Install Docker Engine following the official Docker procedure for your distribution (Ubuntu or Debian). Verify the installation with `docker --version` and `docker compose version`.",{"title":69,"body":70},"Create the working directory","Create a dedicated directory, for example `mkdir -p \u002Fopt\u002Fdawarich && cd \u002Fopt\u002Fdawarich`. This is where your `docker-compose.yml` and `.env` file will live.",{"title":72,"body":73},"Create the docker-compose.yml file","Create your `docker-compose.yml` with the following services: `dawarich_app` (the web interface and API), `dawarich_sidekiq` (the background job worker, notably for geocoding), and `dawarich_db` (PostgreSQL). Here is the base structure — adapt the password and secret:\n\n```yaml\nservices:\n  dawarich_app:\n    image: freikin\u002Fdawarich:latest\n    environment:\n      - APPLICATION_HOST=geo.your-domain.com\n      - DATABASE_HOST=dawarich_db\n      - DATABASE_NAME=dawarich\n      - DATABASE_USERNAME=dawarich\n      - DATABASE_PASSWORD=STRONG_PASSWORD\n      - SECRET_KEY_BASE=LONG_64_CHAR_SECRET_KEY\n      - MIN_MINUTES_SPENT_IN_CITY=60\n    ports:\n      - \"3000:3000\"\n    depends_on:\n      - dawarich_db\n    volumes:\n      - dawarich_public:\u002Fvar\u002Fapp\u002Fpublic\n  dawarich_sidekiq:\n    image: freikin\u002Fdawarich:latest\n    command: sidekiq\n    environment:\n      - DATABASE_HOST=dawarich_db\n      - DATABASE_NAME=dawarich\n      - DATABASE_USERNAME=dawarich\n      - DATABASE_PASSWORD=STRONG_PASSWORD\n      - SECRET_KEY_BASE=LONG_64_CHAR_SECRET_KEY\n    depends_on:\n      - dawarich_db\n      - dawarich_app\n  dawarich_db:\n    image: postgres:17-alpine\n    environment:\n      POSTGRES_USER: dawarich\n      POSTGRES_PASSWORD: STRONG_PASSWORD\n      POSTGRES_DB: dawarich\n    volumes:\n      - dawarich_db:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\nvolumes:\n  dawarich_public:\n  dawarich_db:\n```",{"title":75,"body":76},"Start the containers","Launch the stack with `docker compose up -d`. Docker downloads the images and starts the three containers. Verify everything is running with `docker compose ps` — all three services should show `Up` status.",{"title":78,"body":79},"Configure the reverse proxy and SSL","Point your domain `geo.your-domain.com` to the VPS IP, then configure a reverse proxy (Nginx or Caddy) to expose Dawarich over HTTPS. With Caddy, the configuration is minimal: `geo.your-domain.com { reverse_proxy localhost:3000 }`. Caddy automatically obtains and renews the Let's Encrypt certificate. With Nginx, use `certbot` to generate the certificate and configure a `server` block that proxies to `localhost:3000`.",{"title":81,"body":82},"Create the first administrator account","Open `https:\u002F\u002Fgeo.your-domain.com` in your browser and follow the registration wizard to create the administrator account. Choose a strong password: Dawarich potentially exposes several years of your movement history. Once logged in, explore the settings to configure your preferred geocoding provider.",{"title":84,"body":85},"Open only the required inbound ports","On your VPS firewall (or `ufw` on the server), allow only ports 80 and 443 from the outside. Port 3000 must never be exposed directly — only the reverse proxy accesses it internally. Verify with `ufw status` that the rule is in place before proceeding to import.",{"type":32,"title":87,"body":88},"Importing your history from Google Takeout","The Google Takeout import is the central step to recover your data before Google deletes it server-side.\n\n**Export from Google.** Go to `takeout.google.com`, uncheck all services and check only **Location History**. Choose JSON format (not KML) for a complete import into Dawarich. Google prepares a `.zip` archive sent by email or dropped in your Drive — depending on size, this can take several hours.\n\n**Locate the history file.** Once the archive is downloaded and unzipped, the history file is at `Takeout\u002FLocation History (Timeline)\u002FRecords.json`. This is the file you will import into Dawarich.\n\n**Import into Dawarich.** In the interface, go to **Imports**, click **New import**, select the `Records.json` file, choose the source type **Google Phone** and start the import. Depending on the archive size (several gigabytes for years of data), Sidekiq processing can take from a few minutes to several hours. Track progress in the **Background jobs** tab.",{"type":32,"title":90,"body":91},"Real-time tracking with OwnTracks or Overland","Once the past history is imported, configure real-time tracking so your phone sends its position directly to Dawarich, without intermediary.\n\n**OwnTracks** (iOS and Android) is an open source location tracking client. In the app settings, choose **HTTP** mode, enter the URL `https:\u002F\u002Fgeo.your-domain.com\u002Fapi\u002Fv1\u002Fowntracks\u002Fpoints` and add your Dawarich API key in the authentication headers. OwnTracks sends updates at configurable intervals.\n\n**Overland** (iOS) is a lightweight alternative designed for continuous battery-efficient tracking. In Dawarich, retrieve your Overland endpoint in **Settings → Integrations** and paste it into the Overland app on iPhone. The app automatically manages deferred sends when the network is unavailable.",{"type":93,"title":94,"body":95},"tip","Backups and updates","Your location data is worth years of digital life: back up the Docker volume `dawarich_db` regularly with `docker exec dawarich_db pg_dump -U dawarich dawarich > backup.sql`. To update Dawarich, run `docker compose pull && docker compose up -d` — database migration is automatic at startup. Check the `CHANGELOG.md` in the repository before any update: the project is active and some versions bring schema changes.",{"type":32,"title":97,"body":98},"Why a VPS with root access changes everything","Most shared hosting plans forbid Docker, root access and arbitrary network sockets. Dawarich requires all three: a container orchestrator, direct filesystem access for import storage, and the freedom to expose an HTTP port.\n\nA VPS with full root access, dedicated IPv4 and NVMe SSD gives you exactly what you need: the compute power to index several years of history, the bandwidth to receive continuous OwnTracks updates, and the persistence to never replay the import from a Google Takeout archive.\n\nWith ServOrbit, you launch a VPS on Ubuntu or Debian, get immediate root access, and Docker can be installed in under five minutes — the rest depends on your `docker-compose.yml` file, not a limiting interface.",{"type":32,"title":100,"body":101},"Going further","Dawarich integrates naturally with other tools in your self-hosted infrastructure. If you already store your photos on \u003Ca href=\"\u002Fblog\u002Fheberger-immich\">Immich\u003C\u002Fa>, the GPS coordinates of your images and your Dawarich history cover the same map. If you sync files between devices with \u003Ca href=\"\u002Fblog\u002Fheberger-syncthing\">Syncthing\u003C\u002Fa>, you can export GPX tracks from Dawarich and share them to any device. And if Docker is new to you, the guide \u003Ca href=\"\u002Fblog\u002Fdemarrer-avec-docker-vps\">Getting started with Docker on VPS\u003C\u002Fa> covers a clean installation on a fresh server. For budget tracking tools and other personal data apps, \u003Ca href=\"\u002Fblog\u002Fself-host-actual-budget-vps\">Actual Budget on VPS\u003C\u002Fa> follows the same sovereignty logic.","A VPS to store years of GPS history","Dawarich runs on any VPS with Docker, root access and NVMe SSD. No location data ever leaves your infrastructure.","See Cloud VPS plans","\u002Fvps-cloud",[107,122,136,156],{"id":108,"slug":109,"slugs":110,"title":113,"excerpt":114,"readTime":19,"views":15,"isPinned":16,"publishedAt":115,"category":116,"categories":117,"featuredImage":26,"bgImage":27,"posterImage":119,"relatedSolution":120},82,"host-immich-on-your-own-vps",{"fr":111,"en":109,"ar":112},"heberger-immich","استضافة-immich-على-خادمك-الافتراضي-الخاص-vps","Host Immich on Your Own VPS","Host Immich on your VPS: a self-hosted alternative to Google Photos with mobile backup, facial recognition and SSL via Docker. Includes v3 migration guide.","2026-03-30T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[118],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-immich-poster.svg",{"categorySlug":21,"appSlug":121},"immich",{"id":123,"slug":124,"slugs":125,"title":128,"excerpt":129,"readTime":130,"views":15,"isPinned":16,"publishedAt":131,"category":132,"categories":133,"featuredImage":26,"bgImage":27,"posterImage":135,"relatedSolution":26},89,"hosting-syncthing-on-your-own-vps",{"fr":126,"en":124,"ar":127},"heberger-syncthing","استضافة-syncthing-على-خادم-vps-الخاص-بك","Hosting Syncthing on your own VPS","Sync your files without a third-party cloud: deploy Syncthing on a VPS as a permanent relay node. Peer-to-peer self-hosting guide.",3,"2026-03-23T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[134],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-syncthing-poster.svg",{"id":137,"slug":138,"slugs":139,"title":142,"excerpt":143,"readTime":130,"views":15,"isPinned":16,"publishedAt":144,"category":145,"categories":151,"featuredImage":26,"bgImage":27,"posterImage":153,"relatedSolution":154},136,"installing-docker-on-a-vps-a-clean-base-for-your-apps",{"fr":140,"en":138,"ar":141},"demarrer-avec-docker-vps","تثبيت-docker-على-vps-قاعدة-نظيفة-لتطبيقاتك","Installing Docker on a VPS: A Clean Base for Your Apps","Set up a reliable Docker VPS: isolation, Compose, volumes, networking and best practices to deploy without improvising.","2026-02-10T00:00:00+00:00",{"id":146,"name":147,"slug":148,"color":149,"icon":150},4,"Development","developpement","bg-warning\u002F10 text-warning","dev",[152],{"id":146,"name":147,"slug":148,"color":149,"icon":150},"\u002Fblog\u002Fcovers\u002Fdemarrer-avec-docker-vps-poster.svg",{"categorySlug":150,"appSlug":155},"docker-starter",{"id":157,"slug":158,"slugs":159,"title":162,"excerpt":163,"readTime":146,"views":15,"isPinned":16,"publishedAt":164,"category":165,"categories":166,"featuredImage":26,"bgImage":27,"posterImage":168,"relatedSolution":169},173,"self-host-actual-budget-on-a-vps-your-private-ynab-alternative",{"fr":160,"en":158,"ar":161},"self-host-actual-budget-vps","استضافة-actual-budget-على-vps-بديل-ynab-الخاص-بك","Self-Host Actual Budget on a VPS: Your Private YNAB Alternative","Self-host Actual Budget on a VPS — an MIT-licensed, zero-based budgeting app with bank sync, multi-device access and end-to-end encrypted sync. No subscription.","2026-07-07T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[167],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fself-host-actual-budget-vps-poster.svg",{"categorySlug":170,"appSlug":171},"erp-business-management","actual-budget",1787661797459]