.. Zdroj: elza/docs/admin-guide/source/02-installation.rst, elza e87a93d6d1

.. _admin_install:

=========
Instalace
=========

Aplikaci Elza je možné nainstalovat dvěma způsoby:

- **Instalačními skripty (doporučeno pro Linux)** - sada skriptů, která
  nainstaluje Elzu jako službu systemd a automatizuje nasazování nových
  verzí, zálohování databáze, kontrolu stavu a bezobslužné aktualizace.
- **Ručně** z binární distribuce, v Linuxu nebo ve Windows.

Oba způsoby používají stejnou binární distribuci a stejný konfigurační
soubor.

.. _admin_deployment_scripts:

Instalace pomocí instalačních skriptů
=====================================

Skripty a jejich dokumentace jsou publikovány na adrese
https://get.lightcomp.com/elza/ (v angličtině). Vyžadují Linux se systemd,
PostgreSQL včetně klientských nástrojů (``pg_dump``), ``bash`` a
``curl``. Instalace se spouští příkazem:

.. code-block:: bash

   curl -fsSL https://get.lightcomp.com/elza/elza-bootstrap.sh | bash -s -- --home /opt/elza

Bootstrap skript stáhne balík skriptů (ověřený kontrolním součtem) do
adresáře :file:`/opt/elza/scripts`, připraví konfigurační soubor
:file:`elza-env` a nainstaluje jednotky systemd. Po úpravě
:file:`elza-env` (minimálně připojení k databázi) se první nasazení
provede příkazem ``elza-deploy``.

Skripty poskytují tyto příkazy:

- ``elza-deploy`` - instalace nebo aktualizace aplikace: zastaví službu,
  zazálohuje databázi, stáhne distribuci, atomicky přepne na novou verzi,
  spustí službu a ověří, že běží.
- ``elza-backup`` - záloha databáze pomocí ``pg_dump`` s mazáním starých
  záloh.
- ``elza-health`` - kontrola stavu aplikace a volitelné hlášení stavu
  dohledovému systému (viz :ref:`admin_deployment_scripts_reporting`).
- ``elza-update`` - bezobslužná aktualizace na novou verzi.

Databázi je i v tomto případě nutné připravit podle
:ref:`admin_install_db`. Konfigurace vlastní aplikace
(:file:`elza.yaml`) je popsána v kapitole :doc:`04-konfigurace`.

Ruční instalace
===============

Obsah distribuce
----------------

Binární distribuce je soubor ZIP, který obsahuje:

- :file:`server/elza-tomcat-<verze>.jar` - aplikaci s vloženým webovým
  serverem,
- :file:`server/config/elza.yaml` - vzorovou konfiguraci,
- :file:`server/config/csc-metrics.json` - seznam metrik předávaných
  dohledovému systému (viz :doc:`08-monitorovani`),
- :file:`packages/` - základní balíčky: ``package-cz-base`` (číselníky)
  a ``rules-cz-zp2015`` (pravidla popisu ZP2015),
- :file:`data/all-institutions-import.xml` - seznam akreditovaných
  archivů v České republice,
- :file:`readme.txt` - stručný přehled instalace.

.. _admin_install_db:

Příprava databáze
-----------------

#. Vytvořte pro Elzu databázového uživatele, například ``elza``. Pro
   přístup aplikace nepoužívejte účet superuživatele.

#. Vytvořte prázdnou databázi, jejímž vlastníkem je tento uživatel:

   .. code-block:: bash

      createdb -O elza -E UTF8 -l cs_CZ.UTF-8 -T template0 elza

   Locale určuje řazení textů prováděné databází. Použijte locale
   archivního popisu (pro české archivy češtinu); dostupná locale vypíše
   příkaz ``locale -a``. Ve Windows je název například
   ``Czech_Czechia.1250``. Locale nelze po vytvoření databáze změnit.

#. Povolte v databázi rozšíření PostGIS. Vytvoření rozšíření vyžaduje
   práva superuživatele, proveďte je proto jako uživatel ``postgres``:

   .. code-block:: bash

      psql -U postgres -d elza -c "CREATE EXTENSION postgis;"

Tabulky vytvoří Elza při prvním spuštění.

Struktura adresářů
------------------

Elza potřebuje instalační a pracovní adresář, například:

- :file:`/opt/elza/server` - soubor JAR a :file:`config/elza.yaml`,
- :file:`/opt/elza/work` - pracovní adresář.

Ve Windows například :file:`D:\\Elza\\server` a :file:`D:\\Elza\\work`.

Pro službu vytvořte samostatného uživatele operačního systému, který je
vlastníkem pracovního adresáře a má k němu plná práva. V Linuxu je vhodné
odkazovat na aktuální JAR symbolickým linkem, aby aktualizace změnila jen
link: :file:`/opt/elza/server/elza-tomcat.jar` ->
:file:`elza-tomcat-3.4.7.jar`.

Pracovní adresář obsahuje:

- :file:`dms/` - binární soubory (přílohy, výstupy, publikace, importní
  dávky). Jeho strukturu spravuje Elza a nesmí se ručně upravovat;
  zálohuje se společně s databází (viz :doc:`09-zalohovani`).
- :file:`dpkg/` - balíčky načítané při startu (viz
  :ref:`admin_install_dpkg`).
- :file:`log/` - logy, pokud jsou nastaveny jako ve vzorové konfiguraci.
- další pracovní data, která si Elza v případě potřeby znovu vytvoří.

.. _Admin_InstallBinConf:

Konfigurace
-----------

Zkopírujte :file:`server/config/elza.yaml` do :file:`config/elza.yaml`
vedle souboru JAR a nastavte minimálně:

- připojení k databázi (``elza.data.url``, ``elza.data.user``,
  ``elza.data.pass``),
- pracovní adresář (``elza.workingDir``).

.. code-block:: yaml

   elza:
     data:
       url: jdbc:postgresql://localhost/elza
       user: elza
       pass: tajne
     workingDir: /opt/elza/work
     logFile: ${elza.workingDir}/log/elza.log
     siemLogFile: ${elza.workingDir}/log/siem.log

Ostatní nastavení popisuje kapitola :doc:`04-konfigurace`.

Spuštění jako služby
--------------------

Před nastavením služby aplikaci jednou spusťte z instalačního adresáře a
ověřte konfiguraci:

.. code-block:: bash

   java -jar elza-tomcat.jar

Při prvním spuštění Elza vytvoří databázové schéma. Aplikace je připravena,
jakmile log oznámí její spuštění; naslouchá na portu 8080.

Příklad jednotky systemd (:file:`/etc/systemd/system/elza.service`):

.. code-block:: ini

   [Unit]
   Description=ELZA
   After=network.target postgresql.service

   [Service]
   User=elza
   WorkingDirectory=/opt/elza/server
   ExecStart=/usr/bin/java -Xmx4g -Dfile.encoding=UTF-8 -jar /opt/elza/server/elza-tomcat.jar
   SuccessExitStatus=143
   Restart=on-failure

   [Install]
   WantedBy=multi-user.target

Velikost paměti (``-Xmx``) upravte podle dostupné paměti. Pracovním
adresářem procesu musí být instalační adresář, aby byl nalezen soubor
:file:`config/elza.yaml`. Službu povolíte a spustíte příkazem
``systemctl enable --now elza``.

Ve Windows lze Elzu provozovat jako službu pomocí nástroje jako WinSW nebo
NSSM, který spouští stejný příkaz ``java -jar``. Viz také `dokumentace
Spring Boot k nasazení
<https://docs.spring.io/spring-boot/how-to/deployment/installing.html>`_.

První spuštění
==============

Výchozí uživatel
----------------

Nová instalace je přístupná pod vestavěným výchozím uživatelem (``admin``
s heslem ``admin``), který má oprávnění administrátora. Použijte jej jen
k vytvoření účtů administrátorů, poté jej vypněte volbou
``elza.security.allowDefaultUser: false`` a aplikaci restartujte. Viz
:doc:`05-zabezpeceni`.

.. _admin_install_dpkg:

Nahrání balíčků
---------------

Elza potřebuje číselníky a pravidla popisu z balíčků v adresáři
:file:`packages/`. Doporučeným způsobem je zkopírovat soubory ZIP do
podadresáře :file:`dpkg/` pracovního adresáře: při každém startu Elza
nahraje z tohoto adresáře každý balíček, jehož verze je vyšší než verze
již nahraného balíčku. Aktualizace pak jen nahradí soubory v :file:`dpkg/`
spolu se souborem JAR.

.. note::

   Pokud :file:`dpkg/` obsahuje starší verzi balíčku, než je verze již
   nahraná, aplikace nenastartuje. Starý soubor odstraňte.

Balíčky lze nahrát také v modulu *Administrace* > *Správa balíčků* (viz
:ref:`ug_admin_packet`).

Import institucí
----------------

Seznam archivů naimportujte ze souboru
:file:`data/all-institutions-import.xml` volbou *Import rejstříkových
hesel* v modulu *Archivní entity*.

Další kroky
-----------

- Nastavení reverzní proxy a HTTPS: :doc:`06-reverzni-proxy`.
- Nastavení zálohování: :doc:`09-zalohovani`.
- Napojení monitorování: :doc:`08-monitorovani`.
- Nastavení autentizace (LDAP, Kerberos, ...): :doc:`05-zabezpeceni`.
