# PostGIS spatial stack for the trip planner. # # docker-compose up -d postgis # start the DB (schema.sql runs on first boot) # ./import.sh ~/trips/osm/nh.osm.pbf nh # import an OSM extract (one-shot osm2pgsql) # docker-compose up -d spatiald # start the query service on :5005 # # Composed for docker-compose v1 (3.8) AND v2 (the same file works with # `docker compose` once the v2 plugin is available): no healthchecks or # `depends_on` conditions — import.sh polls pg_isready itself, and spatiald # tolerates a not-yet-ready DB at boot. # # OSM_DIR (default ~/trips/osm) is where the PBF extracts live — outside the # dev tree. Export it to override. version: "3.8" services: postgis: image: postgis/postgis:16-3.4 container_name: trips-postgis environment: POSTGRES_DB: trips POSTGRES_USER: trips POSTGRES_PASSWORD: trips ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data # initdb scripts run in lexicographic order, once, on an empty volume - ./schema.sql:/docker-entrypoint-initdb.d/10-schema.sql:ro restart: unless-stopped # One-shot importer (also usable as: docker-compose run --rm importer # -- /data/.osm.pbf ...). import.sh does the same with a bare # `docker run`, since the PBF path varies per import. importer: image: iboates/osm2pgsql:latest entrypoint: osm2pgsql environment: PGPASSWORD: trips # the image build's --password flag forces a prompt command: >- /data/colombia.osm.pbf --host=postgis --port=5432 --database=trips --user=trips -k --slim --flat-nodes=/tmp/flat.nodes network_mode: "service:postgis" volumes: - ${OSM_DIR}:/data:ro # OSM_DIR is exported by import.sh (default ~/trips/osm) spatiald: build: . container_name: trips-spatiald environment: SPATIAL_DSN: "host=postgis port=5432 user=trips password=trips dbname=trips sslmode=disable" ports: - "5005:5005" depends_on: - postgis restart: unless-stopped volumes: pgdata: