.. default-role:: literal .. _saugykla-diegimas: ################## Saugyklos diegimas ################## Jei dėl tam tikrų priežasčių negalite naudoti valstybinės duomenų publikavimo paslaugos pasiekiamos adresu get.data.gov.lt_, tuomet galite Saugyklą pasileisti ir savo infrastruktūroje. .. _get.data.gov.lt: https://get.data.gov.lt/ Čia rasite informaciją, kaip galite paleisti Saugyklą savo infrastruktūroje. Saugykla veikia :ref:`Spinta` priemonės pagalba. :ref:`Spinta` gali veikti kaip komandinės eilutės įrankis, tačiau taip pat gali veikti ir duomenų publikavimo režimu. Duomenų publikavimas gali veikti dviem režimais: mode: internal Duomenys publikuojami iš Saugyklos vidinės duomenų bazės, kurioje laikoma šaltinio duomenų kopija. Vidinė duomenų bazė praturtina šaltinio duomenis metaduomenimis, kurie leidžia užtikrinti sklandesnį duomenų publikavimą. mode: external Duomenys gali būti publikuojami tiesiai iš duomenų šaltinio (kol kas tai yra eksperimentinė funkcija, naudojama tik pasitikrinti, kaip atrodys duomenų publikavimas, prie atliekant realų duomenų perdavimą į Saugyklą). Diegiant ir konfigūruojant duomenų publikavimo paslaugą rekomenduojame naudoti `model: internal` režimą, būtent toks režimas naudojamas ir get.data.gov.lt_ adresu. Techniniai reikalavimai *********************** Saugykla veikia ir yra testuota Linux operacinėse sistemose, konkrečiai naudojant Debian/Ubuntu distribucijas, todėl instrukcijos bus pateiktos būtent Debian/Ubuntu aplinkai. Diegimą galima atlikti ir kitose Linux distribucijose, tačiau tam tikros vietos nurodytos šioje dokumentacijoje turėtu būti priderintos taip, kad veiktų kitoje distribucijoje. Saugykla yra sukurta naudojant Python programavimo kalbą, reikalinga Python 3.9 ar naujesnė versija. Naujose Saugyklos versijose reikalavimas Python versijai gali keistis. Dėl serverio resursų, tokių kaip CPU, RAM ir HDD, reikalingi resursai tiesiogiai priklauso nuo publikuojamų duomenų kiekio ir naudotojų srauto, kurie naudosis duomenų publikavimo paslauga. Minimalūs reikalavimai Saugyklai, be duomenų ir su 5 naudotojais vienu metu besinaudojančiais publikavimo paslauga būtų 1 CPU, 512 Mb RAM ir 1G HDD laisvos vietos, kuri lieka pilnai įdiegus operacinę sistemą ir visas reikalingas priklausomybes. Pati savaime Saugykla su visomis Python priklausomybes diske užima apie 500 Mb vietos, tačiau sunaudojamos vietos skaičius gali skirtis, skirtingose distribucijose. Saugyklos veikimas turėtu būti nuolat stebimas ir reikiami resursai didinami, pagal poreikį. Operacinės sistemos paruošimas ****************************** Saugykla turėtu būti diegiama ir leidžiama `spinta` naudotojo teisėmis, todėl reikia sukurti sisteminį naudotoją: .. code-block:: sh sudo useradd --system -g www-data --create-home --home-dir /opt/spinta spinta Atkreipkite dėmesį, kad visose komandose, kurios prasideda `sudo`, komanda turi būti vykdoma administratoriaus teisėmis, tačiau visur kur nėra `sudo`, komanda turi būti vykdoma `spinta` naudotojo teisėmis. Tai yra svarbu, todėl nesupainiokite kokio naudotojo teisėmis vykdote komandas, priešingu atveju susidursite su sunkumais susijusiais su failų teisėmis. PostgreSQL diegimas ******************* Kai Saugykla veikia `mode: internal` režimu, jai reikalinga duomenų bazė, kurioje saugoma publikuojamų duomenų kopija. Rekomenduojame naudoti PostgreSQL: .. code-block:: sh sudo apt install postgresql sudo -Hiu postgres createuser spinta sudo -Hiu postgres createdb \ --template=template0 \ --owner=spinta \ --encoding=UTF8 \ --locale=C.UTF-8 \ spinta Žinomų apribojimų PostgreSQL versijai nėra. Rekomenduojame naudoti naujausią PostgreSQL versiją. Python diegimas *************** Daugelis Linux distribucijų ateina su įdiegta Python versija, tačiau reikia įsitikinti, ar distribucijos Python versija yra pakankama: .. code-block:: sh python3 --version Jei Python versija yra 3.9 ar naujesnė, tada galite pereiti prie sekančio žingsnio. Jei versija yra žemesnė nei 3.9, tuomet reikės įsidiegti naujesnę Python versiją. Tai galite padaryti naudodami pyenv_ (dėl pačio pyenv_ diegimo skaitykite `pyenv dokumentacijoje`_): .. _pyenv: https://github.com/pyenv/pyenv .. _pyenv dokumentacijoje: https://github.com/pyenv/pyenv/wiki#suggested-build-environment .. code-block:: sh sudo apt update sudo apt upgrade sudo apt install -y \ git make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget \ curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev \ python-openssl git clone https://github.com/pyenv/pyenv.git export PYENV_ROOT=/opt/pyenv /opt/pyenv/bin/pyenv install --list | grep -v - | tail /opt/pyenv/bin/pyenv install 3.10.7 # Naudokite naujausią versiją Naujausia Python versija bus įdiegta į `/opt/pyenv/versions/3.10.7/bin/python`. Analogiškai, galite naudotis distribucijos teikiamais paketais, Ubuntu atveju galite daryti taip: .. code-block:: sh sudo apt update sudo apt upgrade sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.10 python3.10-venv Naujausia python versija bus pasiekiama `python3.10` komandos pagalba. Spinta diegimas *************** Atkreipkite dėmesį, kad visos komandos diegiant Spinta turi būti vykdoma `spinta` naudotojo teisėmis ir iš `spinta` naudotojo namų katalogo `/opt/spinta`. Aktyvų naudotoją ir katalogą galite pasikeisti taip: .. code-block:: sh sudo -Hsu spinta cd Saugykla veikia Spinta_ priemonės pagalba, kuriai reikia Python. Rekomenduojama visus Python paketus diegti taip vadinamoje izoliuotoje Python aplinkoje, kurią galima susikurti taip (nepamirškite nurodyti jūsų naudojamos Python versijos numerį, kuris gali skirtis): - Jei Python diegėte su venv_: .. code-block:: sh /opt/pyenv/versions/3.10.7/bin/python -m venv env - Jei Python diegėte distribucijos priemonėmis: .. code-block:: sh python3.10 -m venv env Toliau spintą įdiegsite taip: .. code-block:: sh env/bin/pip install spinta env/bin/spinta --version Saugyklos konfigūravimas ************************ Spinta yra konfigūruojama konfigūracijos failo pagalba, kurio, pagal nutylėjimą ieškoma aktyviame kataloge. Kur Spinta ieško konfigūracijos failo, galima patikrinti taip: .. code-block:: sh env/bin/spinta config config Konfigūracijos failo vieta gali būti keičiama komandinės eilutės: .. code-block:: sh env/bin/spinta -o config=config.yml Arba aplinkos kintamųjų pagalba: .. code-block:: sh SPINTA_CONFIG=/opt/spinta/config.yml Kuriuos, taip pat galima pateikti ir `.env` faile. Pats konfigūracijos failas `config.yml` turėtu atrodyti panašiai taip: .. code-block:: yaml config_path: /opt/spinta/config default_auth_client: default env: production manifest: default token_validation_keys_download_url: https:// # auth serverio viešu raktu # (well-known) adresas, jei # naudojate autorizacijos serverį # (ne spinta), kuris palaiko raktų rotavimą keymaps: default: type: sqlalchemy dsn: sqlite:////opt/spinta/var/keymap.db backends: default: type: postgresql dsn: postgresql:///spinta manifests: default: type: tabular path: /opt/spinta/manifest.csv backend: default mode: internal accesslog: type: file file: /opt/spinta/logs/access.log Prieš testuojant ar konfigūracija veikia, sukuriame reikalingus katalogus: .. code-block:: sh mkdir /opt/spinta/config mkdir /opt/spinta/logs mkdir /opt/spinta/var Generuojame kriptografinius autorizacijos raktus: .. code-block:: sh env/bin/spinta key generate Sukuriame `default_auth_client`, kuriam suteiktos teisės bus naudojamos visiems neautorizuotiems klientams: .. code-block:: sh env/bin/spinta client add -n default --add-secret --scope - <