⚠️ Disclaimer: MVP Phase While the DisSModel ecosystem is steadily growing, this platform is currently a Minimum Viable Product (MVP). Security hardening and extreme performance efficiency are not the primary focus at this stage of development. Please use caution if deploying in production environments.
Scalable execution platform for DisSModel (Distributed Spatial Simulation Model).
An integrated environment for developing and running geospatial models, featuring JupyterLab, a REST API, and distributed workers.
- ✅ Local server (desktop/laptop)
- ✅ On-premise cluster (INPE, universities)
- ✅ Private cloud (OpenStack, etc.)
- ✅ Public cloud (AWS, GCP, Azure) — optional
- Docker and Docker Compose installed
- 8 GB+ RAM recommended
- 20 GB+ free disk space
# 1. Clone the repository
git clone https://github.com/LambdaGeo/dissmodel-platform.git
cd dissmodel-platform
# 2. Configure environment variables
cp .env.example .env
# 3. Start the platform
docker compose up --build
# 4. Access services
# JupyterLab: http://localhost:8888
# API Docs: http://localhost:8000/docs
# MinIO: http://localhost:9001docker compose downdocker compose down -v # Removes volumes (use with caution!)┌─────────────────────────────────────────────────────────────────┐
│ DISSMODEL PLATFORM │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [Researcher] → Browser → JupyterLab (Container) │
│ │ │
│ ├── Direct Python (imports) │
│ └── REST API (heavy jobs) │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SERVER / DOCKER HOST │ │
│ │ │ │
│ │ 🟦 Jupyter 🟩 API 🟥 Worker 🗄️ MinIO 🔄 Redis │ │
│ │ (Frontend) (Gateway) (Processing) (Storage) (Queue) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
| Service | Port | Description |
|---|---|---|
| JupyterLab | 8888 | Python development environment |
| API Gateway | 8000 | FastAPI for job submission |
| Worker | — | Background processing (scalable) |
| MinIO | 9000/9001 | S3-compatible object storage |
| Redis | 6379 | Message queue and cache |
- Architecture — Technical details and design decisions
- Deployment — How to deploy in different environments
- User Guide — For researchers
from dissmodel.core import Environment
from dissmodel.geo.raster import RasterBackend
# Load data
backend = RasterBackend.from_file('/data/inputs/dem.tif')
# Configure and run model
env = Environment(end_time=100)
model = FloodModel(backend=backend, sea_level=0.05)
results = env.run()
# Visualise
model.display()import requests
payload = {
"model_name": "FloodModel",
"input_dataset": "dem.tif",
"parameters": {"sea_level": 0.05, "steps": 1000}
}
response = requests.post(
"http://api:8000/submit_job",
json=payload
)
job_id = response.json()['job_id']Copy .env.example to .env and adjust as needed:
# MinIO Credentials
MINIO_ROOT_USER=user
MINIO_ROOT_PASSWORD=user_password
# DisSModel Config
DISSMODEL_LOG_LEVEL=INFO
DISSMODEL_CLOUD=false# Scale up to 5 workers
docker compose up --scale worker=5- Fork the repository
- Create a branch (
git checkout -b feature/new-feature) - Commit your changes (
git commit -m 'Add new feature') - Push to the branch (
git push origin feature/new-feature) - Open a Pull Request
See docs/developer-guide.md for more details.
MIT License — see LICENSE
- DisSModel — Core modelling library
- Jupyter Project — Development environment
- MinIO — S3-compatible object storage
- Pangeo — Inspiration for cloud-native architecture
- Organisation: LambdaGeo / INPE
- Issues: https://github.com/LambdaGeo/dissmodel-platform/issues
- Discussions: https://github.com/LambdaGeo/dissmodel-platform/discussions