• [ANN] Running a real Gemini capsule on Alpine LXC + Agate - notes and config

    From Gabx@gabx@victor.virebent to comp.infosystems.gemini on Mon May 18 01:36:02 2026
    From Newsgroup: comp.infosystems.gemini

    Gemini url for virebent.art is out ! :)
    (gemini://virebent.art)

    For a while, but until recently it was served by gmnisrv bolted onto an
    existing container that was doing other things.

    I finally separated it into a dedicated LXC container running Alpine OS
    with Agate as the server.

    Notes below for anyone doing the same.

    ---

    Setup: Alpine Linux 3.22 unprivileged LXC on Proxmox, ~50MB RAM idle.
    Server: Agate 3.3.x (https://github.com/mbrubeck/agate),
    single static binary,
    no dependencies, serves text/gemini and static files from a
    directory tree.
    Agate handles TLS natively with its own self-signed certificate and
    TOFU model,

    no Certbot, no CA interaction, no renewal cron.
    First connection records the
    fingerprint,

    subsequent connections verify it.

    Exactly how Gemini is supposed to work.

    Configuration is one command:

    agate --content /var/gemini \
    --hostname virebent.art \
    --addr 0.0.0.0:1965 \
    --log-ip

    Content lives in /var/gemini/ as plain .gmi files. Subdirectories map to
    paths directly. No templating, no build step, no pipeline. Edit a file,
    it is live.

    The container exposes port 1965 through the Proxmox host NAT.

    Resource cost: negligible. The Alpine base image is ~8MB. Agate binary
    is ~6MB.
    Total container disk: under 200MB including content.RAM:45-55MBunderload.
    This is the right size for a protocol that serves text files.

    Capsule is open, no auth, no rate limiting.

    Gemini's design makes abuse essentially impossible rCo no forms, no POST,
    no cookies, no JS. The threat model for a static capsule is just disk
    space and bandwidth, both trivially
    bounded.

    For anyone setting this up:
    Agate is the easiest path. Single binary, TOFU
    cert generated on first run,
    content directory is the only config that matters.

    The full setup from fresh Alpine container to serving .gmi files is under
    fifteen minutes.

    Happy Gemini !!!

    --
    Gab Virebent
    gemini://virebent.art
    gemini://contact.virebent.art
    --- Synchronet 3.22a-Linux NewsLink 1.2