vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0:2222/vole.git
A free and open-source forge that lives in your Git repo.
Run the server as one container with one volume
b86148d17f5c1b62ca437684b221a56369dd6493 · Keenan Nemetz · 3d ago · parent 04e063ca
Run the server as one container with one volume Vole is one process with its own SSH listener, so it needs no sshd in the image: a published 2222 for Git, a published 8080 for the web, and a volume holding the whole instance. An image cannot install at run time, so the entrypoint runs `vole admin init` first. That command is idempotent, and the same VOLE_CONFIG that serves also makes `docker run <image> admin account list` work. The compose file publishes 8080 on loopback, for the TLS proxy most container hosts already run, and health checks /healthz, which answers 200 there and does not under ACME. CI runners stay outside: they execute repository code and need a real OCI runtime on the host.
deploy/docker/entrypoint.sh +15
| @@ -0,0 +1,15 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | # Entrypoint for the Vole container. | ||
| 3 | # | ||
| 4 | # A package installs an instance and then starts it. An image cannot install at | ||
| 5 | # run time, so the first process does the part that has to happen once: creating | ||
| 6 | # the database and the repository tree the configuration names. `vole admin init` | ||
| 7 | # is idempotent, so running it on every start changes nothing after the first. | ||
| 8 | set -eu | ||
| 9 | |||
| 10 | vole admin init --config "$VOLE_CONFIG" >/dev/null | ||
| 11 | |||
| 12 | # `docker run <image> admin account list` runs that command instead of the | ||
| 13 | # server, which is how accounts, repositories, and backups are made in a | ||
| 14 | # container. | ||
| 15 | exec vole "$@" | ||