Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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.

Phase 6 is done: sites ride the instance's domain, TLS stays in front

9bea7f110ae780105f9c7c58024a3b67a86d7d7a · Keenan Nemetz · 17d ago · parent d3296cda

Phase 6 is done: sites ride the instance's domain, TLS stays in front

Custom domains and ACME are dropped as non-goals rather than deferred work. An
instance already owns one domain and terminates TLS in front of it, so every
repository's site is a subdomain of that domain and inherits the certificate
that already exists. `pages_domain` remains the only setting.

The operational requirement that falls out of it, documented in the README and
the sample config: the proxy must preserve the Host header, because Host is the
only thing that says which site a request is for.

README.md +18−3

@@ -18,7 +18,7 @@ See [docs/roadmap.md](docs/roadmap.md) for the phased implementation plan.
18 18
19 19 ## Status
20 20
21 **Phases 1–5 are implemented.** Vole is a working forge: writes go over SSH and are
21 **Phases 1–6 are implemented.** Vole is a working forge: writes go over SSH and are
22 22 authenticated by your key; reads are open.
23 23
24 24 Working today:
@@ -59,8 +59,7 @@ Working today:
59 59 - An instance ed25519 key generated at first boot (used for metadata signing in
60 60 Phase 7)
61 61
62 Not yet: custom site domains and their TLS certificates, workflow artifact uploads,
63 signature verification, LFS locking.
62 Not yet: workflow artifact uploads, signature verification, LFS locking.
64 63
65 64 ## Try it
66 65
@@ -244,6 +243,22 @@ there is no session for an anonymous reader to authenticate with, so it answers
244 243 exactly like its clone URL does. Visibility and the branch tip are re-read once a
245 244 second, so publishing or unpublishing a site takes effect within that window.
246 245
246 Sites are subdomains of the instance's own domain, so they ride the certificate you
247 already have. Terminate TLS in front of `http_addr` and make sure the proxy preserves
248 the `Host` header — `Host` is the only thing that says which site a request is for:
249
250 ```nginx
251 server {
252 listen 443 ssl;
253 server_name *.forge.example.com; # the forge and every site
254 location / {
255 proxy_set_header Host $host; # required: pages route on it
256 proxy_set_header X-Forwarded-Proto $scheme;
257 proxy_pass http://127.0.0.1:8080;
258 }
259 }
260 ```
261
247 262 ## Backup
248 263
249 264 Two things, and both are small: