Skava Skava / Wiki

Zálohy firmy

Správcovia a vlastníci firmy si otvoria svoju firmu v webovej aplikácii a vyberú Zálohy. Môžu požadovať zálohy, stiahnuť súbory ZIP a spravovať kľúče API pre svoj zálohovací server. Tento export nie je k dispozícii v mobilnej aplikácii.

Rozsah a obmedzenia

Záloha obsahuje bežné projektové chaty firmy, vrátane archívnych chatov, s správami, reakciami, kartami chatov a ich priloženými nahranými prílohami. Zahŕňa aj metadáta projektov a chatov, mená účastníkov a zverejnené dokumenty firmy v týchto chatoch. Správcovia a vlastníci firmy môžu zálohovať firemné chaty, ktorým sa osobne nezúčastnili.

Priame správy, súkromné poznámky, služby viditeľné len pre vás, chaty medzi firmami a osobné koncepty sú vylúčené. Obsah firemného úložiska a externých odkazov nie je súčasťou tohto exportu chatov. Chýbajúce priložené prílohy spôsobia zlyhanie generovania. ZIP je export dát; automatický import späť do Skavy zatiaľ nie je k dispozícii.

Kvóty, inkrementálne zálohy a doba uchovávania

Každá firma si môže vyžiadať jednu kompletnú zálohu do 7 dní a dve inkrementálne zálohy do 24 hodín. Tieto posuvné okná sa spúšťajú pri každom vyžiadnutí. Opätovné stiahnutie toho istého pripraveného súboru nečerpá kvótu na generovanie. Neúspešné úlohy generovania sa do týchto limitov nezapočítavajú.

Každá inkrementálna záloha obsahuje zmeny a odstránenia od poslednej úplne prenesenej a overenej kontrolným súčtom zálohy. Reťazec je A + B + C: A je kompletná záloha, B obsahuje zmeny od A a C len ďalšie zmeny od B. Stav obnovíte aplikovaním všetkých balíkov v poradí. Nezmienené prílohy odkazujú na súbory, ktoré už v tomto reťazci existujú.

Stiahnutia zostávajú dostupné 24 hodín po dokončení generovania. Potom sa ZIP odstráni, zatiaľ čo história zostáva. Kompletnú zálohu a všetky príslušné inkrementálne zálohy si ponechajte lokálne. Stav porovnávania zostáva použiteľný najviac 90 dní od kompletného zálohovania; potom je potrebná nová kompletná záloha. Každá inkrementálna záloha identifikuje kompletnú zálohu aj jej priameho predchodcu pomocou ID a SHA-256.

Novým predchodcom sa stáva len úplne prijatý a potvrdený balík. Pripravená, ale nepotvrdená inkrementálna záloha blokuje ďalšiu inkrementálnu zálohu, kým sa nepotvrdí alebo nevyprší. Po vypršaní nepotvrdeného balíka začína ďalší pokus od posledného potvrdeného stavu a zahŕňa zmeny, ktoré ešte nie sú zálohované. Ak je potvrdená časť chýba lokálne, stiahnite ju znova v rámci jej 24-hodinovej dostupnosti alebo spustte novú kompletnú zálohu podľa týždenného limitu. Odporúčame jeden zdieľaný adresár záloh na firmu; nezávislí klienti musia udržiavať rovnaký kompletný reťazec.

Nastavte kľúč API

V sekcii Kľúče API zadajte názov, napríklad „Firemný NAS“, a vytvorte kľúč. Zobrazí sa iba raz, expiruje po roku a kedykoľvek ho môžete zrušiť. Uložte ho do chráneného úložiska tajných údajov vo vašom zálohovacom prostredí. Kľúč patrí firme a má prístup len k zálohovaciemu API tejto firmy. Funguje nezávisle od neskorej prihlásenia jeho tvorcovi.

Posielajte ho cez HTTPS v hlavičke Authorization: Bearer YOUR_BACKUP_TOKEN. Kľúče nechávajte mimo URL, verejných skriptov a logov. Kľúče môžu vytvárať, zoznamovať a rušiť len administrátori a vlastníci firmy.

Webová aplikácia: kľúč API s dátumom expirácie a akciou na zrušenie
Správa kľúčov v webovej aplikácii: názov, platnosť a zrušenie pre každý program zálohovania.

Python: stiahnite kompletnú zálohu a inkrementálne zálohy

Stiahnite si klientský skript company_backup.py v Pythone a umiestnite ho vedľa vášho skriptu. Vyžaduje Python 3.10 alebo novší na Linuxe alebo macOS a používa iba štandardnú knižnicu. Nastavte SKAVA_BACKUP_TOKEN v chránenom procesnom prostredí a nahraďte 42 identifikátorom firmy z adresy webovej aplikácie.

import os
from company_backup import BackupClient

client = BackupClient("https://chat.skava.io", 42,
                      os.environ["SKAVA_BACKUP_TOKEN"])
full = client.backup("full", "backups")  # once every 7 days
# Later, up to twice in a rolling 24-hour window:
diff = client.backup("diff", "backups")

Plánované úlohy môžu volať rovnakého klienta priamo:

python3 company_backup.py --company 42 --kind full --directory backups
python3 company_backup.py --company 42 --kind diff --directory backups

Klient požiada o generovanie, sleduje stav, sťahuje obsah na disk, overí veľkosť, SHA-256 a obsah ZIP súboru a potvrdí prijatie. Ukladá kompletné a inkrementálne zálohy ako samostatné súbory. Skrytý stavový súbor v tomto adresári ponechajte: obsahuje informácie o reťazci a pokračovaní. Pred žiadosťou o ďalšiu inkrementálnu zálohu klient overí každý predchádzajúci ZIP súbor. Po prerušení zopakujte rovnaký príkaz. Súbežné úlohy pre rovnakú firmu v rovnakom adresári sa zabraňujú.

Prúd API bez trvalého spojenia

  1. Žiadosť: POST /api/v1/companies/42/backups s {"kind":"full","request_id":"YOUR_UNIQUE_ID"}. Pre inkrementálnu zálohu nastavte kind na diff a pošlite lokálne ID kompletné zálohy ako base_id a ID posledného potvrdeného balíka ako parent_id. Odpoveď obsahuje job.id. Pri opakovanej žiadosti použite rovnaké request_id.
  2. Sledovanie: GET /api/v1/companies/42/backups/JOB_ID, približne každých desať sekúnd. Generovanie prebieha na pozadí počas stavov queued alebo running. Medzi žiadosťami neostáva žiadne otvorené spojenie.
  3. Sťahovanie: Pri stave ready a available: true zavolajte GET /api/v1/companies/42/backups/JOB_ID/download. Len toto prenosové spojenie zostáva otvorené. Ak sa prenos preruší, sťahujte celý súbor znova.
  4. Potvrdenie prijatia: Skontrolujte job.bytes a job.sha256. Z hlavičiek odpovede pri sťahovaní zverte X-Backup-Download-Id a X-Backup-Receipt. Odošlite POST /api/v1/companies/42/backups/JOB_ID/downloads/DOWNLOAD_ID/confirm s telom {"receipt":"RECEIPT","bytes":12345,"sha256":"SHA256"}. Úspešný je len kompletný prenos s zodpovedajúcim potvrdením.

GET /api/v1/companies/42/backups vráti históriu, stránkovanú cez next_offset. Vyčerpané kvóty alebo dočasné obmedzenia kapacity vrátia HTTP 429 s hlavičkou Retry-After. Zálohy sa generujú postupne v rámci limitov, takže súbežné nočné úlohy nepreťažia aplikáciu.

Pochopenie histórie sťahovaní

História zobrazuje typ (úplný alebo inkrementálny), čas požiadavky, dátum expirácie, úplnú zálohu, predchodcu a každý pokus o sťahovanie s preneseným počtom bajtov. Stav „Pripravené“ označuje vygenerovaný súbor. „Prenesené“ znamená, že server odoslal všetky bajty. „Overenie kontrolného súčtu“ znamená, že klient overil a potvrdil úplné prijatie. Prerušené a neúspešné pokusy zostávajú viditeľné.

Webová aplikácia: inkrementálne zálohovanie s predchodcom, expirácia stiahnutia a potvrdený kontrolný súčet
História stiahnutí zobrazuje reťazec záloh, 24-hodinové okno a overené prijatie všetkých údajov.

Webová aplikácia overí prijatie v prehliadači pred zobrazením dialógu na uloženie. Toto potvrdenie však nedokazuje, že bol súbor následne trvalo uložený na vašom počítači. Pri automatických zálohách Pythonový klient najprv zapíše súbor na disk a až potom potvrdí prijatie. Stiahnutia cez webovú aplikáciu sú obmedzené na 64 MiB; pre väčšie archívy použite Pythonový klient.