Documentation

Last updated: 2026-07-24

Running multiple image instances

A single Everlock process can host many independent photo libraries at once. Each library is an image instance: its own storage, its own hostnames, its own access grants, and its own gallery. This is the same multi-tenant model Everlock uses for sites and OCI registries — one backend module, many logical instances, selected by Host.

Why multiple instances

A separate instance is the right boundary when two collections should not share storage or access:

  • a private family album and a public portfolio from the same box;
  • one library per household member, each with its own grants;
  • a staging instance you can wipe without touching the real one;
  • a LAN-only gallery (.local) alongside a publicly reachable one.

If you only need one library, you do not need any of this — the getting-started guide bootstraps a single default instance from CLI flags.

What each instance owns

flowchart TD
Req["HTTP request"] --> FE["frontend-http (Host header)"]
FE -->|photos.example.net| A["instance: family"]
FE -->|portfolio.example.com| B["instance: work"]
FE -->|kids.local| C["instance: kids"]
A --> AS[("store: family-images")]
A --> AP["grant: http/image/family"]
B --> BS[("store: work-images")]
B --> BP["grant: http/image/work"]
C --> CS[("store: kids-images")]
C --> CP["grant: http/image/kids"]
One process, many instances. Host selects the instance; each instance is isolated.

Each instance has, independently of the others:

PropertyScope
Everlock storeone store per instance, never shared
Vhostsone or more hostnames that route to it
Access pathhttp/image/<instance> — its own grant namespace
Display nameinstance_name shown in its gallery
AI languagesenhance_languages for its captions
Public URLderived from its first vhost, or set explicitly

The instance name (the TOML table key) is the stable identifier. It keys the Everlock access path, so renaming an instance changes who can reach it — treat it as permanent once grants exist.

The config file is the source of truth

Multi-instance setups live in config/image-http.toml inside the Everlock system store. Once that file exists, it is authoritative and the CLI bootstrap flags (--backend-image-http-vhost, --backend-image-http-store, --backend-image-http-public-url) are no longer consulted for instance layout.

# Enables the backend; the same as passing --backend-image-http.
enabled = true

[instances.family]
store = "family-images"
vhosts = ["photos.example.net", "photos.local"]
instance_name = "The Family Album"
enhance_languages = ["en", "de"]

[instances.work]
store = "work-images"
vhosts = ["portfolio.example.com"]
public_url = "https://portfolio.example.com"

[instances.kids]
store = "kids-images"
vhosts = ["kids.local"]

See the engine page for the meaning of every key.

Managing instances from the admin console

You can do most instance management without hand-editing the TOML. From the admin SSH console:

/image list                                    list instances and their vhosts
/image create photos store=family-images vhost=photos.example.net
/image set    photos vhost=photos.local        add a vhost to an instance
/image unset  photos vhost=photos.local        remove a vhost
/image delete photos                           remove an instance

What hot-reloads and what needs a restart

This distinction matters in production:

ChangeEffect
Add a vhost to an instance (/image set)immediate, no restart
Remove a vhost (/image unset)immediate, no restart
Create an instance (/image create)requires a restart
Delete an instance (/image delete)requires a restart
Edit instance_name, enhance_languages, storerequires a restart

Vhost changes are hot because routing is a runtime map. Anything that opens a store or boots an embedded engine — creating, deleting, or re-pointing an instance — happens at process start.

Addressing the instances

Routing only gets a request to the right instance once the client's Host header matches a configured vhost. How clients learn that hostname is the next question, and it splits by environment:

A single instance can carry both kinds of vhost at once — a public name for remote access and a .local name for the LAN.

Operator notes

  • A usable instance needs at least one vhost; an instance with none is unreachable.
  • Large image traffic produces many store commits — size storage accordingly.
  • Per-instance grants are independent: a user with owner on family has no access to work unless granted separately.
images backend multi-instance vhost routing