Want to host your own Arbor infrastructure? It's easy to do, either for testing or to host more private communities.
We don't currently have pre-built binaries for the relay, but you can build it yourself very easily. You need a recent version of
git clone https://git.sr.ht/~whereswaldon/sprout-go cd sprout-go/cmd/relay go build
At the end of this, there will be an executable in the current working directory named
relay. For convenience, you can move this into your
$PATH like so:
sudo mv -v ./relay /usr/local/bin/
This will likely require sudo. You can also copy the relay anywhere else in your
The relay requires TLS certificates because it only serves TLS traffic right now. This may change in the future. You can easily create local certificates with
mkcert -install mkcert example.test localhost 127.0.0.1 ::1
The above will put two files in your current working directory. The private key ends with
key.pem, whereas the public key doesn't have the word key in its name.
For real certificates, you can acquire some pretty quickly by setting up an installation of
caddy for your domain. Caddy automatically provisions TLS certificates from Let's Encrypt, and you can just hand those to your relay. They do expire after 90 days, so you'll need to restart your relay periodically when taking this approach.
A relay is useless without at least one community. Your relay will keep all of its arbor data in a directory called a "grove", and we must provide a community in that directory for the relay to host. There are several ways to do this.
Before creating a community, we need to do two things:
mkdir grove(you can put this wherever you want).
forestCLI (required for two of the three options below).
git clone https://git.sr.ht/~whereswaldon/forest-go cd forest-go/cmd/forest go build sudo mv ./forest /usr/local/bin
If you already run sprig somewhere and you'd like to continue using the same communities and user identity that you already have in sprig, you can just copy them to your relay:
cp -R "$HOME/.config/sprig/grove" "grove"
This assumes that your new grove directory is in the current working directory.
If you want to keep your user account from sprig and use it to create a new community, simply do this:
identity=$(ls ~/.config/sprig/identities/ | head -n1) community=$(forest create community --as "~/.config/sprig/identities/$identity" --key "~/.config/sprig/keys/$identity" --name <name>) mv -v "~/.config/sprig/identities/$identity" "$community" grove/
<name> with the name of your new community. This assumes your new grove directory is in the current working directory.
If you want to create a completely new arbor identity and use that to start a community, you can do this:
identity=$(forest create identity --name <username>) community=$(forest create community --as "$identity" --name <name>) cp -v "$identity" grove/ mv -v "$community" grove/
This will leave your new identity and the corresponding private key in the current working directory, while also putting the necessary node files into the grove. You can save that identity and private key for later use, though sprig doesn't currently have an easy way to import these (you can change identities by manually editing the configuration though).
Once you have gotten TLS certificates and set up your grove, starting a relay is easy:
relay --certpath <tls-certificate-pem> --keypath <tls-key-pem> --grovepath <path-to-grove>
This will start a relay listening on
localhost:7777. You can change the listening IP and port with the
Often, if you're setting up a testing relay, you won't want to connect with your normal sprig application. This risks getting test data mixed into your real conversations, or even sending your test data to other users accidentally. Sprig has an easy feature to help with this. To start sprig with an entirely clean configuration, run it like this:
sprig --data-dir=$(mktemp -d)
You can specify any directory you want (so long as it isn't
~/.config/sprig) to ensure that you don't mix your normal sprig data and your test data.
Once sprig starts, specify
localhost:7777 as the relay address to connect to your local relay. If you set your relay up with a proper domain name, use that instead.
commit bc5691fbee23d4933ced1ba734db739aad833611 Author: Chris Waldon <email@example.com> Date: 2021-10-27T15:59:49-04:00 content: fix self hosting guide Signed-off-by: Chris Waldon <firstname.lastname@example.org>