NotariumҚұжаттама
Құжаттама нұсқасы: latest
KZ

Өнімдік орта

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

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

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

Деплойдың ең жиі кездесетін қатесі

Кері прокси 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-тақырыптардан шығарылады. Қараңыз: Конфигурация.

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

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

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

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

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

Бұл жерге «бәрін» жазбаңыз

Логикалық мәндер, хоп санауыштары, атаулы диапазондар және барлық мекенжайды қамтитын диапазондар (/0) іске қосылу кезінде қабылданбайды. Барлық мекенжайға сену — кез келген клиент өзіне тақырып арқылы IP тағайындап, кіру лимитінен айналып өтеді деген сөз.

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

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

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

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

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

Жүктеме теңгергіш артындағы бірнеше дана

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

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

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

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'тан алыңыз: Сақтық көшірме және қалпына келтіру. Сол бетте — таза томға қалпына келтіру және пәрменнің қолданылу шекарасы.

Тірі meta.db-ны көшірмеңіз

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

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

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

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