GeoViable runs as a three-container Docker Compose stack: a PostGIS spatial database, a FastAPI backend with PDF generation and scheduled layer updates, and an Nginx server that hosts the React frontend and acts as a reverse proxy to the API. All inter-service communication happens over an internal bridge network — only Nginx exposes ports to your host machine.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/danizd/geoviable/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Install the following tools before you begin:| Tool | Minimum Version | Purpose |
|---|---|---|
| Docker | 24.0+ | Container runtime |
| Docker Compose | 2.20+ | Service orchestration |
| Node.js | 18.x LTS | Frontend build only |
| Git | — | Source control |
Container Overview
| Container | Image | Internal Port | Purpose |
|---|---|---|---|
geoviable-db | postgis/postgis:15-3.4 | 5432 | PostgreSQL + PostGIS spatial database |
geoviable-api | python:3.11-slim (custom) | 8000 | FastAPI + WeasyPrint + cron |
geoviable-web | public.ecr.aws/docker/library/nginx:1.25-alpine | 80 | Static files + reverse proxy |
geoviable-net bridge network. Only geoviable-web exposes ports to the host (3000:80). In the default local development compose file, geoviable-api also exposes port 8000 directly so you can reach the API docs and health endpoint without going through Nginx.
Setup Steps
Configure environment variables
Copy the example file and edit it with your preferred values. See the Environment Variables page for a full reference of every setting.
Build the React frontend
Nginx serves the frontend as compiled static files from
frontend/build/. The build must exist before the containers start — an empty build/ directory will cause Nginx to return 403 Forbidden.Start all services
Check container status
Up (or Up (healthy) for geoviable-db and geoviable-api once their health checks pass).Verify the installation
Once all containers are healthy, open the following URLs to confirm each service is running:
| Service | URL | Expected response |
|---|---|---|
| Frontend | http://localhost:3000 | GeoViable React application |
| API Docs | http://localhost:8000/docs | FastAPI Swagger UI |
| Health Check | http://localhost:8000/api/v1/health | {"status": "ok"} |
Load environmental data
On a fresh installation the PostGIS database has no environmental layers loaded. Analyses will run but return no spatial intersections until you load the data. Follow the Loading Data guide to populate all seven layers.
Useful Docker Commands
Stream logs in real time
Access the database directly
Rebuild a single service
Use this after changing backend Python code or the Dockerfile — Docker will only rebuildgeoviable-api and leave the database untouched:
Full reset
Frontend Rebuild Workflow
Because Nginx serves the compiledfrontend/build/ directory as read-only static files, changes to React source code are not reflected until you rebuild:
frontend/build/ directory is mounted as a volume.
Windows Notes
On Windows, usestart.bat to start the services instead of running docker compose directly.
Platform Notes
Docker Hub unreachable? Both the Nginx image (
geoviable-web) and the Python base image used in the backend Dockerfile are referenced via the AWS ECR Public mirror (public.ecr.aws/docker/library/). If Docker Hub is rate-limited or unreachable on your network, the images will be pulled from ECR Public automatically without any configuration change.