Files
Xpress-rider/deploy/osrm/README.md
2026-08-12 10:50:45 +05:30

82 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Self-hosted OSRM
The app defaults to the FOSSGIS community routing server. That server is free
and keyless, but it is donation-funded infrastructure with a fair-use policy —
fine for development, **not** appropriate for a production delivery fleet.
Run your own before shipping.
Everything below is open source and costs nothing but the machine it runs on.
## 1. Pick a region
Nearle operates around Coimbatore, so the **southern zone** extract is enough —
it covers Tamil Nadu, Kerala, Karnataka, Andhra Pradesh and Telangana.
| Extract | Download size |
| --- | --- |
| `asia/india/southern-zone` | **0.52 GB** ← use this |
| `asia/india` (all of India) | 1.58 GB |
Using the regional extract rather than all-India cuts preprocessing time and
roughly a third of the memory.
## 2. Preprocess (one-off, ~15–40 min)
```sh
mkdir -p data && cd data
wget https://download.geofabrik.de/asia/india/southern-zone-latest.osm.pbf
REGION=southern-zone-latest
IMG=ghcr.io/project-osrm/osrm-backend:latest
docker run -t -v "$PWD:/data" $IMG osrm-extract -p /opt/car.lua /data/$REGION.osm.pbf
docker run -t -v "$PWD:/data" $IMG osrm-partition /data/$REGION.osrm
docker run -t -v "$PWD:/data" $IMG osrm-customize /data/$REGION.osrm
```
`osrm-extract` is the memory-hungry step — give the machine **~8 GB RAM** for
the southern zone. Serving afterwards needs far less (the compose file caps at
4 GB). If extraction is killed, that is OOM, not corruption: retry with more RAM
or a smaller extract.
Use `/opt/bicycle.lua` instead of `car.lua` if riders are mostly on two-wheelers
in pedestrianised areas — but `car.lua` is the right default for motorbike
delivery on Indian roads.
## 3. Serve
```sh
cd .. && docker compose up -d
curl "http://localhost:5000/route/v1/driving/76.9558,11.0168;76.9776,10.9984?overview=full"
```
A healthy response starts with `{"code":"Ok"`.
## 4. Point the app at it
```sh
flutter build apk --dart-define=OSRM_BASE_URL=https://osrm.your-domain.in
```
Put it behind TLS and restrict it to your own backend or app — OSRM has **no
authentication of its own**. An open OSRM instance is a free compute service for
anyone who finds it. If you already proxy other services, route this through the
same gateway.
## 5. Keep it current
OSM data drifts as roads change. Re-run step 2 monthly-ish and restart the
container. There is no live-update path in OSRM — reprocessing is the only way.
## Optional: also self-host tiles
The app's default tile source, [OpenFreeMap](https://openfreemap.org), is a free
public instance with no key and no request limits, so self-hosting tiles is not
required. If you ever want to, the options are OpenFreeMap's own self-host
instructions or serving a [Protomaps](https://protomaps.com) `.pmtiles` extract
from the MinIO instance this project already uses. Then:
```sh
--dart-define=MAP_STYLE_URL=https://tiles.your-domain.in/styles/liberty
```