---
title: "Өнімдік орта"
description: "Кері прокси және forwarded-тақырыптар, клиенттің IP-мекенжайына сену, «бір дана» инварианты, кіріктірілген пәрменмен тұрақты сақтық көшірме."
---

# Өнімдік орта

Бұл бет — дананы өнімдік ортаға шығару туралы: оны кері проксидің артына қалай дұрыс қою керек, «бір дана» инварианты нені білдіреді және сақтық көшірмені қалай жасау керек. Notarium [бір контейнермен](/docs/self-hosting/install/) орналастырылады — өнімдік конфигурация төмендегі үш нәрсеге саяды.

## Кері прокси және forwarded-тақырыптар

Қосымшаның алдына кері прокси (nginx, Caddy, Traefik) қойылады — ол TLS-ті терминациялап, Notarium портына проксилейді. Басты талап: прокси сыртқы мекенжай туралы тақырыптарды **міндетті түрде** жіберіп отыруы керек.

> [!warning] Деплойдың ең жиі кездесетін қатесі
> Кері прокси `X-Forwarded-Host` жіберуі (немесе `Host`-ты қайта жазбауы) және `X-Forwarded-Proto: https` жіберуі керек. Әйтпесе интерфейстен келетін cookie арқылы аутентификацияланған мутациялар cross-origin ретінде қабылданбай қалады — «көремін, бірақ сақтай алмаймын» деген симптом шығады. `X-Forwarded-Proto` жіберу сессиялық cookie-дің `Secure` жалаушасын алуы үшін де қажет.

Себебі мынада: мутацияларға жасалатын Origin-тексеру сұраныстың көзін браузер көретін мекенжаймен салыстырады — ал ол мекенжай forwarded-тақырыпта келеді. Bearer-PAT арқылы жасалатын агент шақырулары бұл тексеруден босатылған (оларда cookie жоқ — демек CSRF үшін шабуыл алаңы да жоқ). Ал прокси forwarded-тақырыптарды клиенттен келген күйінде өткізіп жібермей, өз мәндерімен **қайта жазуға** міндетті.

Егер сіз агенттердің OAuth-авторизациясын қоссаңыз, прокси артында `PUBLIC_BASE_URL` мәнін беріңіз (мысалы, `https://notes.example.com`) — OAuth-метадеректеріне арналған тұрақты сыртқы мекенжай. Онсыз мекенжай forwarded-тақырыптардан шығарылады. Қараңыз: [Конфигурация](/docs/self-hosting/configuration/).

## Клиенттің IP-мекенжайына сену

Мекенжайдан бөлек тағы бір ось бар — **клиенттің нақты IP-мекенжайы**. Ол бойынша екі лимит есептеледі: кіру әрекеттері және жаңа OAuth-клиенттерді қабылдау. Прокси артында барлық сұраныс бір мекенжайдан келеді, сондықтан айқын баптаусыз бұл лимиттер «проксиге», яғни бәріне бірден есептелер еді.

Тұтқа — `TRUST_PROXY`: **тікелей** проксилердің IP/CIDR тізімі, үтір арқылы.

```bash
# .env — өз прокси-контейнеріңіздің немесе хостыңыздың мекенжайын қойыңыз
TRUST_PROXY=172.18.0.0/16
```

Қауіпсіз әдепкі — айнымалы мүлде берілмеген күй: сонда `X-Forwarded-For` лимиттерге еш әсер етпейді, ал бөтен IP-ті тақырып арқылы жалған көрсету мүмкін емес. Оны тек проксиіңіздің мекенжайын нақты білгенде ғана беріңіз әрі тізімді тар ұстаңыз.

> [!warning] Бұл жерге «бәрін» жазбаңыз
> Логикалық мәндер, хоп санауыштары, атаулы диапазондар және барлық мекенжайды қамтитын диапазондар (`/0`) іске қосылу кезінде қабылданбайды. Барлық мекенжайға сену — кез келген клиент өзіне тақырып арқылы IP тағайындап, кіру лимитінен айналып өтеді деген сөз.

Бұл баптау `X-Forwarded-Host` пен `X-Forwarded-Proto` жіберуге әсер етпейді — бұлар тәуелсіз осьтер, алдыңғы бөлімдегі келісім өз күшінде қалады.

## «Бір дана» инварианты

Notarium **бір процеске** есептелген. Аутентификацияның екі күйі процестің жадында тұрады:

- **логиннің rate-limit-і** — әрекеттер санауыштары;
- **SSE-сокеттер тізілімі** — ол арқылы рұқсатты кері алу тірі байланыстарды лезде үзеді.

Жүктеме теңгергіш артында бірнеше дана ортақ қоймасыз жұмыс істесе, бұл механизмдер бұзылады: шабуылдаушы лимитті даналар бойынша көбейтеді, ал бір данадағы рұқсатты кері алу басқа данада ілініп тұрған SSE-байланысты жаппайды.

> [!note] Жүктеме теңгергіш артындағы бірнеше дана
> Екі күй де процестің жадында тұрады, сондықтан жүктеме теңгергіш артында бірнеше дана ортақ қоймасыз жұмыс істесе, бұл механизмдер істемейді. [Метадеректер дерекқорын Postgres-ке шығару](/docs/self-hosting/database/) ортақ күй береді, бірақ көлденең масштабтау үшін бұл ғана жеткіліксіз. Бір дананы ұстаңыз.

## Сақтық көшірме

Каноникалық сақтық көшірме — файлдарды сырттан көшіру емес, **образдың кіріктірілген пәрмені**: `notarium backup` тексерілген ZIP жинақтап, оны сервис жұмысын тоқтатпаған күйде ағынмен береді.

```bash
docker compose exec -T notarium backup > notarium-$(date -u +%Y%m%dT%H%M%SZ).zip
docker compose exec -T notarium backup verify < notarium-20260731.zip
```

Тексеру — бір реттік әрекет емес, жоспарлы тапсырманың міндетті бөлігі: ол ештеңені өзгертпейді, ал архив керек болатын күн туғанға дейін бүлінуді ұстап қалады. Тапсырманың өзі үшін қарапайым қайта бағыттау жеткіліксіз — қауіпсіз жариялау тәртібін (уақытша файл → дискіге мәжбүрлі жазу → атомарлық қатты сілтеме) runbook'тан алыңыз: [Сақтық көшірме және қалпына келтіру](/docs/self-hosting/backup/). Сол бетте — таза томға қалпына келтіру және пәрменнің қолданылу шекарасы.

> [!danger] Тірі `meta.db`-ны көшірмеңіз
> `cp /data/meta.db` немесе жұмыс істеп тұрған томды көшіру — сақтық көшірме емес: метадеректер дерекқоры WAL режимінде жұмыс істейді, коммит етілген жолдар әлі `meta.db-wal` ішінде жатуы мүмкін, ал бөлек-бөлек көшірілген файлдар бір сәттің тұтас суреті болмайды.

Сақтық көшірмеге нақты не кіреді және неге:

| Не | Рөлі |
|---|---|
| `/data/spaces` | Сіздің Markdown-файлдарыңыз — шындық көзі. |
| `/data/meta.db` | Метадеректер дерекқоры (тарих, пайдаланушылар, рұқсаттар) — файлдардан **қалпына келтірілмейді**. |
| `/data/jobs` | Импорт/экспорт тапсырмаларының артефактілері мен жүктеп салынған файлдары. |
| `/data/engine` | Қозғалтқыштың туынды индекстері. Архивке кірмейді: файлдардан қайта құрастырылады. |

Егер метадеректер дерекқоры Postgres-ке шығарылған болса немесе жазбалар деректер түбірінен тыс жатса, кіріктірілген пәрмен жартылай архив жасаудың орнына қатемен аяқталады — дерекқор мен тіркелген каталогтардың сақтық көшірмесін провайдеріңіздің штаттық құралдарымен жасаңыз. Метадеректер дерекқоры нақты нені сақтайтыны — [Дерекқор](/docs/self-hosting/database/) бетінде.
