Z balíčků pro Python - PyPI
===========================
Tato část popisuje instalaci **Trytonu** v OS |Ubuntu-server_LTS_18.04_amd64|. Pro úplnost jen uvedu v základních bodech instalaci a konfiguraci virtuálního Ubuntu-serveru.
.. |Ubuntu-server_LTS_18.04_amd64| raw:: html
Ubuntu-server LTS 18.04_amd64
Instalace serveru Ubuntu 18.04 LTS
----------------------------------
* instalace ve virtualizaci KVM, volbou F4 vybráno => minimalistický virtuální stroj
* po instalaci povolen (odkomentován) repozitář "partner" v ``/etc/apt/sources.list``
* v souboru ``/etc/default/apport`` nastavit ``enabled=0``
* update & dist-upgrade
* nainstalovat: ``ssh`` ``mc`` ``htop`` ``nano`` ``ntp``
* pomocí ``netplan`` nastavit pevnou IP adresu
* restart
.. note::
Uvedl jsem svoje první rutinní kroky, při instalaci. Nic ovšem nebrání postupovat i jinak.
Instalace SQL serveru
---------------------
Projekt serveru PostgreSQL má vlastní repozitáře s aktuálními verzemi pro vybrané distribuce. V případě OS Ubuntu pak existují repozitáře pro tzv. LTS verze - aktuálně Ubuntu_16.04 a Ubuntu_18.04. V tomto případě tedy pro instalaci PostgreSQL serveru použijeme balíčky z repozitáře projektu PostgreeSQL.
Postup bude následující:
Nejdříve si přidáme repozitář pro LTS verzi a nainstalujeme server ``postgresql``:
.. code-block:: none
pepa@ubnt: sudo touch /etc/apt/sources.list.d/pgdg.list
pepa@ubnt: sudo nano /etc/apt/sources.list.d/pgdg.list
.. přidáme řádek s adresou a uložíme
..
deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main
..
pepa@ubnt:
.. importujeme klíč a provedeme aktualizaci seznamu balíčků
..
pepa@ubnt: wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
pepa@ubnt: sudo apt-get update
pepa@ubnt:
.. nainstalujeme server PostgreSQL (aktuálně je poslední uvolněná verze 12)
..
pepa@ubnt: sudo apt-get install postgresql-12
Pokračujeme úpravou konfiguračního souboru ``/etc/postgresql/12/main/postgresql.conf``, kde nastavíme, na jakém rozhraní má přijímat spojení :
.. code-block:: none
pepa@ubnt: sudo nano /etc/postgresql/12/main/postgresql.conf
Vyhledáme sekci ``Connection Settings``, odkomentujeme ``listen_addresses`` a uvedeme nastavenou ``'ip adresu serveru'``, příp. ``'*'``
.. code-block:: none
# - Connection Settings -
listen_addresses = 'ip-adresa-serveru'
.. nebo
listen_addresses = '*'
V konfiguračním souboru ``/etc/postgresql/12/main/pg_hba.conf`` následně povolíme, resp. nastavíme, z jakého rozsahu IP adres a s jakou úrovní autentizace má přijímat spojení :
.. code-block:: none
pepa@ubnt: sudo nano /etc/postgresql/12/main/pg_hba.conf
.. note::
Předpokládejme, že rozsah lokální sítě bude ``192.168.1.0/24``
.. code-block:: none
# IPv4 local connections:
host all all 192.168.1.0/24 trust
Nyní si nastavíme heslo pro uživatele **postgres**
.. code-block:: none
pepa@ubnt: sudo su postgres
postgres@ubnt: psql
postgres=# \password postgres
postgres=# Enter new password:
postgres=# Enter it again:
postgres=# \q
postgres@ubnt: exit
Pro kontrolu můžeme restartovat ``postgresql`` server
.. code-block:: none
pepa@ubnt: sudo systemctl restart postgresql
Přistoupíme k vytvoření uživatele pro budoucí databázi **Trytonu** a samotné databáze. Postup v terminálu bude následující:
.. code-block:: none
.. přihlásíme se do postgresql
..
pepa@ubnt: sudo -u postgres psql
postgres=#
.. a můžeme iniciovat vytvoření role ~ uživatele a databáze
..
postgres=# CREATE ROLE nazev_uzivatele WITH LOGIN NOSUPERUSER CREATEDB NOCREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 PASSWORD 'HesloUzivatele';
postgres=#
.. nebo
..
postgres=# CREATE USER nazev_uzivatele password 'HesloUzivatele' CREATEDB;
postgres=#
.. nyní vytvoříme databázi pro Tryton
..
postgres=# CREATE DATABASE nazev_databaze WITH OWNER = nazev_uzivatele ENCODING = 'UTF8' LC_COLLATE = 'cs_CZ.UTF-8' LC_CTYPE = 'cs_CZ.UTF-8' TABLESPACE = pg_default CONNECTION LIMIT = -1 TEMPLATE template0;
postgres=#
.. ukončíme
..
postgres=# \q
pepa@ubnt:
.. a restartujeme postgresql server
..
admin@ubn : sudo systemctl restart postgresql
Nyní se můžete přihlásit do **PostgreSQL serveru** z jiného pc v síti prostřednictvím grafického klinta **pgAdmin** pod nově vytvořeným uživatelem a zkontrolovat, zda má přístupnou databázi vytvořenou pro **Tryton**.
Instalace Trytonu
-----------------
Tato část popisuje instalaci **Trytonu** pomocí balíčkovacího systému pro Python **PyPI**, kde je projekt registrován. Výhoda tohoto postupu je v tom, že je v naší režii, která verze **Trytnu** bude instalována vč. stanovení kdy a co bude aktualizováno. Nevýhodou pak je manuální integrace do systému, především vytvoření konfiguračních souborů a startovacích scriptů. Nicméně, vše uvedu na příkladech.
Budeme potřebovat program ``pip`` a protože **Tryton** od verze 5.0 používá ``Python verze 3``, nainstalujeme ``pip`` pro Python 3.
.. code-block:: none
pepa@ubnt: sudo apt-get install python3-pip
Základ **Trytonu** se na rozdíl od distribučních balíčků nejmenuje ``tryton-server``, ale zkráceně ``trytond``. Nejdříve si nainstalujeme požadované závislosti, které pro verzi **Trytonu 5.0** najdeme na |stránkách projektu|.
V terminálu zadáme:
.. |stránkách projektu| raw:: html
stránkách projektu
.. code-block:: none
.. instalace vyžadovaných závislostí
..
pepa@ubnt: sudo apt-get install python3-werkzeug python3-wrapt python3-lxml python3-relatorio python3-dateutil python3-polib python3-passlib
.. note::
Vyžadovaný ``python3`` by měl být již automaticky nainstalován v průběhu ""čisté" instalace Ubuntu-serveru 18.04, balíčky ``python3-genshi`` a ``python3-magic`` byly nainstalovány během instalace balíčku ``python3-relatorio``.
Může nainstalovat i volitelné závislosti. Zůstaneme v terminálu a zadáme:
.. code-block:: none
.. instalace volitelných závislostí
..
pepa@ubnt: sudo apt-get install python3-psycopg2 python3-pydot python3-levenshteinpython3-bcrypt python3-html2text
.. note::
``psycopg2cffi`` není zahrnut do distribučních balíčků, nutno jej tedy instalovat pomocí pip3
V této fázi můžeme přikročit k instalaci **Tryton serveru** ``trytond``. Nejdříve si můžeme zjistit, jaké verze máme k dispozici - využijeme faktu, že balíčkovací systém při požadavku instalace neexistujícího balíčku nabídne pro výběr seznam dostupných ...
V terminálu zadáme:
.. code-block:: none
.. výpis dostupných balíčků
..
pepa@ubnt: pip3 install trytond==
..
.. a vypsal se nám seznam všech dostupných verzí ...
..
pepa@ubnt:
..
.. pokud požadujeme konkrétní balíček např. z verze 5.0, můžeme rovnou zadat
..
pepa@ubnt: sudo pip3 install "trytond==5.0.15"
..
.. pokud požadujeme nejaktuálnější balíček např. z verze 5.0, zadáme
..
pepa@ubnt: sudo pip3 install "trytond>=5.0,<5.1"
Pro inicializaci databáze a spouštění **Tryton** vyžaduje konfigurační soubor ``trytond.conf``. Zůstaneme u zvyklostí a umístíme jej do ``/etc/tryton/`` spolu s konfiguračním souborem ``trytond_log.conf`` pro vytváření log souborů.
.. code-block:: none
pepa@ubnt: sudo mkdir /etc/tryton
pepa@ubnt: sudo touch /etc/tryton/trytond.conf
pepa@ubnt: sudo touch /etc/tryton/trytond_log.conf
Do vytvořených konfiguračních souborů můžeme následně zkopírovat obsah dle níže uvedených vzorů:
.. list-table::
:widths: 60 15
:header-rows: 0
* - ``/etc/tryton/trytond.conf``
- :download:`zobrazit <../../../config_files/etc_tryton_trytond.conf>`
* - ``/etc/tryton/trytond_log.conf``
- :download:`zobrazit <../../../config_files/etc_tryton_trytond_log.conf>`
Konfigurační soubor Trytonu ``/etc/tryton/trytond.conf`` je ovšem nutno přizpůsobit skutečné realitě. Je nezbytné uvést minimálně dva parametry:
* v sekci ``[web]`` nastavit na jakém rozhraní a portu bude server naslouchat
* v sekci ``[database]`` nastavit databázové spojení
Dále je dobré v sekci ``[web]`` uvést **root adresář** pro web klienta (nabízí se domovský adresář systémového uživatele Tryton), **hostname** pro jmenné zadávání adresy a v sekci ``[database]`` pak **root adresář**, kde bude server ``trytond`` ukládat soubory - samozřejmě, že uživatel, pod kterým je spouštěn ``trytond`` musí mít do daného adresáře právo zápisu.
.. literalinclude:: ../../../config_files/etc_tryton_trytond.conf
:lines: 11,12,17,18,22,23,24,26,30,31,35,51,53,54,56
:emphasize-lines: 4,7,9,12,15
Pro kontrolu si můžeme vypsat nastavené direktivy v ``trytond.conf``. V terminálu zadáme:
.. code-block:: none
pepa@ubnt: cat /etc/tryton/trytond.conf | egrep -v '^$|^#'
Nyní je třeba provést inicializaci databáze serveru ``trytond``, během které se nakonfiguruje databáze vytvořená při instalaci ``PostgreSQL``. Budete vyzváni k zadání emailové adresy administrátora **Trytonu**, hesla a jeho potvrzení.
V terminálu tedy zadáme příkaz:
.. code-block:: none
pepa@ubnt: sudo trytond-admin -c /etc/tryton/trytond.conf -d nazev_databaze_tryton --all
"admin" email for "tryton": tryton@vasedomena.cz
"admin" password for "tryton": Heslo_pro uživatele_tryton
"admin" password confirmation: Heslo_pro uživatele_tryton
V této fázi je základ Trytonu nastaven **nikoliv však spuštěn**. Pro zkušební spuštění zadáme v terminálu následující příkaz:
.. code-block:: none
.. start trytond
..
pepa@ubnt: sudo /usr/local/bin/trytond --config /etc/tryton/trytond.conf
V této chvíli jsme schopni se do **Trytonu** přihlásit prostřednictvím desktopového klienta.
.. rubric:: Integrace **Trytonu** do OS Ubuntu 18.04
Integrace Trytonu do OS Ubuntu představuje manuální vytvoření konfiguračních souborů a startovacích scriptů tak, aby se tryton spouštěl automaticky po startu OS a zapisoval výstupy do logu.
V hlavních bodech se jedná o:
1. vytvoření konfiguračního souboru ``/etc/tryton/trytond.conf``
2. vytvoření konfiguračního souboru ``/etc/tryton/trytond_log.conf``
3. vytvoření systémového uživatele, pod kterým se bude server ``trytond`` spouštět (pokud ho nechceme spouštět pod ``root(em)``)
4. vytvoření startovacích scriptů
**AD 1.** - Konfigurační soubor ``/etc/tryton/trytond.conf`` máme již vytvořený a otestovaný při inicializaci databáze a zkušebním spuštění serveru ``trytond``.
**AD 2.** - Rovněž konfigurační soubor ``trytond_log.conf`` v adresáři ``/etc/tryton/`` již máme vytvořen v předchozích krocích. Nyní jen nastavíme požadovanou úroveň logování: ``DEBUG, INFO, WARNING, ERROR, CRITICAL`` v sekci ``[logger_root]``, resp. direktivě ``level=``. Současně musíme vytvořit adresář do kterého se mají logy zapisovat - viz. sekce ``[handler_rotate]``.
Vzor obsahu konfiguračního souboru:
.. list-table::
:widths: 70 15
:header-rows: 0
* - ``/etc/tryton/trytond_log.conf``
- :download:`vzor <../../../config_files/etc_tryton_trytond_log.conf>`
Příkaz v terminálu pro vytvoření adresáře logování:
.. code-block:: none
pepa@ubnt: sudo mkdir /var/log/tryton
**AD 3.** - Tryton je dobré spouštět pod vlastním uživatelem. Přidáme proto systémového uživatele a skupinu **tryton**, domovský adresář pak využijeme pro ukládání souborů serveru ``trytond`` - jak je uvedeno v ``/etc/tryton/trytond.conf`` v sekci ``[database]``. Dále musíme zajistit, aby vytvořený uživatel mohl číst konfigurační soubory ``trytond.conf`` a ``trytond_log.conf`` v adresáři ``/etc/tryton/`` (a nikdo jíný, protože **obsahují údaje pro přístup do databáze**) a taky mohl zapisovat do adresáře ``/var/log/tryton/`` kdy budou vytvářeny logy. Vše zajistíme násedujícími příkazy v terminálu :
.. code-block:: none
pepa@ubnt: sudo adduser --system --home /var/lib/tryton --group tryton
..
.. úprava práv /etc/tryton/*
..
pepa@ubnt: sudo chown -R root:tryton /etc/tryton
pepa@ubnt: sudo chmod -R o-r /etc/tryton
..
.. úprava práv /var/log
..
pepa@ubnt: sudo chown root:tryton /var/log/tryton
pepa@ubnt: sudo chmod g+w /var/log/tryton
**AD 4.** - V případě instalace **Trytonu** pomocí distribučních balíčků (Ubuntu 19.10) byly vytvořeny startovací scripty jako pro ``systemd``, tak pro ``sysvinit``. V Ubuntu 18.04 však postačí začlenit start **Trytonu** do ``systemd``. Z níže poskytnutého vzoru zkopírujeme obsah do souboru ``trytond.service`` v adresáři ``/etc/systemd/system/``.
Vzor souboru ``trytond.service``
.. list-table::
:widths: 70 15
:header-rows: 0
* - ``/etc/systemd/system/trytond.service``
- :download:`vzor <../../../config_files/etc_systemd_system_trytond.service>`
Postup v terminálu bude následující:
.. code-block:: none
pepa@ubnt: sudo touch /etc/systemd/system/trytond.service
pepa@ubnt: sudo nano /etc/systemd/system/trytond.service
..
.. zkopírujeme obsah ze vzoru a uložíme
..
.. aktivujeme pomocí systemctl
..
pepa@ubnt: sudo systemctl enable trytond.service
..
.. sputíme server trytond
..
pepa@ubnt: sudo systemctl start trytond.service
..
.. a můžeme zkontrolovat stav
..
pepa@ubnt: sudo systemctl status trytond.service
V tuto chvíli máme server ``trytond`` integrován do systému, tj. bude spouštěn automaticky při startu **Ubuntu 18.04** a to pod vlastním uživatelem.
Analogicky budeme postupovat pro vytvoření ``/etc/systemd/system/trytond-cron@.service`` a ``/etc/systemd/system/trytond-worker@.service``.
.. rubric:: Přidávání a aktualizace modulů
Nyní si ukážeme, jak se pomocí v balíčkovacím systému **PyPI** přidávají moduly, které jsme nenainstalovali při prvotní instalaci serveru ``trytond``. Přehled všech modulů najdete |list_modules|. **Jako minimum pro vedení účetnictví** doporučuji tyto moduly : ``account``, ``account_eu``, ``bank`` a ``account_statement``.
.. note::
Při instalaci je třeba k názvu modulu přidat ``trytond_``. Např. - modul ``account`` se přidává jako ``trytond_account``, modul ``account_eu`` pak jako ``trytond_account_eu`` ... atd.
.. |list_modules| raw:: html
zde
Postup je následující :
* pomocí ``pip3`` nainstalujeme příslušné balíčky s požadovanými moduly
* v serveru ``trytond`` zaregistrujeme nově nainstalované moduly
* po přihlášení do sytému moduly aktivujeme a následně pomocí průvodce nakonfigurujeme.
.. code-block:: none
pepa@ubnt: sudo pip3 install "trytond_account>=5.0,<5.1"
Před aktivací a konfigurací modulu ``account`` musíme přidat schéma pro minimální účtový rozvrh. Soubor se jmenuje ``minimal_chart_cs.xml`` a stáhnout si jej můžete :download:`zde <../../../accounting/minimal_chart_cs.xml>`. Nakopírujeme jej do adresáře modulu ``account`` - umístění v našem případě je : ``/usr/local/lib/python3.6/dist-packages/trytond/modules/account``. V tomto adresáři se nachází rovněž konfigurační soubor ``tryton.cfg``, který musíme aktualizovat o přidání českého min. účtového rozvrhu - název jednoduše přidáme do seznamu minimálních účtových rozvrhů v sekci ``xml:``
.. literalinclude:: ../../../config_files/modules_account_tryton.cfg
:lines: 9-22
:emphasize-lines: 1,13
Ukázka instalace vícero modulů najednou:
.. code-block:: none
pepa@ubnt: sudo pip3 install "trytond_account_eu>=5.0,<5.1" "trytond_sale>=5.0,<5.1" "trytond_bank>=5.0,<5.1" "trytond_account_statement>=5.0,<5.1"
Po nainstralování požadovaných modulů je vhodné nahrát nejaktuálnější překlady - pokud jsou k dispozici. Umístění ``.po`` souborů je v našem případě následující:
* pro zákl. modul ``ir`` => ``/usr/local/lib/python3.6/dist-packages/trytond/ir/locale``
* pro zákl. modul ``res`` => ``/usr/local/lib/python3.6/dist-packages/trytond/res/locale``
* pro ostatní moduly => ``/usr/local/lib/python3.6/dist-packages/trytond/modules/nazev_modulu/locale``
Po nainstalování modulů musíme aktualizovat seznam modulů zaregistrovaných v serveru ``trytond``. Po přihlášení na teminál serveru zadáme:
.. code-block:: none
pepa@ubnt: sudo trytond-admin -c /etc/tryton/trytond.conf -d nazev_databaze-trytonu --update-modules-list
..
.. příp. můžeme pro kontrolu restartovat server trytond
..
pepa@ubnt: sudo systemctl restart trytond.service
.. rubric:: Soubory Tryton (pro Ubuntu 18.04)
Pozn. - umístění a obsah odpobvídá souborům nainstalovaných pomocí balíčkovacího systému **PyPI**. Instalace jiným způsobem (např. pomocí **distribučních balíčků**) může znamenat jiné výchozí umístění souborů.
Konfigurační soubory, které je nutno manuálně vytvořit
.. list-table::
:widths: 70 15
:header-rows: 0
* - ``/etc/systemd/system/trytond.service``
- :download:`vzor <../../../config_files/etc_systemd_system_trytond.service>`
* - ``/etc/systemd/system/trytond-cron@.service``
- :download:`vzor <../../../config_files/etc_systemd_system_trytond-cron@.service>`
* - ``/etc/systemd/system/trytond-worker@.service``
- :download:`vzor <../../../config_files/etc_systemd_system_trytond-worker@.service>`
* - ``/etc/tryton/trytond.conf``
- :download:`vzor <../../../config_files/etc_tryton_trytond.conf>`
* - ``/etc/tryton/trytond_log.conf``
- :download:`vzor <../../../config_files/etc_tryton_trytond_log.conf>`
Umístění ostatních souborů
.. list-table::
:widths: 60
:header-rows: 0
* - ``/usr/local/bin/trytond``
* - ``/usr/local/bin/trytond-admin``
* - ``/usr/local/bin/trytond-cron``
* - ``/usr/local/bin/trytond-worker``
* - ``/usr/local/lib/python3.6/dist-packages/trytond``
.. rubric:: Užitečné odkazy
* |Tryton verze 5.0_en|
* |Kombinace příkazů pip|
* |Server trytond|
* |Přehled modulů|
* |Projekt pip-check|
.. |Tryton verze 5.0_en| raw:: html
Tryton verze 5.0_en
.. |kombinace příkazů pip| raw:: html
Kombinace příkazů pip
.. |server trytond| raw:: html
Server trytond
.. |přehled modulů| raw:: html
Přehled modulů
.. |projekt pip-check| raw:: html
Projekt pip-check