feat: add container deploy path (Containerfile, self-provisioning entrypoint, Forgejo registry push)
This commit is contained in:
parent
fd847d035f
commit
50e5e444bc
5 changed files with 100 additions and 3 deletions
24
README.md
24
README.md
|
|
@ -6,11 +6,29 @@ A Rust implementation of the [Smol Mail](https://code.randogoth.com/randogoth/sm
|
|||
|
||||
The server never sees plaintext, sender identities or any private key. It learns only which mailbox an envelope is for, its size, and when it arrived.
|
||||
|
||||
The flake's main purpose is turnkey deployment on a NixOS host: import `nixosModules.default`, point it at a key, and `nixos-rebuild switch`.
|
||||
The quickest way to run it is the container image below. For a NixOS host, the flake also provides turnkey deployment as a special case: import `nixosModules.default`, point it at a key, and `nixos-rebuild switch`.
|
||||
|
||||
## Deploying with a container
|
||||
|
||||
Pull the published image and bring up a server in one command:
|
||||
|
||||
```
|
||||
podman run -d --name bunshin -p 1961:1961 -v bunshin-data:/data code.randogoth.com/randogoth/bunshin
|
||||
```
|
||||
|
||||
`docker` works the same way — the image is a standard OCI image either way. The entrypoint generates `/data/server.key` on first run if it's missing, then runs `serve` against `/data/server.key` and `/data/mail.db` on `0.0.0.0:1961`; `podman logs bunshin` prints the generated public key to publish to clients. A key already in the volume is left alone, so restarts and upgrades keep the same identity.
|
||||
|
||||
Pass your own arguments to run `keygen` or a customized `serve` instead of the default — they take the same flags as a bare-metal install, e.g. `podman run --rm -v bunshin-data:/data code.randogoth.com/randogoth/bunshin keygen --key /data/server.key --force`.
|
||||
|
||||
To build the image locally instead of pulling (same non-`rns` build as the release image, see the `Containerfile` header comment):
|
||||
|
||||
```
|
||||
podman build -t bunshin -f Containerfile .
|
||||
```
|
||||
|
||||
## Deploying on NixOS
|
||||
|
||||
Add bunshin as a flake input and import the module:
|
||||
For a NixOS host that already manages the rest of its config with Nix, import the module instead of running the container:
|
||||
|
||||
```nix
|
||||
{
|
||||
|
|
@ -34,7 +52,7 @@ Add bunshin as a flake input and import the module:
|
|||
}
|
||||
```
|
||||
|
||||
`services.bunshin` also takes `host`, `port`, `dataDir`, `maxEnvelope`, `quota`, `requestsQuota`, `retentionDays`, `requestsRetentionDays`, `maxTokens`, `rateConnections`, `rateSends`, `rateTokens`, `maxConnections` and `domains`; see `flake.nix` for defaults. The module renders a `systemd` unit that runs `bunshin serve` under `DynamicUser`; it does not generate a key.
|
||||
`services.bunshin` also takes `host`, `port`, `dataDir`, `maxEnvelope`, `quota`, `requestsQuota`, `retentionDays`, `requestsRetentionDays`, `maxTokens`, `rateConnections`, `rateSends`, `rateTokens`, `maxConnections` and `domains`; see `flake.nix` for defaults. The module renders a `systemd` unit that runs `bunshin serve` under `DynamicUser`; unlike the container entrypoint, it does not generate a key.
|
||||
|
||||
For the RNS carrier, build `packages.rns`, set `services.bunshin.package` to it, and enable `services.bunshin.rns` with its `keyFile`; see [RNS.md](RNS.md) for the protocol and the remaining options.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue