Landing page: register/download/install/onboard; Gitea hosting in deploy docs
This commit is contained in:
@@ -47,7 +47,7 @@ Run `frxd` on loopback and terminate TLS with Caddy:
|
||||
caddy reverse-proxy --from relay.federatedsearch.org --to 127.0.0.1:7700
|
||||
```
|
||||
|
||||
Caddyfile equivalent (apex is the public front door, `ma.` the membership service, `relay.` the relay — all on one host):
|
||||
Caddyfile equivalent (apex is the public front door, `ma.` the membership service, `relay.` the relay, `git.` the code host — all on one host):
|
||||
|
||||
```
|
||||
federatedsearch.org {
|
||||
@@ -61,6 +61,10 @@ ma.federatedsearch.org {
|
||||
relay.federatedsearch.org {
|
||||
reverse_proxy 127.0.0.1:7700
|
||||
}
|
||||
|
||||
git.federatedsearch.org {
|
||||
reverse_proxy 127.0.0.1:3000
|
||||
}
|
||||
```
|
||||
|
||||
Relay command (peers and registry gated by the MA):
|
||||
@@ -112,6 +116,77 @@ frxd registry --dir /var/lib/frxd/registry serve --listen 127.0.0.1:7800
|
||||
|
||||
Put the same Caddy in front, or distribute `registry.json` out of band (it is signed, so the channel does not matter). The snapshot is versioned; nodes reject rollback and fail static during outages.
|
||||
|
||||
## Code hosting and downloads (Gitea)
|
||||
|
||||
The public source and release binaries live at `git.federatedsearch.org` (Gitea), so the
|
||||
download step on the membership page stays on infrastructure the federation operates.
|
||||
|
||||
One-time install on the server (root):
|
||||
|
||||
```
|
||||
VER=1.27.3
|
||||
curl -fsSLO https://dl.gitea.com/gitea/$VER/gitea-$VER-linux-amd64{,.sha256}
|
||||
sha256sum -c gitea-$VER-linux-amd64.sha256
|
||||
install -m 0755 gitea-$VER-linux-amd64 /usr/local/bin/gitea
|
||||
adduser --system --shell /bin/bash --gecos 'Gitea' --home /home/git --group git
|
||||
mkdir -p /var/lib/gitea/{custom,data,log} /etc/gitea && chown -R git:git /var/lib/gitea /etc/gitea
|
||||
```
|
||||
|
||||
`/etc/gitea/app.ini` essentials (rest defaults; secrets via `gitea generate secret`):
|
||||
|
||||
```ini
|
||||
WORK_PATH = /var/lib/gitea
|
||||
|
||||
[database]
|
||||
DB_TYPE = sqlite3
|
||||
PATH = /var/lib/gitea/data/gitea.db
|
||||
|
||||
[server]
|
||||
DOMAIN = git.federatedsearch.org
|
||||
SSH_DOMAIN = git.federatedsearch.org
|
||||
ROOT_URL = https://git.federatedsearch.org/
|
||||
HTTP_ADDR = 127.0.0.1
|
||||
HTTP_PORT = 3000
|
||||
|
||||
[security]
|
||||
INSTALL_LOCK = true
|
||||
|
||||
[service]
|
||||
DISABLE_REGISTRATION = true
|
||||
REQUIRE_SIGNIN_VIEW = false
|
||||
```
|
||||
|
||||
systemd unit (`User=git`, `ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini`,
|
||||
`WorkingDirectory=/var/lib/gitea`), then `gitea migrate --config /etc/gitea/app.ini` as the
|
||||
`git` user and `systemctl enable --now gitea`. Git-over-SSH uses the host sshd via the `git`
|
||||
user's Gitea-managed `authorized_keys`; HTTPS pushes can use an access token instead.
|
||||
|
||||
Admin bootstrap (as `git` user):
|
||||
|
||||
```
|
||||
gitea admin user create --admin --username <you> --email <you>@federatedsearch.org --random-password --config /etc/gitea/app.ini
|
||||
gitea admin user generate-access-token -u <you> -t bootstrap --scopes all --config /etc/gitea/app.ini
|
||||
```
|
||||
|
||||
The org is `frx`, the repo `frxd` → clone URL
|
||||
`https://git.federatedsearch.org/frx/frxd.git`. Membership stays closed (signup code);
|
||||
repo reads are public.
|
||||
|
||||
Publishing a release (from the checkout):
|
||||
|
||||
```
|
||||
git tag v0.1.0 && git push gitea v0.1.0
|
||||
# build static binaries (see next section), then attach via the API:
|
||||
curl -X POST https://git.federatedsearch.org/api/v1/repos/frx/frxd/releases \
|
||||
-H "Authorization: token <token>" -H 'content-type: application/json' \
|
||||
-d '{"tag_name":"v0.1.0","name":"v0.1.0"}'
|
||||
curl -X POST https://git.federatedsearch.org/api/v1/repos/frx/frxd/releases/<id>/assets?name=frxd-linux-amd64 \
|
||||
-H "Authorization: token <token>" -F attachment=@frxd-linux-amd64
|
||||
```
|
||||
|
||||
Asset URLs follow `/frx/frxd/releases/download/<tag>/<file>` — the membership page pins
|
||||
those. Bump the page when a release changes.
|
||||
|
||||
## Private networks and custom CAs
|
||||
|
||||
- `ca_cert = "/etc/ssl/private-ca.pem"` in `[node]`, or `--ca-cert` on the relay: adds a private/corporate root CA for relay and registry connections.
|
||||
@@ -125,7 +200,15 @@ rustup target add x86_64-unknown-linux-musl
|
||||
cargo build --release --target x86_64-unknown-linux-musl
|
||||
```
|
||||
|
||||
`[profile.release]` enables LTO and stripping. All dependencies are pure Rust, so the musl build has no system-library requirements.
|
||||
`[profile.release]` enables LTO and stripping. All dependencies are pure Rust, so the musl build has no system-library requirements. `ring` needs a musl C toolchain (`musl-tools`); without host sudo, build in a container instead:
|
||||
|
||||
```
|
||||
docker run --rm -v "$PWD":/src -w /src rust:1-slim-bookworm bash -c \
|
||||
"apt-get update -qq && apt-get install -y -qq musl-tools && rustup target add x86_64-unknown-linux-musl && cargo build --release --target x86_64-unknown-linux-musl"
|
||||
```
|
||||
|
||||
Binaries land in `target/x86_64-unknown-linux-musl/release/`; rename to
|
||||
`frxd-linux-amd64` / `frx-linux-amd64` for release assets, with `sha256sum` sidecar files.
|
||||
|
||||
## What TLS does and does not cover
|
||||
|
||||
|
||||
Reference in New Issue
Block a user