Exclude Docker/compose/CI files from builder stage context to avoid unnecessary cache invalidation. Update Dockerfile comments for Podman compatibility. Remove package dependency from build target.
English | 中文 | 日本語 | Tiếng Việt
IoT DC3 is a fully open-source, distributed Internet of Things (IoT) platform built on Spring Cloud.
It accelerates IoT solution delivery and simplifies full-lifecycle device management with a comprehensive architecture for robust, production-ready IoT systems.
It is AI-ready, enabling seamless integration of intelligent connectivity, automation, and data-driven operations.
All components and code are open-source, ensuring transparency, flexibility, and community-driven innovation.
1 Architecture
The architecture is designed for end-to-end IoT capabilities across device connectivity, data services, operational management, and extensible application integration.
- Driver Layer: Provides SDKs for rapid driver development and seamless connectivity to physical devices through standard or proprietary protocols. This layer handles southbound data acquisition and command execution;
- Data Layer: Supports reliable collection, storage, and retrieval of device data, exposing robust interfaces for real-time and historical data services;
- Management Layer: Serves as the core hub for distributed microservice collaboration, including service registration, device/driver management, command orchestration, and centralized configuration governance;
- Application Layer: Enables data openness, scheduling, alarms, messaging, logging, third-party integrations, and AI-enhanced automation scenarios.
2 Objectives
- Scalability: Supports horizontal scaling with Spring Cloud for distributed, high-throughput IoT workloads;
- Resilience: Minimizes single-point-of-failure risk with interchangeable service nodes and fault-tolerant design;
- Performance: Handles large-scale device access and telemetry workloads for demanding IoT scenarios;
- Extensibility: Accelerates integration of new protocols and custom drivers through SDK and service registration;
- Deployment Flexibility: Runs across private cloud, public cloud, and edge environments with Java compatibility;
- Operational Efficiency: Streamlines onboarding, registration, and permission validation for devices and services;
- Security and Multi-Tenancy: Enforces encrypted communication, namespace isolation, and tenant-level separation;
- Cloud-Native Delivery: Optimized for Kubernetes and containerized with Docker for consistent deployments;
- AI-Ready Evolution: Enables integration of intelligent automation and data-driven operational workflows.
3 Development
3.1 Startup Dependencies
Choose one
This base stack starts PostgreSQL and RabbitMQ. If you need a database SQL script, connect directly to the started database in the container for export.
# Global access with standard container registry service
podman compose -f dc3/docker-compose-db.yml up -d
# Optimized registry service for users in mainland China
DC3_IMAGE_REGISTRY=registry.cn-beijing.aliyuncs.com/dc3 podman compose -f dc3/docker-compose-db.yml up -d
Optional helper targets:
make dev-db
make dev-optional
make dev
make dev-all
Use REGISTRY=domestic when you want the mainland China image registry variants. Backward-compatible aliases
REGISTRY=aliyun and REGISTRY=cn still work:
make dev-db REGISTRY=domestic
make dev-all REGISTRY=domestic
make app-all REGISTRY=aliyun
make compose-up STACK=grafana REGISTRY=cn
make compose-logs STACK=dev REGISTRY=global
Docker Compose environment overrides
Copy the example file before changing any published ports, image tags, or observability settings:
cp .env.example .env
For the difference between root .env and dc3/env/dev.env(.sh), see
dc3/doc/ENVIRONMENT.md.
The root .env is used by Compose only for variables referenced by Compose files, such as image registry, image tag,
published ports, logging options, and optional observability settings. Local source-run Java processes should use
dc3/env/dev.env or dc3/env/dev.env.sh. Agentic providers are normally stored in the database; configure
AGENTIC_FALLBACK_OPENAI_BASE_URL, AGENTIC_FALLBACK_OPENAI_API_KEY, and AGENTIC_FALLBACK_OPENAI_MODEL only as
fallback values for the process or container.
3.2 Preparation
source dc3/env/dev.env.sh
mvn -s .mvn/settings.xml clean package
Module Overview: See
dc3/doc/MODULES.mdfor the full module dependency map and runtime flow diagram.
Local Dev Guide: See
dc3/doc/QUICKSTART.mdfor a one-stop local setup workflow.
Troubleshooting: See
dc3/doc/TROUBLESHOOTING.mdfor common build/runtime issues and resolutions.
3.3 Start Services
Start in order
# Gateway
java -jar dc3-gateway/target/dc3-gateway.jar
# Auth Center
java -jar dc3-center/dc3-center-auth/target/dc3-center-auth.jar
# Data Center
java -jar dc3-center/dc3-center-data/target/dc3-center-data.jar
# Manager Center
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
# Agentic Center
java -jar dc3-center/dc3-center-agentic/target/dc3-center-agentic.jar
# Virtual Driver
java -jar dc3-driver/dc3-driver-virtual/target/dc3-driver-virtual.jar
# Other driver: Listening Virtual Driver, Modbus TCP Driver, MQTT Driver, OPC DA Driver, OPC UA Driver, Siemens S7 Driver
4 Technology Stack
5 Contribution
- Branch Creation: Start by creating a new branch from the
mainbranch. Ensure that themainbranch is up-to-date before branching out; - Branch Naming: Follow the naming convention for the new branch:
feature/your_name/feature_description. For example:feature/pnoker/mqtt_driver; - Code and Documentation: Make your changes to the code or documentation on the new branch. Once done, commit your changes;
- Pull Request: Submit a
Pull Request(PR) to merge your changes into thedevelopbranch. Your PR will be reviewed and merged by the maintainers.
6 License
The IoT DC3 open-source platform is licensed under the AGPL 3.0 License.
See LICENSE.txt for the repository license notice and commercial licensing clarification.
