vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software: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/vole.toml +31
| @@ -0,0 +1,31 @@ | |||
| 1 | # The configuration the image starts with, and the file to copy and edit for a | ||
| 2 | # real deployment. Every setting is documented in docs/configuration.md. | ||
| 3 | |||
| 4 | data_dir = "/var/lib/vole/data" | ||
| 5 | |||
| 6 | # The web interface and anonymous clone. A container is reached through its | ||
| 7 | # published ports, so this listens on every address inside it; keep the published | ||
| 8 | # port on the host's loopback and let a TLS proxy be the only way in, or set | ||
| 9 | # https_addr below and publish 80 and 443 instead. | ||
| 10 | http_addr = "0.0.0.0:8080" | ||
| 11 | |||
| 12 | # Git over SSH, the only write transport. | ||
| 13 | ssh_addr = "0.0.0.0:2222" | ||
| 14 | |||
| 15 | # The address people reach this instance on. Passkey sign-in needs an https URL, | ||
| 16 | # so set it before anyone signs in: browsers bind a passkey to that address, and | ||
| 17 | # changing it later means re-enrolling everyone. | ||
| 18 | # public_url = "https://forge.example.com" | ||
| 19 | |||
| 20 | # Behind a proxy, name the header it sets with the client address. Without it the | ||
| 21 | # per-client clone limit and the sign-in rate limits see every request as coming | ||
| 22 | # from the proxy. | ||
| 23 | # git_http_client_ip_header = "X-Forwarded-For" | ||
| 24 | |||
| 25 | # Or let Vole obtain its own certificate, and put nothing in front. That needs | ||
| 26 | # ports 80 and 443 published, DNS pointing here, and public_url set. | ||
| 27 | # https_addr = ":443" | ||
| 28 | # http_addr = ":80" | ||
| 29 | # acme_email = "admin@example.com" | ||
| 30 | |||
| 31 | # instance_name = "Vole" | ||