- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI) - Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend - Dockerfile.gui: Astro static build served via nginx - docker-compose.yml: backend (internal) + frontend (port 5353) - nginx.conf: root redirects to /es/, /api/ proxied to backend - zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
100 lines
3.4 KiB
Markdown
100 lines
3.4 KiB
Markdown
# Architecture
|
|
|
|
The Zonemaster *Backend* is a system for performing domain health checks and
|
|
keeping records of performed domain health checks.
|
|
|
|
A Zonemaster *Backend* system consists of at least three components: a
|
|
single *Database*, a single *Test Agent* and one or more *RPC API daemons*.
|
|
|
|
|
|
## Components
|
|
|
|
### Database
|
|
|
|
The *Database* stores health check requests and results. The *Backend*
|
|
architecture is oriented around a single central *Database*.
|
|
|
|
All times in the database are stored in UTC.
|
|
|
|
|
|
### Test Agent
|
|
|
|
A Zonemaster *Test Agent* is a daemon that picks up *test* requests from the
|
|
*Database*, runs them using the *Zonemaster Engine* library, and records the results back
|
|
to the *Database*. A single *Test Agent* may handle several requests concurrently.
|
|
The *Backend* architecture supports a single *Test Agent* daemon interacting with a single *Database*.
|
|
|
|
>
|
|
> TODO: List all files these processes read and write.
|
|
>
|
|
> TODO: List everything these processes open network connections to.
|
|
>
|
|
> TODO: Describe in which order *test* are processed.
|
|
>
|
|
> TODO: Describe how concurrency, parallelism and synchronization works within a single *Test Agent*.
|
|
>
|
|
> TODO: Describe how synchronization works among parallel *Test Agents*.
|
|
>
|
|
|
|
|
|
### Web backend
|
|
|
|
A Zonemaster *Web backend* is a daemon providing a JSON-RPC interface for
|
|
recording *test* requests in the *Database* and fetching *test* results from the
|
|
*Database*. The *Backend* architecture supports multiple *RPC API daemons*
|
|
interacting with the same *Database*.
|
|
|
|
This only needs to be run as root in order to make sure the log file
|
|
can be opened. The `starman` process will change to the `www-data` user as
|
|
soon as it can, and all of the real work will be done as that user.
|
|
|
|
>
|
|
> TODO: List all ports these processes listen to.
|
|
>
|
|
> TODO: List all files these processes read and write.
|
|
>
|
|
> TODO: List everything these processes open network connections to.
|
|
>
|
|
|
|
|
|
## Glossary
|
|
|
|
### Test
|
|
|
|
### Batch
|
|
|
|
### Test result
|
|
|
|
### Test module
|
|
|
|
### Message
|
|
|
|
### Profile
|
|
|
|
A profile is a configuration for Zonemaster Engine; see the [profiles
|
|
overview] for context.
|
|
Zonemaster Backend allows administrators to [configure the set of
|
|
available profiles].
|
|
|
|
Each available profile has a [profile name].
|
|
A profile named `default` is always available.
|
|
Each available profile is based on the [Zonemaster Engine default profile].
|
|
Each one (with the possible exception of `default`) has a [profile file]
|
|
with profile data overriding the Zonemaster Engine default profile.
|
|
|
|
The [RPC-API] contains several methods that accept profile name arguments.
|
|
|
|
|
|
### Engine
|
|
|
|
The Zonemaster *Engine* is a library for performing *tests*. It's hosted in [its
|
|
own repository](https://github.com/zonemaster/zonemaster-engine/).
|
|
|
|
--------
|
|
[Configure the set of available profiles]: https://github.com/zonemaster/zonemaster/blob/develop/docs/public/configuration/backend.md#profiles-section
|
|
[Profile file]: https://metacpan.org/pod/Zonemaster::Engine::Config#PROFILE-DATA
|
|
[Profile name]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/backend/rpcapi-reference.md#profile-name
|
|
[Profiles overview]: https://github.com/zonemaster/zonemaster/blob/master/docs/internal/design/Profiles.md
|
|
[RPC-API]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/backend/rpcapi-reference.md
|
|
[Zonemaster Engine default profile]: https://metacpan.org/pod/Zonemaster::Engine::Config#DESCRIPTION
|