6.1. Technická dokumentace
6.1.1. Instalace
Zdrojový kód je kompilován pomocí Apache Maven: mvn clean package -DskipTests
Zkompilovaná aplikace je zabalena v spustitelném .jar souboru.
Závislosti:
PostgreSQL
Java 11+ (OpenJDK)
Apache
Kromě konfigurace Shibboleth a domovských adresářů (součást instalačního balíčku) je vhodné na úrovni Apache - nikoliv na úrovni webové aplikace - konfigurovat také klient timeout. Tento timeout se projeví odpojením klienta - webové aplikace - ve chvíli kdy server, např. kvůli zvýšené zátěži, není schopný zpracovat požadavek v čase. Na severu požadavek běží i po uplynutí timeoutu.
Timeout je konfigurovatelný v sekundách v souboru httpd.conf, případně ve vhosts sekci, pokud jsou vhosts konfigurovány. Příklad konfigurace: Timeout 900. Defaultní hodnota je 300 sekund.
Elasticsearch 6.8.2
Elasticsearch doporučujeme instalovat standartně přes Správce balíčků (package manager), pokud je toto z nějakého důvodu nevyhovující, přikládáme alternativní postup instalace.
Struktura
Struktura je aktualně nasledující:
drwxrwsr-x 2 inqool elasticsearch 178 May 10 22:50 config
drwxrwsr-x 4 elasticsearch elasticsearch 34 May 10 22:47 data
drwxrwsr-x 6 inqool elasticsearch 117 May 10 22:37 elasticsearch-6.8.2
lrwxrwxrwx 1 elasticsearch elasticsearch 20 May 10 22:46 elasticsearch-current -> elasticsearch-6.8.2/
drwxrwsr-x 2 elasticsearch elasticsearch 6 May 10 22:46 run
Jedná se o variantu ve které jsou logy, data a konfigurace odděleně od binarních dat za účelem jednodušších aktualizací a vyšší bezpečnosti. Právo zápisu do binarních dat a konfigurací má pouze uživatel inqool.
Instalace (CentOS 7)
yum install epel-release
yum install java-11-openjdk
cd /opt
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.2.tar.gz
tar -xf elasticsearch-6.8.2.tar.gz
elasticsearch-6.8.2/bin/elasticsearch-plugin install analysis-icu
mkdir config data logs run
ln -s elasticsearch-6.8.2 elasticsearch-current
wget https://raw.githubusercontent.com/elastic/elasticsearch/master/distribution/packages/src/common/systemd/elasticsearch.service
edit elasticsearch.service as you need
Environment=ES_HOME=/usr/share/elasticsearch
Environment=ES_PATH_CONF=${path.conf}
Environment=PID_DIR=/var/run/elasticsearch
WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStart=/opt/elasticsearch/elasticsearch-current/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
cp elasticsearch.service /etc/systemd/system
systemctl daemon-reload
edit /opt/elasticsearch/config/elasticsearch.yml
path.logs: /opt/elasticsearch/logs
path.data: /opt/elasticsearch/data/index
edit /opt/elasticsearch/config/jvm.options
-XX:ErrorFile=/opt/elasticsearch/logs/hs_err_pid%p.log
8:-Xloggc:/opt/elasticsearch/logs/gc.log
9-:-
Xlog:gc*,gc+age=trace,safepoint:file=/opt/elasticsearch/logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
systemctl start elasticsearch
systemctl enable elasticsearch
Formátová identifikace
Pro formátovou identifikaci lze použít nástroje Siegfried nebo Droid. Cesta k binárnímu souboru / spustitelný příkaz je nakonfigurován v application.yml (formatLibrary.identificationToolBinary) Typ nástroje je také konfigurován v application.yml (formatLibrary.identificationToolType), možné hodnoty: SIEGFRIED, DROID
ActiveMQ 5.x (volitelné)
ActviveMQ je použito pro některá synchronizační volání z ESM do ostatních modulů. Zprávy jsou uloženy do persistentní fronty a z ní odbavovány.
Defaultně je použit embedded ActiveMQ broker, v tomto případě není třeba nic instalovat ani konfigurovat. Data fronty jsou uložena v složce data/kahadb v pracovním adresáři aplikace ESM. Pokud je to potřeba je možné tento adresář změnit nastavením konfigurační property aplikace ESM: queue.dir.
Standalone služba
Pro podporu monitoringu fronty a její správu (např. odebrání blokujícíh zpráv) je možné nainstalovat ActiveMQ jako standalone aplikaci. Pro stažení může být použit např. tento odkaz: https://activemq.apache.org/components/classic/download/
Při spuštění v standalone režimu jsou data defaultně uložena v složce data/kahadb v pracovním adresáři aplikace ActiveMQ. V konfiguračním souboru aplikace ESM je v tomto případě nutno nastavit: spring.activemq.broker-url: tcp://localhost:61616 a také spring.activemq.in-memory: false Defaultní port ActiveMq je 61616. Webové rozhraní je defaultně na adrese http://localhost:8161/admin, jméno:heslo je admin:admin .
Administrátorské zásahy do fronty:
Je-li aplikace ESM vypnuta lze zprávy z fronty přímo mazat tlačítkem Delete.
Je-li aplikace ESM zapnuta mělo by mazání probíhat přesunem zprávy do speciální SKIP fronty tlačítkem Move.
Chceme-li zprávu pouze odložit (a odblokovat tím ostatní zprávy) můžeme
ji odložit do pro tento účel manuálně založené fronty POSTPONED (na tuto není aplikace napojena, nebude do ní tedy zasahovat)
textovou reprezentaci zprávy vykopírovat, následně ji smazat jedním z výše uvedených kroků a následně ji opět ručně založit v příslušné frontě
zprávu lze do fronty zařadit v ActiveMQ admin rozhraní, tlačítkem Send To u příslušené fronty na obrazovce přehledu front
do pole Message Body se vloží vykopírovaná zpráva, do pole Message Header je nutné zadat pouze Persistent Delivery:ANO, Priority:4
Mazání/odkládání zpráv by mělo být pečlivě zváženo, neboť úspěšné zpracování následujících zpráv ve frontě, potažmo konzistence systému, mohou být závislé na zpracování smazaných/odložených zpráv.
Pokud je potřebné jakékoliv z defaultních nastavení standalone verze změnit je tak možné učinit přímo konfigurací ActiveMq, nikoliv konfigurací aplikace ESM.
Při přechodu z jednoho režimu na druhý (Embedded <-> Standalone) je možné při vypnutém systému překopírovat datový obsah a neztratit tak data fronty.
Spuštění aplikace z příkazové řádky
Restartování aplikace spuštěné přímo z příkazové řádky:
pomocí ps xw nalézt PID JAVA procesu esm.jar
kill <PID>
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 esm.jar $> esm.log
agentlib:jdwp lze vypustit, slouží pro možnost remote debuggingu
pracovní adresář je automaticky adresář z nějž je aplikace spuštěna, lze změnit přepínačem -Duser.dir={cesta}
Spuštění aplikace jako služby
esm.service - vzorový konfigurační soubor pro systemd službu
[Unit]
Description=ESM
After=syslog.target
[Service]
User=ais
ExecStart=/opt/ais/esm/esm.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
esm.conf - konfigurační soubor systemd služby - vložit do pracovního adresáře aplikace
JAVA_OPTS="-XX:MaxMetaspaceSize=800M -Xmx4096M"
6.1.2. Konfigurace
Systém
Aplikace je konfigurovatelná skrze soubor application.yml který se nachází v pracovním adresáři. Konfigurační hodnoty v tomto souboru překrývají defaultní konfigurační hodnoty v souboru application.yml nacházejícím se ve složce src/main/resources. Po přepsání souboru je pro projevení změn nutné aplikaci restartovat. Při konfigurování atributů cest na souborovém systému lze zadat relativní cestu vzhledem k pracovnímu adresáři.
Cron používaný aplikací musí být ve formátu: second, minute, hour, day of month, month, day(s) of week.
ais:
path:
# root složka, níže definované workspaces vychází z ní
core-workspace: /opt/ais
# workspace využíváno především pro import dat z modulu Výběr
esm: dataspace/esm
# export workspace
export: dataspace/export
# ingest workspace - mělo by být rychlé
ingest: workspace/ingest
# počet vláken dedikovaných pro ingest/revert
threadPools:
ingest: 8
revert: 8
#konfigurace Shiboleth
api:
security:
scheme: header
principalHeader: "X-SSO-Username"
spring:
data:
elasticsearch:
cluster-name: ESM ElasticSearch
cluster-nodes: localhost:9300
datasource:
url: jdbc:postgresql://host:port/ais?currentSchema=peva
username: changeme
password: changeme
#konfigurace mail serveru skrz který ESM odesílá emaily
mail:
host: 127.0.0.1
port: 25
protocol: smtp
test-connection: false
activemq:
in-memory: false
broker-url: tcp://localhost:61616
server:
servlet:
context-path: /esm
session:
timeout: 6h
cookie:
path: "/esm"
compression:
enabled: true
mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
min-response-size: 1024
vyber:
enabled: true
endpoint: http://host:port/ws/vyber
host: host
port: port
username: changeme
password: changeme
whois:
endpoint: https://host/webapps/testing/core/restapi/v1
elza:
enabled: true
endpoint: http://host:port/services
host: host
port: port
username: changeme
password: changeme
# interval aktualizace přístupových bodů upravených v ELZA (ms)
registry.fixed-delay: 900000
badatelna:
endpoint: http://host/badatelna/ws
ft: http://host/badatelna/cxf/ft
enabled: true
archivalStorage:
api: http://host:port/api
# údaje účtu v Archival storage zakódované v base64
authorization:
basic:
read: base64encode(username:password)
readWrite: base64encode(username:password)
admin: base64encode(username:password)
# konfigurace do kdy ESM čeká odpovědi z Archival Storage, popsáno v technické dokumentaci, sekce Integrace
async:
retry:
limit: 30
interval: 60
storeVerification:
retry:
limit: 5
interval: 3000
firstAttemptDelay: 500
ws:
mail:
#adresa odesílatele uvedeného v emailu zaslaného z ESM
from: noreply@ais-ap1tst.is.cuni.cz
#přístupové údaje k ESM mail službě, použijí externí systémy, nap. Výběr
security:
username: changeme
password: changeme
# interaktivní API dokumentace, značně zpomaluje start systému (minuty)
environment:
swagger:
enabled: false
abm:
enabled: true
endpoint: http://localhost:8095 # endpoint WS ABM modulu
preservation-planning:
enabled: true
endpoint: http://localhost:8095 # endpoint WS FMT modulů
analysis:
default-config-id: 25e175e1-7dfc-4766-ae70-ca7bee84b126 # UUID přednastaveného workflow při zakládání dávky FMT analýzy z ESM
batch-size-warning:
file-meta-size-kb: 40 # odhadovaná velikost metadat zaslaných FMT modulem + velikost AIP XML pro jeden balíček
file-size-multiplier: 1.9 # odhadovaná velikost nového souboru po FMT migraci
batch-max-size-mb: 1000 # pokud odhadovaná velikost dávky přesáhne tuto mez, je v UI ESM zobrazeno varování
# odhadovaná velikost dávky FMT analýzy v MB = file-meta-size-kb * počet souborů / 1000
# odhadovaná velikost dávky FMT migrace v MB = file-meta-size-kb * počet souborů / 1000 + file-size-multiplier * velikost vstupních souborů / 1000000
# zdrojové URL pro update formátové knihovny
formatLibrary:
formatDetailListUrl: https://www.nationalarchives.gov.uk/PRONOM/Format/proFormatListAction.aspx
formatListUrl: https://www.nationalarchives.gov.uk/PRONOM/Format/proFormatDetailListAction.aspx
export:
operation:
watermark:
opacity: 30%
metadata-reduction:
size-limit: 20MB
#doba (ms) úřed opětovným pokusem odbavení selhaného (blokačního) požadavku z fronty ESM->Badatelna / ESM->ELZA
queue:
redelivery-delay: 1800000
#konfigurace UUID formátů souborů pro které není analyzován obsah za účelem indexace fulltextového obsahu
elasticsearch:
index:
fulltext-file-format-blacklist: >
sampleid1,
sampleid2
6.1.3. Databáze
Všechny entity používají UUID.
Tabulky jsou generovány při prvním spuštění aplikace.
Aplikačnímu serveru musí být povolen přístup k DB s přihlašováním typu “md5”
6.1.4. Instalační balíček
Pro instalaci je dodán samostatný ESM instalační balíček.
Databáze je iniciována z DB dumpu aisDump.bin
Dále jsou dodány tyto přílohy:
esm.jar - zkompilovaná aplikace
application.yml - konfigurační soubor překrývající defaultní konfiguraci - vložit do pracovního adresáře aplikace. Jedná se o vzorový soubor, jednotlivé konfigurační hodnoty může být nutné upravit dle konkrétního prostředí.
httpd.conf - hlavní konfigurační soubor Apache
conf.d.zip - další konfigurační soubory Apache
web-build.zip - build GUI aplikace - rozbalit a nakopírovat obsah složky „build“ do /inet/www/html-ais/esm (dle httpd konfigurace)
ukDump.bin - dump dat archivu Univerzity Karlovy z PEVA II, který je možné použít v rámci procesu migrace mezivýstupu z DB PEVA II do DB AIS
Nástroje vývojáře
Po spuštění BE i FE části aplikace je nutné v GUI systému v sekci Nástroje vývojáře kliknout na tlačítko REINDEX ALL. Zároveň je v této sekci nutné iniciovat databázi ELZA a Badatelny migrovanými osobami, archivními soubory a ukládacími jednotkami. Dále je nutné v provést aktualizaci formátové knihovny: Nástroje vývojáře -> Skritpy -> Synchronizační API -> Pronom -> Aktualizovat.
Spuštění bez SSO a integrací (vývojové prostředí)
Pro spuštění bez SSO a integrací doporučujeme nepoužít přiložený application.yml ale použít soubor application.yml z návodu k migraci v němž není definováno SSO a tedy budou použity defaultní aplikační nastavení. Zároveň jsou v něm vypnuty integrace na moduly ELZA, Výběr apod.
Autentizaci testovacího uživatele (je součástí dumpu) je následně možné simulovat přes hlavičky. Pro simulování např. v prohlížeči Google Chrome je možné využít např. tento plugin: https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj Následně je třeba použít hlavičky: SM_USER=un_pevaa1095 a SM_ROLES=620000010=SUPER_ADMIN
6.1.5. Integrace
Archival Storage
Uložení balíčku do Archival Storage probíhá vždy v rámci ingestu a vždy ve dvou krocích: 1. uložení, 2. dotaz na stav.
Uložení
ESM získává odpověď na požadavek uložení ve chvíli kdy jsou data nahrána do workspace Archival Storage, samotné uložení v Archival Storage však probíhá asynchronně. Pokud je iniciální odpověď chybová, ESM vyčká a pokusí se iniciální operaci několikrát zopakovat. Doba čekání i počet opakování je konfigurován v application.yml. Stejné hodnoty a mechanismus je použitý při požadavcích na export balíčku.
archivalStorage.async.retry.interval: 60 - počet sekund mezi pokusy
archivalStorage.async.retry.limit:3 - max. počet pokusů
Dotaz na stav
Po úspěšné odpovědi na požadavek uložení volá ESM periodicky Archival Storage API s dotazem na stav uložení.
archivalStorage.storeVerification.firstAttemptDelay: 500 - počet milisekund před prvním dotazem na stav (nemělo by být nižší než předpokládaná doba zpracování nejmenšího balíčku)
archivalStorage.storeVerification.retry.interval: 3000 - počet milisekund mezi dalšími dotazy na stav
archivalStorage.storeVerification.retry.limit: 5 - mx. počet dotazů na stav, pokud do této doby není balíček uložen je ingest ukončen s chybou a balíček rollbackován