Skip to main content
Anubis requires persistent storage for tracking challenges, cookies, and DNS cache. Choose a storage backend based on your deployment architecture.

Available Backends

Memory Backend

In-memory hashmap storage. Data is lost on restart.

Configuration

This is the default if no store is configured.

When to Use

βœ… Use for:
  • Local development
  • Testing
  • Single-instance with low traffic
  • Ephemeral environments
🚫 Don’t use for:
  • Production with high traffic
  • Multi-instance deployments
  • When you need persistence across restarts

Limitations

  • No size limits (memory grows unbounded)
  • Data lost on process restart
  • Cannot share state between instances

BoltDB Backend

Embedded key-value database using bbolt. Data persists to disk.

Configuration

When to Use

βœ… Use for:
  • Single-instance production deployments
  • High-traffic single-instance setups
  • When persistent storage is required
  • VPS/dedicated server deployments
🚫 Don’t use for:
  • Multi-instance deployments (Kubernetes, etc.)
  • Environments without persistent filesystem
  • Multiple Anubis instances sharing a backend

File System Requirements

Anubis requires:
  1. Write access to the directory containing the database file
  2. Exclusive lock on the database file (one process only)
Configuration:

Cleanup

BoltDB runs hourly cleanup to remove expired entries. No manual maintenance required.

Docker Example

Policy file:

Valkey/Redis Backend

Remote key-value store using Valkey or Redis compatible servers.

Configuration

Standalone

Cluster

Sentinel (High Availability)

Parameters

*Either url or sentinel must be provided.

Sentinel Parameters

When to Use

βœ… Use for:
  • Multi-instance deployments
  • Kubernetes/Docker Swarm
  • High-availability requirements
  • Shared state across instances
🚫 Don’t use for:
  • Single-instance deployments (use bbolt instead)
  • If you don’t already have Redis/Valkey
  • Low-traffic sites (overhead not justified)

URL Format

Examples:

Kubernetes Example

S3 API Backend

Object storage backend using S3-compatible APIs.

Configuration

Environment Variables

S3 credentials are read from environment:

Parameters

When to Use

βœ… Use for:
  • Serverless deployments (AWS Lambda, Cloud Run)
  • Multi-instance without managing Redis
  • Cloud-native deployments
  • When object storage is already available
🚫 Don’t use for:
  • High-frequency traffic (S3 API calls are expensive)
  • Latency-sensitive applications
  • If you can use Redis/Valkey instead

Supported Providers

  • AWS S3
  • Cloudflare R2
  • Minio
  • Tigris
  • Backblaze B2
  • DigitalOcean Spaces
  • Any S3-compatible service

Lifecycle Policy

Configure bucket lifecycle to auto-delete old objects:
Anubis stores expiry metadata but doesn’t auto-cleanup. Lifecycle policies prevent unbounded growth.

Example: Cloudflare R2

Storage Interface

All backends implement the same interface:

Choosing a Backend

Decision Tree

Comparison

Key Generation Warning

When using persistent storage (bbolt, valkey, s3api), always configure a signing key to prevent challenge invalidation on restart:
See Security for details.

Validation Errors

BoltDB

Fix: Provide path:

Valkey

Fix: Provide URL:

S3 API

Fix: Provide bucket:

Next Steps