| Filename | Latest commit message | Latest commit date |
|---|---|---|
The oauth map key is validated against a fixed enum, and the authentik app allows the strict redirect URI ?provider=oidc - so the env prefix becomes HISTER__SERVER__OAUTH__OIDC__*. Agent: pi |
||
| defaults/main | ||
| meta | ||
| tasks | ||
| .gitignore | ||
| README.md | ||
ansible-roles-hister
Role for deploying Hister — a private search engine that indexes visited pages and files, with web UI, CLI and a built-in MCP server — under rootless Podman with PostgreSQL.
Hister is authored by asciimoo (AGPLv3):
- Upstream: https://github.com/asciimoo/hister
- Mirror: https://git.boxcar.sh/mirrors/hister
- Image:
ghcr.io/asciimoo/hister, digest-pinned to the v0.20.0 (2026-09-24) multi-arch index; bump by replacinghister_image_digestindefaults/main/main.yml
Task Configuration
Deployment Example
- name: Setup proxy and service
hosts: somehost
become: true
roles:
- role: hister
- role: caddy
caddy_sites:
- name: hister
url: hister.boxcar.sh
dns: cloudflare
srv: 4433
log: true
Host loopback ports (defaults): 127.0.0.1:4433 (web), 127.0.0.1:5442
(postgres). The server talks to postgres over pod-local loopback; the DSN is
built from hister_database_pass (vault).
Required variables (vault)
hister_database_pass— postgres passwordhister_oidc_client_id/hister_oidc_client_secret/hister_oidc_configuration_url— authentik app "hister"
OAuth discovery uses configuration_url; the authentik app must allow the
redirect URI https://<base_url>/api/oauth/callback?provider=oidc (the
provider name comes from the HISTER__SERVER__OAUTH__OIDC__* env prefix). server.oauth_only is enabled, so password login is disabled and
SSO is required for the UI; token auth (API/MCP) is unaffected.
Configuration is environment-based (HISTER__<SECTION>__<KEY> maps to the
config path, e.g. HISTER__SERVER__DATABASE); add overrides via
hister_deploy_env in group_vars.
User management (multi-user mode)
app.user_handling is enabled. Manage users from inside the container:
sudo -iu <service-user> podman exec hister-server /hister/hister user create USERNAME --offline --admin
sudo -iu <service-user> podman exec hister-server /hister/hister user show USERNAME --show-token
user create --offline --admin prints a bootstrap token for the new admin.
user show --show-token requires an admin token
(HISTER__APP__ACCESS_TOKEN=<token> env or config).
MCP
Hister serves MCP (Streamable HTTP) at <base_url>/mcp; authenticate with
Authorization: Bearer <access-token> using a user's access token. Record
the URL in group_vars/all/mcp.yml and keep tokens in vault.
Deployment and Removal
./run.sh deploy actual --tags hister --limit <host>
./run.sh deploy actual --tags hister --limit <host> --extra-vars "hister_state=absent hister_pod_state=absent"