Overview
Forgeyard brings application deployment, node management and operational visibility together in a self-hosted control plane.
Problem
Running applications across machines requires placement, routing and deployment management as well as the containers themselves.
Architecture
A Go server hosts the API and interface. Agents initiate mTLS connections to the server, receive the desired state for their node and reconcile it with Docker. The server manages DNS; Traefik routes application traffic and provides HTTPS.
- Browser
- Go control plane
- mTLS agent
- Docker / Traefik
- Applications
Engineering decisions
The server does not access Docker directly. Agents open outbound connections, so managed nodes do not need an inbound management port. Placement and DNS are handled centrally, while reconciliation happens on each node.
Challenges
Keeping the desired state aligned with containers on separate nodes involves handling disconnections, deployment changes and reported status.
Reliability & security
Agent communication uses mutual TLS. Secrets, certificate management and API protections are documented in the repository.
Testing
The repository includes Go tests and integration tests for agent and deployment behavior.