Deployment Guide
Concord runs on Linux edge nodes, servers, and embedded controllers.
Prerequisites
- Operating System: Linux kernel 5.10+ (cgroups v2, network namespaces).
- Architecture:
amd64,arm64,armv7, orriscv64. - Runtime: Root or
CAP_SYS_ADMINprivileges (required byruncfor container namespacing).
Installation
1. Download Pre-compiled Binary
# Example for Linux amd64:
curl -LO https://github.com/podomy/concord/releases/download/v1.0/concord-linux-amd64.zip
unzip concord-linux-amd64.zip
chmod +x concord-linux-amd64
sudo mv concord-linux-amd64 /usr/local/bin/concord
rm concord-linux-amd64.zip
2. Build from Source
go install github.com/podomy/concord@latest
Running Concord as a Systemd Service
Create /etc/systemd/system/concord.service:
[Unit]
Description=Concord Fleet Node
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/concord daemon
Restart=always
RestartSec=3
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable --now concord
Check status:
systemctl status concord
Cluster Trust & Certificate Authority (CA) Provisioning
All nodes in a Concord cluster authenticate each other via mutual TLS (mTLS). Every single node in the cluster must be provisioned with the exact same Root Certificate Authority (ca.crt and ca.key).
Before starting any Concord node for the first time, upload your cluster’s shared CA files to its config directory (defaults to ~/.config/concord/certs):
# Must be executed on EVERY node in the cluster:
mkdir -p ~/.config/concord/certs
cp /path/to/shared/ca.crt ~/.config/concord/certs/ca.crt
cp /path/to/shared/ca.key ~/.config/concord/certs/ca.key
chmod 600 ~/.config/concord/certs/ca.key
Custom Config Directory: Concord adheres to the XDG Base Directory specification. You can override the base configuration directory by setting the
XDG_CONFIG_HOMEenvironment variable (e.g.export XDG_CONFIG_HOME=/etcwill store certificates in/etc/concord/certs).
When Concord starts:
- It verifies that the shared
ca.crtandca.keyexist. - It automatically generates a unique node identity (
UUID) and mints a localnode.crtandnode.keysigned by the shared CA. - If pre-minted
node.crtandnode.keyalready exist alongsideca.crt, it reuses them directly.
Because every node is signed by the same Root CA, all nodes can mutually verify each other’s identity across the mesh.
Multi-Node Cluster Discovery
Concord nodes automatically discover each other over the local subnet using SWIM gossip (UDP port 17946).
When a node starts:
- It initializes its mutual TLS identity from
~/.config/concord/certs/. - It listens for gossip announcements from peer nodes on the local network.
- Once discovered, nodes establish an encrypted WireGuard mesh and sync journal events over mTLS.
No central master server, control plane, or external database is required.