🤖 PR generated for branch `fix/cyrillic-fonts-dev-certs-and-page-head`.
### Changes Summary
- **Fonts**: Add Cyrillic glyph subsets for Lato, EB Garamond, and Fira
Code.
- **Dev**: Support remote Root CA and encrypted dev CA key in
`.env.dev`.
- **UI & Kits**: Add size variant to `Breadcrumbs` component and enlarge
`PageHead` breadcrumbs with tuned collapse scroll threshold.
- **ESLint**: Add `no-hanging-particles` i18n & markdown typography rule
with auto-fixer.
- **Content & i18n**: Apply `ru-text` editorial and typography polish
(em dashes, number ranges, «ё» restoration, non-breaking spaces) across
`services/www` and `services/docs`.
4.4 KiB
title, description, weight
| title | description | weight |
|---|---|---|
| Getting started with an apex node | Bootstrap a node repository and bring a host under apex management. | 5 |
This quick start takes a fresh host from a cloned node repository to a running service stack. It assumes the node repository already exists — to build one from scratch, see Guide: Build a node repository.
Prerequisites
- A Debian-based host. Any FQDN works — node identity is declared explicitly in
node.env(APEX_NODE_FQDN,APEX_NODE_HOST,APEX_SUBNET), not parsed from a required hostname shape. gitand Python 3 — the engine uses the standard library only;pipis never required.- Docker with Compose v2.20 or newer (the core composition is consumed through the
include:directive). - A sudo-capable login user.
- Three storage locations for the tiers (for example, three mount points).
Bootstrap
{{% steps %}}
Clone the node repository
git clone --recurse-submodules git@github.com:<owner>/<node-repo>.git
cd <node-repo>
./init.sh
source ~/.bashrc
init.sh initializes the commons/ submodule, points core.hooksPath at commons/githooks, marks the checkout safe.directory, and prepends commons/ to PATH — the launcher is commons/apex.
Verify action discovery
apex --help
The listing shows every commons action plus any node-local proprietaries tagged (local). When node.env has no APEX_NODE_FQDN, the engine warns and falls back to the OS hostname — harmless on a workstation, but set APEX_NODE_FQDN explicitly on the node itself. (APEX_SUBNET is required: if it is missing the engine exits 66.)
Link the storage tiers
apex tiers/link <tier1-path> <tier2-path> <tier3-path>
Creates the node-level compositions/@tierN links, the per-project tier directories and @tierN links, shared/ areas, and each project's .env symlink into tier 1. Success ends with @tier setup completed.
Provision project users
apex tiers/useradd
apex tiers/chown
tiers/useradd creates one noroot-<project> system user per composition plus the noroot-shared group, and injects APEX_UID/APEX_GID/APEX_SHARED_GID into each project .env. tiers/chown then applies the ownership matrix (see Concept: Tiered storage) and ends with Permissions applied.
Fill the core secrets
Edit compositions/apex/.env (a symlink into tier-1 storage, never committed) with the keys documented in the node repository's SECRETS.md:
APEX_RESTIC_PASSWORD=...
APEX_RESTIC_AWS_ACCESS_KEY_ID=...
APEX_RESTIC_AWS_SECRET_ACCESS_KEY=...
APEX_TRAEFIK_CF_DNS_API_TOKEN=...
APEX_TRAEFIK_ACME_EMAIL=...
APEX_OBS_BASIC_AUTH_PASS=... # only when the alloy observability profile is enabled
APEX_UID/APEX_GID/APEX_SHARED_GID are already present — tiers/useradd maintains them between marker comments. Non-secret scalars (APEX_RESTIC_REPOSITORY, the push URLs, COMPOSE_PROFILES, TZ, …) live in the committed compositions/apex/apex.env instead — see Guide: Build a node repository.
Configure the host
apex configure
Runs every configure/* action in fixed order: base, ufw, crowdsec, cron, systemd, routing. Each step is also individually invocable; several accept --dry-run. See Guide: Operate a node.
Bring the stack up
apex compose up
The core composition comes up first (it owns the networks), then every service composition in alphabetical order.
{{% /steps %}}
Validation
apex --helplists actions without warnings on the live host.docker psshows the core containers (apex-traefik,apex-socket-proxy, plus any profile-enabled services) and each project's anchor.apex utils/lint-docker-composereportsAnchor IP validation passed.
See also: