.. _install_src:

****************************
Instalace ze zdrojového kódu
****************************

.. include:: /roles.rst


Požadavky před instalací
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Pro instalaci Elza je potřeba mít nainstalován tento software:

* `Git 1.9+ <https://git-scm.com/downloads>`_

* `Oracle JDK 8 <http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html>`_

* `Apache Maven 3.2.+ <https://maven.apache.org/download.cgi>`_

* `Node.js 5.1.0+ <https://nodejs.org/>`_ včetně správce balíčků NPM

Získání zdrojových kódů
"""""""""""""""""""""""""""""
Zdrojové kódy aplikace Elza získáme zavoláním následujícího příkazu v adresáři kam ji chceme uložit.

.. code-block:: none

		git clone https://bitbucket.org/tacr/elza.git


.. _install_src_db:


Podporované databáze
""""""""""""""""""""
Pro běh aplikace Elza je potřeba databáze (DB) podporující:

* Datový typ *Geometry*.

* České locale tj. DB musí mít při založení nastaveno české locale pro collate, ctype.

ELZA podporuje tyto databázové servery:

- PostgreSQL (Doporučené, primární platforma)
	* Pro tento databázový server je vyžadována verze 9.6 nebo vyšší a rozšíření `PostGis <http://postgis.net/>`_.

	* Po instalaci je potřeba založit v DB samostatného uživatele např. "elza". Při zakládání DB je tento uživatel použit jako vlastník DB.

	* DB pro Elza by měla být založena s nastavením LC_COLLATE a LC_CTYPE (porovnávání a klasifikace znaků) na české locale dle dostupnosti v daném systému např. "Czech_Czech Republic.1250" ve Windows, "cs_CZ.UTF-8" v Linuxu. Dostupná locale v Linuxu lze zjistit příkazem "locale -a". Tato nastavení se provádějí v době zakládání nové DB.

	* V založené DB musí být následně aktivován doplněk PostGis. Pro tento krok musí mít založený uživatel v DB pro Elzu oprávnění administrace dané DB. Následně je možné doplněk aktivovat pomocí dotazu:

	.. code-block:: SQL

		 CREATE EXTENSION postgis;

- H2

   Embedded databáze, využívá se proběh testů, limitovaná podpora při migraci dat mezi verzemi, chybí podmíněné indexy

Dřívější experimentální podpora:

- MSSQL

   Je vyžadována verze MSSQL 2008, není potřeba žádná specální instalace, je nutná vlastní definice indexů a zajištění migrace dat

Pro jiné datové servery než PostgreSQL je nutné dodat jdbc ovladač. Ovladače je nutno doplnit do závislostí v ``pom.xml`` v kořenovém adresáři.


Nepodporované databáze:

 - MySQL (Netestováno)

	Pravděpodobně nefunkční z důvodu chybějící podpory CTE

- Oracle (Netestováno)

	Pro tento databázový server je vyžadována verze Enterprise. Pouze verze Enterprise umí pracovat s datovým typem Geometry.




.. _konfigurace:

Konfigurace
"""""""""""
V adresáři ``elza-web/config`` je potřeba založit soubor ``elza.yaml`` (pro produkční prostředí v Tomcat soubor ``elza-ui.yaml``),
který obsahuje konfiguraci připojení k databázi.
Soubor je možné vytvořit ze souboru ``elza.yaml.template``.

.. _nastaveni_databaze:

Databáze
########

V souboru ``elza.yaml`` je potřeba správně vyplnit údaje pro připojení k databázi.

		url
				Adresa pro připojení k databázi.

				.. code-block:: none

						url: jdbc:postgresql://localhost/elza

				postgresql
						typ datového serveru
				localhost
						adresa datového serveru
				elza
						název databáze

		username
				Platné uživatelské jméno. Uživatel musí být zároveň vlastníkem uvedené databáze.

		password
				Heslo zadaného uživatele.


.. code-block:: none

		elza:
		  data:
		    url: jdbc:postgresql://server/databaze
		    username: uzivatel
		    password: heslo

		spring:
		  jpa:
		    properties:
		      hibernate:
		        # PostgreSQL
		        dialect: org.hibernate.spatial.dialect.postgis.PostgisDialect
		        # H2
		        #dialect: org.hibernate.spatial.dialect.h2geodb.GeoDBDialect
		        # MySQL
		        #dialect: org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect
		        # Oracle
		        #dialect: org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect
		        # MSSQL
		        #dialect: org.hibernate.dialect.SQLServer2008Dialect

.. _pracovni_adresar:

Pracovní adresář
################

Pracovní adresář je adresář, do kterého si aplikace Elza ukládá soubory, které používá (soubory pravidel, šablony výstupů, vygenerované výstupy atd.)

Definovat pracovní adresář je potřeba jen v případě, kdy je elza spuštěna v tomcat serveru.

Pracovní adresář se definuje v konfiguračním :ref:`souboru<konfigurace>` ``elza.yaml`` nebo ``elza-ui.yaml``.

Definuje se zadáním parametru *workingDir* na stejnou úroveň jako parametr data . Jako hodnota parametru *workingDir* se zadává absolutní cesta k adresáři, do kterého se mají soubory ukládat.

.. code-block:: none

		elza:
		  data:
		    url: jdbc:postgresql://server/databaze
		    username: uzivatel
		    password: heslo

		  workingDir: /absolutni/cesta/k/adresari

		spring:
		  jpa:
		    ...


Sestavení verze určené pro vývoj
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

	Aplikaci sestavíme zavoláním následujícího příkazu v kořenovém adresáři ``elza``:

	.. code-block:: none

		 mvn install -Pskiptest

`Instalace balíčků NPM`
"""""""""""""""""""""""
	Balíčky NPM aktualizujeme zavoláním následujícího příkazu v adresáři ``elza-web``:

	.. code-block:: none

		 mvn exec:exec -Pnpm-install

`Spuštění`
""""""""""""""""""

	Aplikační server spustíme zavoláním následujícího příkazu v adresáři ``elza-web``:

	.. code-block:: none

		 mvn spring-boot:run


	Server pro uživatelské rozhraní spustíme zavoláním následujícího příkazu v adresáři ``elza-web``:

	.. code-block:: none

		 mvn exec:exec -Pfrontend-dev


Sestavení produkční verze
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Produkční verzi aplikace sestavíme zavoláním následujícího příkazu v kořenovém adresáři ``elza``:

		.. code-block:: none

				mvn clean install -Pskiptest,release

V adresáři ``elza-web/config`` je nutné vytvořit ``elza-ui.yaml`` z ``elza.yaml.template``

* Zadat správné údaje pro připojení k databázi viz :ref:`nastavení připojení k databázi<nastaveni_databaze>`.
* Přidat cestu k pracovnímu adresáři viz :ref:`pracovní adresář<pracovni_adresar>`.

* Zakomentovat řádek s *buildType*

		.. code-block:: none

				buildType: DEV -> #buildType: DEV

* Vložit ``elza-ui.yaml`` do balíku ``elza.war`` do adresáře ``WEB-INF/classes``. Balík ``elza.war`` je umístěn v adresáři ``elza-war/target``. Vložení lze provést například pomocí komprimačního nástroje `7-zip <http://www.7-zip.org/>`_

Instalace Tomcat
""""""""""""""""

Z balíčku
		Stáhnout `Tomcat ve verzi 8.0.x <http://mirror.dkm.cz/apache/tomcat/tomcat-8/v8.0.37/bin/apache-tomcat-8.0.37.zip>`_ a rozbalit do libovolného adresáře.

Jako služba Windows
		* Stáhnout `instalátor <http://mirror.dkm.cz/apache/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.exe>`_
		* Nainstalovat Normal nebo Full instalaci.


Spuštění v Tomcat
"""""""""""""""""
* Přejmenovat ``elza.war`` na ``ROOT.war``
* Vložit soubor ``ROOT.war`` do adresáře ``webapps`` v kořenovém adresáři Tomcatu (adresář kam byl Tomcat nainstalován nebo rozbalen)
* Spustit Tomcat pomocí souboru ``startup.bat`` umístěného v adresáři ``bin`` nebo spustit službu pomocí Tomcat monitoru pokud neběží.
* K Elze je poté možno se dostat na adrese `http://localhost:8080/ <http://localhost:8080/>`_
* V adresáři ``logs`` kořenového adresáře Tomcatu se nachází výstupy ze serveru
* Ověřit, že je Tomcat povolen v nastavení firewall

Výchozí uživatel
^^^^^^^^^^^^^^^^
Po instalaci nové verze je možné se do aplikace přihlásit jako uživatel ``admin`` s heslem ``admin``.
Výchozí uživatel má oprávnění administrátora. Po prvotní konfiguraci aplikace a vytvoření
uživatelských účtů je vhodné přihlášení výchozícho uživatele zakázat.

Nastavení výchozího uživatele se nastavuje pomocí volby: `elza.security.allowDefaultUser:false`.

Způsob zakázání výchozího uživatele v elza-ui.yaml:

.. code-block:: none

		elza:
		  security:
		    allowDefaultUser: false
		    ...

První spuštění
^^^^^^^^^^^^^^
Po prvním spuštění aplikace je nutné přidat balík se základními pravidly,
importovat instituce a vytvořit uživatelské účty.

Vytvoření uživatelů
"""""""""""""""""""

Po prvním spuštění aplikace je nutné vytvořit účet administrátora aplikace a
další jednotlivé uživatelské účty. Po jejich vytvoření zakažte možnost přihlášení
výchozího uživatele.

Přidání balíku pravidel
"""""""""""""""""""""""

Přidání balíku je možné v modulu ``Administrace/Správa balíků``. Zde stačí vybrat balík a poté kliknout na importovat. Balík základních pravidel 2015 se nachází v adresáři ``rules-cz-zp2015``.

Import instituce
""""""""""""""""

Import instituce je možno provést v modulu Osoby. Po kliknutí na importovat je nutné vybrat scope rejstříku a zdrojový soubor, ze kterého se insituce naimportuje.
Pro import institucí lze použít soubor ``all-institutions-import.xml``, který se nachází v adresáři ``package-cz-base/src/``.

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ář
