Skip to content

piotrnikel/CERES

Repository files navigation

Catalogue as a Service (CaaS)

A multi-tenant STAC-based geospatial metadata management platform built for CloudFerro infrastructure.

Overview

CaaS provides a complete solution for managing SpatioTemporal Asset Catalogs (STAC) with enterprise features including:

  • STAC 1.1.0 Compliant - Full support for Catalogs, Collections, and Items
  • Multi-tenant Architecture - Isolated data and configuration per tenant
  • S3 Ingestion - Import STAC items from S3-compatible storage (CloudFerro EODATA)
  • Advanced Search - CQL2 filtering with spatial and temporal queries
  • Access Control - Role-based permissions with CloudFerro IAM integration
  • Usage Quotas - Rate limiting and resource quotas per tenant

Tech Stack

Backend

  • Framework: FastAPI (Python 3.11+)
  • Database: PostgreSQL 15 with PostGIS
  • Search: OpenSearch 2.x
  • Cache: Redis 7
  • Auth: CloudFerro IAM (Keycloak)

Frontend

  • Framework: React 18 with TypeScript
  • Styling: Tailwind CSS (CloudFerro design system)
  • State: TanStack Query + Zustand
  • Build: Vite

Getting Started

Prerequisites

  • Docker and Docker Compose
  • Node.js 20+ (for frontend development)
  • Python 3.11+ (for backend development)

Quick Start

  1. Clone the repository:
cd "C:\Users\piotr\projects\Catalogue as a Service"
  1. Copy environment files:
cp backend/.env.example backend/.env
  1. Start all services:
docker-compose up -d
  1. Access the application:

Development Setup

Backend

cd backend
python -m venv venv
source venv/bin/activate  # or venv\Scripts\activate on Windows
pip install -e ".[dev]"

# Run migrations
alembic upgrade head

# Start development server
uvicorn app.main:app --reload

Frontend

cd frontend
npm install
npm run dev

Project Structure

Catalogue as a Service/
├── ARCHITECTURE.md          # Detailed architecture documentation
├── docker-compose.yml       # Docker Compose configuration
├── backend/
│   ├── app/
│   │   ├── api/            # API routes
│   │   │   └── v1/         # API version 1
│   │   ├── core/           # Configuration and security
│   │   ├── db/             # Database models and session
│   │   └── schemas/        # Pydantic schemas
│   │       └── stac/       # STAC-specific schemas
│   ├── alembic/            # Database migrations
│   └── pyproject.toml      # Python dependencies
├── frontend/
│   ├── src/
│   │   ├── api/            # API client
│   │   ├── components/     # React components
│   │   └── pages/          # Page components
│   └── package.json        # Node dependencies
└── infrastructure/
    └── init-db.sql         # Database initialization

API Endpoints

STAC Core

  • GET / - Landing page
  • GET /api/v1/conformance - Conformance classes

Catalogs

  • GET /api/v1/catalogs - List catalogs
  • POST /api/v1/catalogs - Create catalog
  • GET /api/v1/catalogs/{id} - Get catalog
  • PUT /api/v1/catalogs/{id} - Update catalog
  • DELETE /api/v1/catalogs/{id} - Delete catalog

Collections

  • GET /api/v1/collections - List collections
  • POST /api/v1/collections - Create collection
  • GET /api/v1/collections/{id} - Get collection
  • PUT /api/v1/collections/{id} - Update collection
  • DELETE /api/v1/collections/{id} - Delete collection

Items

  • GET /api/v1/collections/{id}/items - List items
  • POST /api/v1/collections/{id}/items - Create item
  • GET /api/v1/collections/{id}/items/{itemId} - Get item
  • PUT /api/v1/collections/{id}/items/{itemId} - Update item
  • DELETE /api/v1/collections/{id}/items/{itemId} - Delete item

Search

  • GET /api/v1/search - Search items (GET)
  • POST /api/v1/search - Search items (POST with CQL2)
  • GET /api/v1/search/queryables - Get queryable properties

Ingestion

  • GET /api/v1/ingestion/sources - List ingestion sources
  • POST /api/v1/ingestion/sources - Create ingestion source
  • GET /api/v1/ingestion/jobs - List ingestion jobs
  • POST /api/v1/ingestion/jobs - Start ingestion job

STAC Extensions

CaaS uses a custom caas: namespace for platform-specific fields:

  • caas:tenant_id - Tenant identifier
  • caas:region - CloudFerro region (WAW3-2, FRA1-2)
  • caas:visibility - Access level (public, organization, private)
  • caas:created_at - Creation timestamp
  • caas:updated_at - Last update timestamp

Configuration

Key environment variables:

Variable Description Default
DATABASE_URL PostgreSQL connection URL postgresql+asyncpg://caas:caas@localhost:5432/caas
OPENSEARCH_URL OpenSearch URL http://localhost:9200
REDIS_URL Redis URL redis://localhost:6379/0
KEYCLOAK_URL CloudFerro IAM URL https://iam.cloudferro.com
S3_ENDPOINT_URL S3-compatible endpoint https://s3.waw3-2.cloudferro.com

See backend/.env.example for all configuration options.

License

Proprietary - CloudFerro

Support

For support, contact CloudFerro support or open an issue in the project repository.

About

CERES platform

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published