Package Managers and Binaries
Use this page for non-container installs and manual binary downloads.
Runtime tools
Container images already include these tools. Non-container installs must provide them on the host.
| Host role | Required tools |
|---|---|
| Controller | CA certificates, git. |
| Agent | git, Docker CLI, Docker Buildx plugin, Docker Compose plugin, access to the Docker daemon. |
Linux packages and archives install Composia binaries and optional systemd unit files. They do not install Docker, Docker Compose, or Git for you.
Debian and Ubuntu
Add the Forgejo APT repository:
sudo install -d -m 0755 /etc/apt/keyrings
sudo curl https://forgejo.alexma.top/api/packages/alexma233/debian/repository.key \
-o /etc/apt/keyrings/composia.asc
echo "deb [signed-by=/etc/apt/keyrings/composia.asc] https://forgejo.alexma.top/api/packages/alexma233/debian stable main" \
| sudo tee /etc/apt/sources.list.d/composia.list
sudo apt update
sudo apt install composiaYou can also download the .deb package from the Releases page and install it with your package manager.
Verify:
composia --versionSystem services
Linux packages install inactive systemd units for the controller and agent. The units are not enabled or started automatically.
The packaged units use the default config paths:
| Service | Config path |
|---|---|
composia-controller.service | /etc/composia/controller/config.yaml |
composia-agent.service | /etc/composia/agent/config.yaml |
The packaged units use the default config paths, run as root as shipped, and do not create config files, data directories, or Git repositories for you. Bootstrap them before enabling services:
sudo install -d -m 0755 /etc/composia/controller /etc/composia/agent
sudo install -d -m 0750 \
/var/lib/composia/controller/repo \
/var/lib/composia/controller/state \
/var/lib/composia/controller/logs \
/var/lib/composia/agent/repo \
/var/lib/composia/agent/state
sudo chown -R root:root /etc/composia /var/lib/composia
sudo git -C /var/lib/composia/controller/repo init
sudo git -C /var/lib/composia/agent/repo initUse matching paths in the two config files:
controller:
repo_dir: "/var/lib/composia/controller/repo"
state_dir: "/var/lib/composia/controller/state"
log_dir: "/var/lib/composia/controller/logs"agent:
repo_dir: "/var/lib/composia/agent/repo"
state_dir: "/var/lib/composia/agent/state"Verify ownership, write access, and Git initialization:
stat -c '%U:%G %a %n' \
/var/lib/composia/controller/repo \
/var/lib/composia/controller/state \
/var/lib/composia/controller/logs \
/var/lib/composia/agent/repo \
/var/lib/composia/agent/state
sudo test -w /var/lib/composia/controller/repo
sudo test -w /var/lib/composia/agent/repo
sudo git -C /var/lib/composia/controller/repo rev-parse --is-inside-work-tree
sudo git -C /var/lib/composia/agent/repo rev-parse --is-inside-work-treeIf you add a systemd drop-in with User=, chown these paths to that service user instead.
After creating the config files, enable the services explicitly:
sudo systemctl enable --now composia-controller.service
sudo systemctl enable --now composia-agent.serviceLinux archives include the same unit files under packaging/systemd/. If you install archive binaries under /usr/local/bin, edit the unit ExecStart paths before enabling them.