Skip to content

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.

  • 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:

Terminal window
$ curl -sSf https://get.vulcan-ci.io/vulcand | sh
$ vulcand --version
vulcand 0.1.0
/etc/vulcan/vulcand.yaml
listen: 0.0.0.0:8080
external_url: https://vulcan.example.com
database_url: postgres://vulcan@db.internal/vulcan

Run it under systemd:

/etc/systemd/system/vulcand.service
[Unit]
Description=Vulcan CI
After=network-online.target
[Service]
ExecStart=/usr/local/bin/vulcand --config /etc/vulcan/vulcand.yaml
Restart=on-failure
User=vulcan
[Install]
WantedBy=multi-user.target
Terminal window
$ 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.1

Configuration keys map to environment variables one-to-one, uppercased. Mount /var/lib/vulcan as a volume if you are not using object storage.

A Helm chart deploys the instance, migrations, and an ingress. PostgreSQL is not included — point the chart at your own.

Terminal window
$ 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-db

Create the initial admin account from the instance host:

Terminal window
$ vulcand bootstrap
one-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.

Terminal window
$ vulcan worker enroll --pool default --token $ENROLLMENT_TOKEN