Documentation
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"]Each instance has, independently of the others:
| Property | Scope |
|---|---|
| Everlock store | one store per instance, never shared |
| Vhosts | one or more hostnames that route to it |
| Access path | http/image/<instance> — its own grant namespace |
| Display name | instance_name shown in its gallery |
| AI languages | enhance_languages for its captions |
| Public URL | derived 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:
| Change | Effect |
|---|---|
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, store | requires 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:
- Public internet — map each public vhost in DNS and let Everlock issue a per-host TLS certificate. See Public hosting: DNS vhosts and ACME.
- Private / home network — use
.localvhosts and let Everlock announce them over mDNS so no DNS server is needed at all. See Private networks: mDNS discovery.
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
owneronfamilyhas no access toworkunless granted separately.