Install with the one-line installer. It detects your OS/arch, downloads the release binary, verifies its SHA-256, and runs the binary's own exec-install — for the client that places it on PATH; for the server it sets up the systemd service (left stopped).

Server

Server (public Linux host; binds :80/:443, point your admin DNS at it). The systemd setup needs root, so install with sudo. It leaves the service stopped — configure the admin host, then start:

# 1. install the binary + set up the service (stopped). Needs root for systemd.
curl -fsSL https://seikan.okonomi.cloud/server/install.sh | sudo bash
# 2. set the admin host (+ options) — opens $EDITOR, or use --set for unattended installs
sudo seikan-server configure --set SEIKAN_ADMIN_HOST=admin.example.com
# 3. start it — prints the one-time admin API key
sudo seikan-server start

Steps 2–3 are scriptable: configure --set KEY=VALUE (repeatable) edits the env file with no editor. Add SEIKAN_ACME_STAGING=true while testing (avoids Let's Encrypt rate limits; the cert won't be browser-trusted). start refuses to run until the admin host is set. To upgrade later, re-run the installer — the binary is swapped, your config kept, and it restarts only if it was already running. To pin a version: curl -fsSL https://seikan.okonomi.cloud/server/install.sh | sudo bash -s -- --version 0.17.0.

Client

Client (macOS or Linux) — no root needed; install just places the binary; configure after:

curl -fsSL https://seikan.okonomi.cloud/client/install.sh | bash
seikan init --server admin.example.com --api-key sk_...

The installer installs the latest release. Update by re-running it; remove with seikan uninstall --purge.

Install manually

The installer is a thin wrapper — it downloads + checksum-verifies the binary, then runs the binary's own exec-install. With a binary already in hand (e.g. from the GitLab package registry, or make dist) you can call that convention directly:

V=0.17.0
P=https://gitlab.com/api/v4/projects/<ID>/packages/generic/seikan/$V
curl -fsSLO "$P/seikan-linux-amd64" -O "$P/seikan-linux-amd64.sha256"
echo "$(cut -d' ' -f1 seikan-linux-amd64.sha256)  seikan-linux-amd64" | sha256sum -c -

# The binary installs itself under its own filename — rename it before running.
mv seikan-linux-amd64 seikan && chmod +x seikan
./seikan exec-install                        # drop the client on your PATH (--bin <dir> to override)

sudo seikan-server install --admin-host admin.example.com   # set up the server service (stopped)
sudo seikan-server start                     # then start it

For the client, exec-install / exec-uninstall place/remove the binary. For the server, install (alias exec-install) sets up the systemd service; uninstall (alias exec-uninstall) removes it.

Run with Docker

Container images are not currently published — distribution moved off the Okonomi hub and Docker Hub publishing is on hold. Build both images locally with make docker-build (tags seikan/server:$VERSION and seikan/client:$VERSION), then use them with the reference Compose file at deploy/docker/compose.yaml. They are configured entirely through the SEIKAN_* environment variables (see the server- and client-reference tables); an empty value is treated as unset, so unset a variable to fall back to its default. The server image runs seikan-server run; the client image runs seikan connect.

make docker-build
docker compose -f deploy/docker/compose.yaml up -d server
docker compose -f deploy/docker/compose.yaml logs server   # one-time admin API key

Uninstall

Runs the binary's own exec-uninstall:

sudo seikan-server uninstall
seikan uninstall