Skip to main content
Estimated time: 10 minutes

Prerequisites

  • GitHub account
  • Claude account on a Pro or Max plan
  • A domain name to point to your instance (technically optional but strongly recommended)

Step 1: Create instance

Create a instance using an Ubuntu image with at least 2 vCPUs and 4GB of RAM. I strongly recommend at least 8GB of RAM in order to run multiple parallel agents with no issues. I personally use 16GB of RAM and have never hit issues with my usage. Some Hetzner regions offer Cost-Optimized instance options that run on older hardware and these should generally be fine as Konduktor workflows are more limited by RAM than CPU. However, if you intend to use Konduktor on repos where tests, scripts, etc. use a lot of CPU, your usage profile may differ. A CX43 (8 CPU, 16GB RAM) for $14 (as of today) should be a great option for instance.

Step 2: Point a domain to the instance IP

This could be done later but doing it now saves us waiting time down the line. Create an A record on the domain you want to use for your Konduktor instance pointing to your Hetzner instance IP. If using Cloudflare, keep the Proxy status (cloud) off for now to Konduktor to issue a TLS certificate, and turn it back on post-installation.

Step 3: Basic setup

Once your instance is up, SSH into it:
ssh root@<your_instance_ip>
And then let’s create a user for Konduktor to use:
# set a password and store it
sudo adduser konduktor 

# add konduktor user to sudoers so we can install packages
sudo usermod -aG sudo konduktor

Step 4: Install prerequisites

Switch to your konduktor user:
su - konduktor
Git and GitHub setup Install gh following the Ubuntu install docs and login (gh auth login) using either username and password (full access) or a Personal Access Token.
We recommend you authenticate into the gh CLI using a fine-grained token that you can create from the GitHub Personal Tokens settings page.No account permissions are necessary. At a minimum, you’ll need the following repository permissions on all repos or the repos you want Konduktor to be able to access:
  • Contents (read and write)
  • Pull requests (read and write)
You might also choose to give other permissions that can be useful:
  • Issues (if you want Konduktor to be able to read and action on issues)
  • Workflows (if you want Konduktor to be able to edit CI)
  • Pages (if you’re using Konduktor with GitHub Pages)
  • Actions (if you want Konduktor to be able to inspect Actions runs)
Once logged into gh you can run gh auth setup-git if you’d like to use the same credentials for Git. It’s also recommended that you run the following to setup proper commit attribution to your GitHub user:
git config --global user.name "<github_username>"
git config --global user.name "<github_email>"
Claude Code setup Install Claude Code (code.claude.com/docs/en/quickstart) and then run claude to go through the authentication flow.

Step 5: Install Konduktor

Run:
curl -fsSL https://konduktor.yakko.dev/install.sh | bash
The script will ask you for server credentials, so you should set up a username and password right now (and store the password). It will also ask if you want to setup nginx and a domain and you should say yes to both. Input your domain from Step 2 and it should validate automatically. Then once the script is done running you can access your domain on a web browser and your Konduktor instance is ready to use. I strongly recommend you follow Step 6 though and configure a GitHub app. Otherwise go to Ship your first feature for a basic guide on how to start using Konduktor.

Step 6: Configure a GitHub app

Given that this is a self-hosted deploy, we can’t provide a GitHub app for you else we’d need to have a server we control in the middle to do auth. However, I strongly recommend you configure a GitHub app. It will take 5 minutes max, and it will unlock features like auto-fixing of CI failures and merge conflicts, task lifecycle automations, and more. The UI will walk you through configuring this.
If you’re using Cloudflare for DNS, you can turn the orange cloud on now :)