Installation
A Vulcan CI instance is one binary — vulcand — plus PostgreSQL. Workers run separately, on any host that can reach the instance, and join afterwards.
Requirements
Section titled “Requirements”- Linux, x86_64 or arm64. macOS is supported for evaluation only.
- PostgreSQL 15 or newer, reachable from the instance.
- Outbound HTTPS to your git host for commit statuses and webhooks.
- Optional: S3-compatible object storage for build artifacts. Without it, artifacts are stored on the instance disk.
Install the binary and write a starter config:
$ curl -sSf https://get.vulcan-ci.io/vulcand | sh$ vulcand --versionvulcand 0.1.0listen: 0.0.0.0:8080external_url: https://vulcan.example.comdatabase_url: postgres://vulcan@db.internal/vulcanRun it under systemd:
[Unit]Description=Vulcan CIAfter=network-online.target
[Service]ExecStart=/usr/local/bin/vulcand --config /etc/vulcan/vulcand.yamlRestart=on-failureUser=vulcan
[Install]WantedBy=multi-user.targetDocker
Section titled “Docker”$ docker run -d --name vulcand \ -p 8080:8080 \ -e DATABASE_URL=postgres://vulcan@db.internal/vulcan \ -e EXTERNAL_URL=https://vulcan.example.com \ ghcr.io/vulcan-ci/vulcand:0.1Configuration keys map to environment variables one-to-one, uppercased. Mount /var/lib/vulcan as a volume if you are not using object storage.
Kubernetes
Section titled “Kubernetes”A Helm chart deploys the instance, migrations, and an ingress. PostgreSQL is not included — point the chart at your own.
$ helm repo add vulcan-ci https://charts.vulcan-ci.io$ helm install vulcan vulcan-ci/vulcand --version 0.1.0 \ --set externalUrl=https://vulcan.example.com \ --set database.secretName=vulcan-dbFirst sign-in
Section titled “First sign-in”Create the initial admin account from the instance host:
$ vulcand bootstrapone-time sign-in link: https://vulcan.example.com/bootstrap/9f3ka2… (expires in 15m)Sign in, create your organisation, then bring capacity online: create a pool, issue an enrollment token, and enrol your first worker.
$ vulcan worker enroll --pool default --token $ENROLLMENT_TOKEN