Skip to content

ecmwf/open-ecpds

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,467 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenECPDS

Our mission with OpenECPDS is to keep data moving.
Inspired by operational excellence. Powered by open-source innovation.
Acquire from anywhere. Deliver everywhere. Connect with confidence. Share without limits.


OpenECPDS is a mature, production-grade data management platform originally developed at ECMWF and now open-sourced to encourage collaboration. It delivers three strategic services from a single system:

Service Description
Data Acquisition Automatic discovery and retrieval of data from remote providers
Data Dissemination Automatic distribution of data products to remote sites
Data Portal Pull/push access initiated by remote sites, with real-time monitoring

Built on container technologies, it scales from a laptop to hundreds of systems managing petabytes of data. It supports a wide range of protocols (FTP, SFTP, HTTP/S, S3, GCS, Azure Blob, MQTT/WIS2, …) and integrates with object storage, MQTT brokers, and Kubernetes.


πŸš€ Try It Now β€” No Build Required

Experience the full OpenECPDS stack in a single command. The standalone image bundles MariaDB, Master, Data Mover, and Monitor β€” everything pre-configured and ready to go.

Requirements: 4 GB RAM and 6 GB free disk recommended. See System Requirements for details.

docker run -d \
  --name standalone \
  -v $(pwd)/ecpds-data:/data \
  -p 7443:7443 \
  -p 7022:7022 \
  -p 8443:8443 \
  -p 8883:8883 \
  ghcr.io/ecmwf/open-ecpds/standalone:latest

The database initialises automatically on first start. The /data volume persists everything across restarts.

Note: The container uses a self-signed TLS certificate β€” accept the browser security warning on first visit.

Access

Service URL Credentials
Monitoring UI https://localhost:8443 admin / admin2021 Β· monitor / monitor2021
Data Portal (HTTPS) https://localhost:7443 test / test2021
Data Portal (S3) https://localhost:7443/s3 test / test2021
Data Portal (SFTP) sftp://localhost:7022 test / test2021
MQTTS broker mqtts://localhost:8883 test / test2021

Exposed ports

Port Service
7443 Data Mover β€” HTTPS portal
7022 Data Mover β€” SFTP
8883 Data Mover β€” MQTTS (MQTT over TLS)
8443 Monitor β€” HTTPS UI
9640 Master β€” ECpds CLI

Note on FTP: OpenECPDS fully supports FTP in production deployments. However, FTP passive mode (PASV) is not compatible with Docker port mapping β€” the server advertises its internal container address for data connections, which external clients cannot reach. For that reason, FTP is disabled in this standalone image. Use SFTP (port 7022) as a drop-in alternative for file transfers in Docker.

Testing the protocols

All examples below use the pre-configured test / test2021 account. The container uses a self-signed certificate β€” pass the appropriate insecure/skip-verify flag for each tool.

S3 β€” using AWS CLI:

aws s3 ls s3:// \
  --endpoint-url https://localhost:7443/s3 \
  --no-verify-ssl \
  --no-sign-request \
  --request-payer \
  # or with credentials:
aws configure set aws_access_key_id test
aws configure set aws_secret_access_key test2021
aws s3 ls s3:// --endpoint-url https://localhost:7443/s3 --no-verify-ssl

Or with rclone:

rclone lsd :s3: \
  --s3-provider=Other \
  --s3-endpoint=https://localhost:7443/s3 \
  --s3-access-key-id=test \
  --s3-secret-access-key=test2021 \
  --no-check-certificate

SFTP β€” using the sftp command-line client:

sftp -P 7022 -o StrictHostKeyChecking=no test@localhost
# Password: test2021

MQTTS β€” The broker uses TLS with a self-signed certificate.

Using mqttx CLI (recommended β€” supports true --insecure):

mqttx sub \
  -h localhost -p 8883 \
  -l mqtts \
  -u test -P test2021 \
  --insecure \
  -t '#'

Or using Mosquitto β€” grab the cert first via openssl (no container access needed):

# Fetch the self-signed cert directly from the broker
openssl s_client -connect localhost:8883 </dev/null 2>/dev/null \
  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/ecpds.pem

# Subscribe (--insecure skips hostname verification)
mosquitto_sub \
  --host localhost --port 8883 \
  --username test --pw test2021 \
  --cafile /tmp/ecpds.pem \
  --insecure \
  --topic '#' -v

Logs

# All services (supervisord output)
docker logs -f standalone

# Individual service logs
docker exec standalone tail -f /data/log/master/master.log
docker exec standalone tail -f /data/log/mover/mover.log
docker exec standalone tail -f /data/log/monitor/monitor.log

Note: The standalone image runs with DEBUG logging enabled by default. This produces verbose output that is useful for exploring how OpenECPDS processes transfers, connects to data movers, and handles incoming requests. In a production deployment the log level can be controlled via the LOG_LEVEL environment variable (e.g. LOG_LEVEL=warn).


πŸ“– Documentation

Full documentation is published at ecmwf.github.io/open-ecpds.

Section Description
Getting Started Requirements, installation, first run, IDE setup
Architecture Components, failover, data transfer lifecycle, continental data movers
Deployment Kubernetes, physical infrastructure, container registry, releasing
Concepts Entities, protocols, object storage, destination/host/web-user options, additional features
Use Cases CLI tool, acquisition, dissemination, data portal, data users
Transfer Modules FTP, FTPS, SFTP, HTTP/S, S3, GCS, Azure Blob, ECauth, Portal, Test
Host Directory Acquisition, dissemination, replication, source, backup, proxy scripts
Notifications (MQTT) Real-time dissemination notifications, automated MQTT acquisition, WMO WIS2
Monitoring Transfer network statistics, per-connection TCP socket metrics
Event Logging PRS, RET, UPH, INH, ERR, CPY, DEA event categories and field reference
REST API REST API reference (v1)
API Reference JavaDocs
Global Reach 1,000+ destinations across 80+ countries
Glossary Key terms and concepts
Changelog Release notes
Contributing How to contribute

πŸ›  Going Further β€” Build from Source

To build the platform from source and develop against it, you need Docker (with the default socket enabled). Tested on Linux, macOS (Intel/Apple Silicon), and Windows WSL 2.

Run make help at any time to list all available targets.

1 β€” Outside the development container

# Build the development container image, start it, and open a shell inside it
make dev

2 β€” Inside the development container

# Compile Java sources, build RPM packages, and create Docker images
make build

# Start all OpenECPDS services
cd run/bin/ecpds && make up

The monitoring UI is then available at https://localhost:3443 and the data portal at https://localhost:4443.

See Getting Started for the full walkthrough, including log inspection, stopping services, IDE setup, and Kubernetes deployment.

Building the standalone image locally

# Inside the development container, after 'make build':
make build-standalone

This stages the RPMs into docker/ecpds/standalone/ and builds the ecpds/standalone:<tag> image locally.


πŸ“œ License

Copyright 2022–2026 ECMWF. Licensed under the Apache License 2.0.

About

OpenECPDS boosts the efficiency and productivity of data services by using proven and innovative technologies. It offers a portable, adaptable application for diverse environments, with a user-friendly tool for managing data acquisition, dissemination with push/pull mechanisms, and a notification system, all using standard protocols.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages