﻿.. _admin_install:

===================================
Instalace pomocí binární distribuce
===================================

Binární distribuce aplikace Elza pro samostatnou instalaci.

Podporované systémy:
 * Java 1.8 a vyšší
 * Microsoft Windows nebo Linux
 * Databáze:

  - Postgresql


Předpoklady
===========

Nainstalována databáze Postgresql.


Postup instalace Elza
=====================

Standardní binární distribuce obsahuje:

 - soubor :file:`readme.txt` - stručný popis instalace
 - adresář :file:`packages` - výchozí data pro aplikaci
 - adresář :file:`server` - hlavní spustitelný soubor :file:`elza-tomcat-verze.jar` 
   a vzorovou konfiguraci

Součástí hlavního souboru JAR je vložen webový server a aplikaci je možné spouštět
bez nutnosti instalace a konfigurace samostatného aplikačního serveru.

Podporované možnosti instalace jsou:
 * Linux/Unix - init.d služba (System V)
 * Linux/Unix - systemd služba
 * služba systému Windows

Podrobný seznam možností konfigurace zde: 
`Dokumentace Spring Boot <https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment-install>`_.


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

#. Pro přístup k databází vytvořte v Postgres samostatného uživatele.
   Například: 'elza'.

   Nepoužívejte účet administrátora pro přístup k databázi.

#. Vytvořte prázdnou databázi, jejíž vlastníkem je uživatel z předchozího bodu.

    .. code-block:: SQL

       CREATE DATABASE elza OWNER = 'elza';

 nebo příkazem v shellu:

    .. code-block:: BASH

       createdb -l cs_CZ.utf8 -O elza -T template0 elza


       
#. Pro další krok je potřeba povolit uživateli (uživatel 'elza') oprávnění pro nastavení rozšíření. Nejjednoduší způsob je dočasně nastavit uživateli právo superuživatel.

    .. code-block:: SQL

       ALTER USER elza WITH SUPERUSER;

#. Připojte se k databázi jako vlastník (uživatel 'elza') a přidejte do databáze možnost používat rozšíření PostGIS:

    .. code-block:: SQL

       psql -U elza -W -d elza
       CREATE EXTENSION postgis;
       
#. Po úspěšném vytvoření rozšíření PostGIS lze uživateli opět odebrat práva superuživatele.

    .. code-block:: SQL

       ALTER USER elza WITH NOSUPERUSER;

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

Aplikace Elza vyžaduje instalační a pracovní adresář.
Do pracovního adresáře se budou ukládat
pravidla popisu, tiskové šablony, vygenerované tisky, logy a další.

Příklad cílového rozložení na disku:

 - :file:`/opt/elza/server` - adresář s nainstalovanou aplikací (JAR + konfigurační soubor)
 - :file:`/opt/elza/work` - pracovní adresář

Ve Windows se cesty uvádějí takto: ``D:\Elza\work``

Připravte instalační adresář pro Elzu. Do adresáře zkopírujte JAR a vzorovou konfiguraci.
Příklad výsledné podoby:

 - :file:`D:\\Elza\\server\\elza-tomcat-2.0.0.jar`
 - :file:`D:\\Elza\\server\\config\\elza.yaml`


Doporučení pro instalaci v Linuxu
------------------------------------

V adresáři :file:`server` vytvořte symbolický link
na hlavní soubor. Při přechodu na novější verzi stačí aktualizovat jen 
tento link.

Příklad: :file:`/opt/elza/server/elza-tomcat.jar` -> :file:`/opt/elza/server/elza-tomcat-2.0.0.jar`


Vytvořte samostatného uživatele pod nímž bude aplikace spuštěna. 
Tento uživatel by měl být vlastníkem pracovního adresáře a mít k němu
plná práva.

Připravte samostatnou službu umožňující spuštění aplikace.

Příklad konfiguračního souboru (:file:`/etc/systemd/system/elza.service`):

.. literalinclude:: examples/elza.service
   :language: cfg


.. _Admin_InstallBinConf:

Konfigurace a spuštění Elza
---------------------------
#. V adresáři :file:`server` je vzorový soubor :file:`elza.yaml`. Ten otevřete a upravte
   dle nastavení v předchozích bodech. Minimálně je nutné nastavit:
   - připojení k databázi (sekce elza: data:)
   - cestu k pracovnímu adresáři (workingDir:)

#. Upravený soubor :file:`elza.yaml` nahrajte do adresáře :file:`config`

#. Spusťte aplikaci
   V případě správné konfigurace dojde k vytvoření tabulek v databázi a nastartování
   aplikace.

.. _Admin_InstallRevProxy:

Provoz pomocí reverzní proxy
--------------------------------

Aplikace Elza je často provozována za reverzní proxy. Ta umožňuje její běh na
veřejné adrese archivu (například: https://elza.archiv-xy.cz, případně: https://www.archiv-xy.cz/elza).
V rovině reverzní proxy lze využít Apache HTTPD nebo NGINX.

Příklad konfigurace pro https://elza.archiv-xy.cz

.. code-block:: apache

  <VirtualHost elza.archiv-xy.cz:443>
    ServerName elza.archiv-xy.cz
    ProxyPreserveHost On
    ProxyRequests Off

    ProxyTimeout 60

    ProxyPass "/stomp" "ws://vnitrni-server.archiv.cz:8080/stomp"
    ProxyPassReverse "/stomp" "wss://elza.archiv-xy.cz/stomp"

    ProxyPass "/" "http://vnitrni-server.archiv:8080/"
    ProxyPassReverse "/" "https://elza.archiv-xy.cz/"

  </VirtualHost>


Příklad konfigurace pro https://www.archiv-xy.cz/elza s využitím rewrite filtru 
a přesměrováním požadavku na vnitřní server :token:`10.2.0.27`:

.. code-block:: apache

  <VirtualHost www.archiv-xy.cz:443>
    ServerName www.archiv-xy.cz

    <Location "/elza">

    RequestHeader set X-Forwarded-Prefix "/elza"
    RequestHeader set X-Forwarded-Host "www.archiv-xy.cz"
    RequestHeader set X-Forwarded-Proto "https"    

    RewriteEngine On

    RewriteCond %{HTTP:Upgrade} websocket               [NC]
    RewriteRule   "/elza/(.*)$"  "ws://10.2.0.27:8080/$1" [P]
    RewriteRule   "/elza/(.*)$"  "http://10.2.0.27:8080/$1" [P]

    </Location>

  </VirtualHost>

.. _Admin_InstallRevProxy_Sub:

Provoz na jiném než kořenovém URL
-----------------------------------------

Aplikaci je možné provozovat i na jiném než kořenovém URL, například: https://www.archiv-xy.cz/elza.
V takovém případě je nutné pomocí reverzní proxy směrovat požadavky z webového serveru 
do aplikace Elza, více viz: :ref:`Admin_InstallRevProxy`. Na straně Elza je nutné 
navíc povolit akceptaci hlaviček **X-Forwarded-....** obsahujícími informace o původním
URL. V yaml konfiguraci je nutné aktivovat volbu **elza.security.acceptForwardedHeaders=true**.

Příklad konfigurace:

.. code-block:: yaml

   elza:
     .......
     security:
       acceptForwardedHeaders:true
     .......



Nastavení po prvním spuštění
----------------------------

Po úspěšném startu aplikace je nutné v ní nastavit číselníkové hodnoty a pravidla
pro zpracování archiválií.

#. Ve správě balíčků do aplikace nahrajte balíček ``packages/package-cz-base.zip``

#. ve správě balíčků do aplikace nahrajte balíček ``packages/rules-cz-zp2015.zip``

#. proveďte import paměťových institucí volbou Osoby / Import osob
   ze souboru se seznamem institucí. Seznam akreditovaných institucí v ČR 
   je dostupný jako soubor ``all-institutions-import.xml``, dostupný zde: `GitHub Elza/all-institutions-import.xml <https://github.com/elzasw/elza/raw/release-2.0/elza/package-cz-base/src/all-institutions-import.xml>`_.


.. _admin_install_dpkg:

Automatizace aktualizace balíčků
===================================

Pro Elza je možné nastavit režim automatické aktualizace balíčků při spuštění aplikace. 
Pokud existuje v pracovním adresáři složka :file:`dpkg` jsou automaticky ihned po startu
načteny všechny soubory s koncovkou ``.zip``. Pokud se jedná o balíček a tento balíček je ve 
vyšší verzi, než-li aktuálně dostupný, je tento automaticky aktualizován.

Tento postup je výhodný pro  automatické aktualizace balíčků při aktualizaci aplikace
Elza.


Zálohování dat
==============

Je doporučeno data uložená v aplikaci pravidelně zálohovat. Záloha by měla být provedena vždy před aktualizací aplikace.

Předmět zálohy:
 * databáze
 * pracovní adresář
