Awesome
LIPAS
prod | dev | ci | issues | dev-tasks | use-cases (finnish) | ideas (finnish)
LIPAS is a nationwide, public GIS service of Finnish sport facilities. More information here.
Tech stack
Webapp
Webapp is written in Clojure(script).
Backend
Webapp backend is a simple HTTP(s) service with endpoints for different tasks. Some endpoints require authentication. Authentication is implemented using HTTP-basic authentication and signed JWT-tokens.
Frontend
- re-frame Single Page Application
- material-ui components
Postgis database
Spatial PostGIS for master data storage.
Nginx
Web facing Nginx reverse proxy, ssl-termination.
Mapproxy
Mapproxy basemap proxy and cache.
ELK-stack
ELK (ElasticSearch, Logstash, Kibana) is used to provide webapp search funtionalities as well as data and monitoring information.
Old Lipas
All data flows also to old Lipas which exposes the data through Geoserver and legacy REST-Api.
REST-API
See Api-documentation here.
GeoServer
Geoserver publishing spatial data. See available layers here.
Dev-env setup
# Create env-file from template
cp .env.sample.sh .env.sh
# Fill in secrets
$EDITOR .env.sh
# 1. ALTERNATIVE: Run setup script
# This runs the clj app in a container also
./setup-dev.sh
# 2. ALTERNATIVE:
# Start proxy-local container
bb up
cd webapp
# Start repl
lein repl
user=> (reset)
# Start cljs build
npm i
npm run watch
Extra
Add following to your hosts
file to use same hostnames in both
docker and host while developing.
# Lipas dev
127.0.0.1 postgres
127.0.0.1 backend-dev
127.0.0.1 mapproxy
127.0.0.1 elasticsearch
127.0.0.1 kibana
127.0.0.1 logstash
127.0.0.1 proxy
Production build
Backend
docker compose run backend-build
# or
lein uberjar
See certs/README.md.
Frontend
docker compose run frontend-npm-deps
docker compose run frontend-build
# or without Docker
lein run -m shadow.cljs.devtools.cli release app
Apple Silicon considerations
Open Source Routing Machine currently has not an arm64 build. It is much faster than using the x86 image so consider building it yourself:
git clone https://github.com/Project-OSRM/osrm-backend.git
cd osrm-backend
docker build -t osrm-local --platform arm64 -f docker/Dockerfile .
Then you need to replace every usage of osrm/osrm-backend image with osrm-local, for example:
sed -i '.backup' s|osrm/osrm-backend|osrm-local|g docker-compose.yml
sed -i '.backup' s|osrm/osrm-backend|osrm-local|g osrm/README.md
Then see osrm/README.md to build the osrm files.
See https://github.com/Project-OSRM/osrm-backend/issues/6133
Backups
# Dump
docker exec -i lipas-postgres-1 pg_dump -U lipas -Fc > lipas.backup
# Restore
docker exec -i lipas-postgres-1 pg_restore -Fc < lipas.backup
# Rebuild ES index
docker compose run --rm backend-index-search