Upgrade R2-2021 auf R3-2021 "Kiwi"
Upgrade FOLIO R2-2021 "Juniper" => R3-2021 "Kiwi"
*************************************************
Installationsnotizen von Ingolf. Durchgeführt zwischen 01.02. und 21.02.2022 auf hbz-Testrechner folio-hbz5 (10.9.2.86) + DB-Server (hbz-Test, 10.9.2.65)
Auf Basis von "platform-complete"
Mit automatischer Migration der Datenbankinhalte
Deployment mit Okapi, "Single Server" auf BS Ubuntu 20.04.2 LTS
# Benötigt für den Upgrade werden:
8 CPUs
40 GB RAM
empfohlen: 350 GB SSD HD
# Ubuntu Updates installieren
sudo apt-get update
sudo apt-get upgrade
sudo reboot
# Sind alle Services wieder angestartet ? (Okapi, postgres, docker)
# Kiwi Versionshinweise:
https://folio-org.atlassian.net/wiki/display/REL/Kiwi+%28R3+2021%29+Release+Notes
# Daraus abgeleitete erforderliche Aktionen vor dem Upgrade (Ingolf):
I.) Vorbereitende Arbeiten
# ************************
i.) Vor dem Upgrade: Ändern Sie alle doppelten Artikel-Barcodes.
Finden Sie sie mit diesem SQL:
pslq folio
SET search_path TO diku_mod_inventory_storage;
SELECT lower(jsonb->>'barcode')
FROM item
GROUP BY 1
HAVING count(*) > 1;
lower
-------
(0 rows)
# Verwenden Sie die Barcode-Suche nach Inventarartikeln, um den doppelten Barcode zu bearbeiten. (gibt keine)
ii.) DB-Tabellen können Bestandsdatensätze mit falschem Quellwert enthalten.
siehe hier https://folio-org.atlassian.net/wiki/pages/viewpage.action?pageId=1390748 :
# Select Holdings where sourceName are not FOLIO and MARC
SELECT
*
FROM ${tenant}_mod_inventory_storage.holdings_record
WHERE ${tenant}_mod_inventory_storage.holdings_record.jsonb ->> 'sourceId' = (
SELECT
id::text
FROM ${tenant}_mod_inventory_storage.holdings_records_source
WHERE ${tenant}_mod_inventory_storage.holdings_records_source.jsonb ->> 'name' != 'FOLIO' AND
${tenant}_mod_inventory_storage.holdings_records_source.jsonb ->> 'name' != 'MARC');
(0 rows)
(END)
# If the holdings source is anything other than FOLIO or MARC (e.g. -), then change to FOLIO. (is nich)
# iii)[ Erstinstallation Elasticsearch (für mod_search, folio_inventory-es), wenn man es in Juniper noch nicht installiert hatte.
Wenn man in Juniper Elasticsearch schon installiert hat (PoC), kann iii) übersprungen werden.
- Installiere Elasticsearch mit Docker: https://www.elastic.co/guide/en/elasticsearch/reference/7.5/docker.html
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.2
# Start eines ES-Clusters mit 3 Knoten:
mkdir /usr/share/elasticsearch/data
sysctl -w vm.max_map_count=262144
cd ~/upgrade/elasticsearch
vim docker-compose.yml
docker-compose up -d
docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'
1048576
1048576
unlimited
unlimited
Jetzt geht:
http://folio-hbz5.hbz-nrw.de:9200/ --> "Weißt Du, für die Suche"
# ENDE Start von ES im Cluster-Modus
curl -X GET "localhost:9200/_cat/nodes?v&pretty"
[ folge jetzt hier: https://github.com/folio-org/mod-search#configuring-elasticsearch ]
in einen ES-Container einloggen: docker exec -it <containerid> sh
Im Container: cd /usr/share/elasticsearch
Plugins der Reihe nach installieren:
elasticsearch-plugin install --batch analysis-icu
elasticsearch-plugin install --batch analysis-kuromoji
elasticsearch-plugin install --batch analysis-smartcn
elasticsearch-plugin install --batch analysis-nori
elasticsearch-plugin install --batch analysis-phonetic
Das für die anderen beiden Elasticsearch-Container auch machen.
# bei stop|start der Container werden die Pluigns erneut geladen :-)
Jetzt mal mod-search mit Umgebungsvariablen, die auf elasticsearch zeigen, "hochfahren"
https://github.com/folio-org/mod-search#environment-variables
cd ~/folio-install
curl -X GET -o mod-search-1.4.4-module-descriptor.json -D - -w '\n' http://localhost:9130/_/proxy/modules/mod-search-1.4.4
vim mod-search-1.4.4-module-descriptor.json
"name" : "ELASTICSEARCH_HOST"
"value" : "10.9.2.86" # Die IP des Single Servers, oder wo man Elasticsearch installiert hat
"name" : "ELASTICSEARCH_URL",
"value" : "http://10.9.2.86:9200"
"name" : "ELASTICSEARCH_USERNAME",
"value" : "elastic"
"name" : "ELASTICSEARCH_PASSWORD",
"value" : "s3cret" # Oder ein sichereres wählen
"name" : "INITIAL_LANGUAGES",
"value" : "ger"
"name" : "SYSTEM_USER_PASSWORD",
"value" : "*******" # Dasselbe wie für pubsub verwenden !
curl -X DELETE -D - -w '\n' http://localhost:9130/_/proxy/modules/mod-search-1.4.4
curl -i -w '\n' -X POST -H 'Content-type: application/json' -d @mod-search-1.4.4-module-descriptor.json http://localhost:9130/_/proxy/modules
./deploy-backend-module.sh mod-search-1.4.4 10.9.2.86
# Aktiviere mod-search für den Mandanten:
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/search-install.json http://localhost:9130/_/proxy/tenants/diku/install?simulate=true\&preRelease=false
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/search-install.json http://localhost:9130/_/proxy/tenants/diku/install?deploy=false\&preRelease=false\&tenantParameters=loadReference%3Dtrue%2CloadSample%3Dfalse
# Gehört noch zu "Installation Elasticsearch"
# Das Frontend neu installieren; ui-inventory-es und ui-search müssen hinzugefügt werden.
# Anschließend auch die Stripes-Module für den Mandanten aktivieren !!
#
cd ~/platform-complete
# Füge mod-search-1.4.4, folio_search und folio_inventory-es zu install.json wieder hinzu:
git restore install.json
# Füge mod-search-1.4.4 zu okapi-install.json wieder hinzu:
git restore okapi-install.json
# Füge foilo_search und folio_inventory-es zu stripes-install.json wieder hinzu:
git restore stripes-install.json
# Füge @folio/search und @folio/inventory-es zu package.json wieder hinzu:
git restore package.json
# Füge @folio/search und @folio/inventory-es zu stripes.config.js wieder hinzu.
Manuell machen; kein Restore, da sich URL und Branding geändert hat.
# Melde die Frontend-Module folio_search und folio_inventory_es an, um sie für den Mandanten zu aktivieren (aber nicht bereitzustellen; es sind ja keine Container)
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/search-ui-install.json http://localhost:9130/_/proxy/tenants/diku/install?simulate=true\&preRelease=false
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/search-ui-install.json http://localhost:9130/_/proxy/tenants/diku/install?preRelease=false
# Die FOLIO Stripes-Plattform neu erstellen (mit folio_search und folio_inventory-es)
# Installation von Stripes und nginx in einem Docker-Container
cd ~/platform-complete
vim docker/Dockerfile
ARG OKAPI_URL=http://folio-hbz5.hbz-nrw.de/okapi
ARG TENANT_ID=diku
vim docker/nginx.conf
server_name folio-hbz5.hbz-nrw.de;
...
# back-end requests:
location /okapi {
rewrite ^/okapi/(.*) /$1 break;
proxy_pass http://10.9.2.86:9130/;
vim stripes.config.js
Mandant (tenant) und Okapi-URL anpassen:
okapi: { 'url':'http://folio-hbz5.hbz-nrw.de/okapi', 'tenant':'diku' },
...
Logo und Favoriten-Bildchen anpassen
# Den Docker-Container bauen
cd ~/platform-complete
sudo su
docker build -f docker/Dockerfile --build-arg OKAPI_URL=http://10.9.2.86:9130 --build-arg TENANT_ID=diku -t stripes .
Step 1/19 : FROM node:15-alpine as stripes_build
...
Step 19/19 : ENTRYPOINT ["/usr/bin/entrypoint.sh"]
---> Running in a47dce4e3b3e
Removing intermediate container a47dce4e3b3e
---> 48a532266f21
Successfully built 48a532266f21
Successfully tagged stripes:latest
# Läuft ca. 15 Minuten lang.
# Den Docker-Container starten. Dabei Port 80 von außen auf Port 80 des Containers umleiten. Für SSL muss auch der Port 443 umgeleitet werden (ist nicht Teil dieser Doku):
# Achtung ! Alter Stripes-Container wurde automatisch gestoppt und entfernt.
Der Port 80 muss aber noch wieder frei gegeben werden:
netstat -taupn | grep 80
tcp6 0 0 :::80 :::* LISTEN 216581/docker-proxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 216573/docker-proxy
kill 216581
kill 216573
# nginx auf dem Server anhalten: sudo service nginx stop
nohup docker run -d -p 80:80 stripes
# Einloggen in den Docker Container
docker exec -it <id> sh
überprufen, ob die Konf.datei richtig angekommen ist:
vi /etc/nginx/conf.d/default.conf
# das Webserver-Log in dem Container verfolgen
tail -f /var/log/nginx/host.access.log
# gehört noch zu Erstinstallation Elasticsearch
# Jetzt hier mal weiter gucken, was man mit mod-search jetzt schon anfangen kann:
https://github.com/folio-org/mod-search#recreating-elasticsearch-index
# Neuindexierung (bzw. Erstindexierung)
Folgende Berechtigung an diku_admin vergeben:
search.index.inventory.reindex.post (Search - starts inventory reindex operation)
Ein neues Token holen:
export TOKEN=$( curl -s -S -D - -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" -H "Accept: application/json" -d '{ "tenant" : "diku", "username" : "diku_admin", "password" : "admin" }' http://localhost:9130/authn/login | grep -i "^x-okapi-token: " )
curl -w '\n' -D - -X POST -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" -d '{ "recreateIndex": true, "resourceName": "instance" }' http://localhost:9130/search/index/inventory/reindex
HTTP/1.1 200 OK
vary: origin
Content-Type: application/json
Date: Tue, 08 Feb 2022 10:52:12 GMT
transfer-encoding: chunked
{"id":"02c8e76a-0606-43f2-808e-86f3c48b65c6","jobStatus":"In progress","submittedDate":"2022-02-08T10:52:12.466+00:00"}
okapi.log rasselt nun wie blöde durch: /inventory-view RES 200 mod-inventory-storage
Der Endpoint /search/index/inventory/reindex bewirkt bei allen 3 Elastic-Containern was. Der Endpoint ist also richtig angebunden.
Wird nach 5-6 Min. fertig.
# Monitoring reindex process ( https://github.com/folio-org/mod-search#monitoring-reindex-process )
There is no end-to-end monitoring implemented yet, however it is possible to monitor it partially. In order to check how many records published to Kafka topic use inventory API:
curl -w '\n' -D - -X GET -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" http://localhost:9130/instance-storage/reindex/02c8e76a-0606-43f2-808e-86f3c48b65c6
HTTP/1.1 200 OK
vary: origin
Content-Type: application/json
transfer-encoding: chunked
{
"id" : "02c8e76a-0606-43f2-808e-86f3c48b65c6",
"published" : 224823,
"jobStatus" : "Ids published",
"submittedDate" : "2022-02-08T10:52:12.466+00:00"
}
Yej, richtig !
# Gucken, was wirklich zum Elastic-Index hinzugefügt wurde:
# In order to estimate total records that actually added to the index, you can send a "match all" search query and check totalRecords
curl -w '\n' -D - -X GET -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" http://localhost:9130/search/instances?query=id="*"
{"totalRecords":224823,"instances":[{"id":"1399845b-6d1f-50fd-9ffc-5d94e06f550d","title":"Molekulare Motoren und künstliche Nanomaschinen : Energiewandlung in Polymeren ; Moritz Mickler ; Thorsten Hugel , Physik in unserer Zeit","contributors":[{"name":"Mickler, Moritz","primary":false},{"name":"Hugel, Thorsten","primary":false}]}, ...]}
# Eine bestimmte ID aus dem Elastic-Index holen:
curl -w '\n' -D - -X GET -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" http://localhost:9130/search/instances?query=id="365e1e50-5ae5-590c-913a-e15c0fb45dd6"
HTTP/1.1 200 OK
transfer-encoding: chunked
{"totalRecords":1,"instances":[{"id":"365e1e50-5ae5-590c-913a-e15c0fb45dd6","title":"Wie klein ist klein : Eine kurze Geschichte der Quanten ; Aus d. Amerikan. von Michael Schmidt","contributors":[{"name":"Ford, Kenneth W.","primary":false}],"publication":[{"publisher":"Ullstein","dateOfPublication":"2008"}]}]}
# The main endpoint that provides search capabilities is GET /search/instances.
curl -w '\n' -D - -X GET -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" http://localhost:9130/search/instances?query=title+all+"semantic web"
Eine Beispielsuche: "semantic" und "web" müssen beide im Titel sein:
curl -w '\n' -D - -X GET -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" http://localhost:9130/search/instances?query=title+all+"semantic+web" => 1 Treffer
Eine Beispielsuche: "semantic" oder "web" müssen im Titel sein:
curl -w '\n' -D - -X GET -H "$TOKEN" -H "X-Okapi-Tenant: diku" -H "Content-type: application/json" http://localhost:9130/search/instances?query=title+any+"semantic+web" => 174 Treffer
Ebenso : Katalog - Instanz -CQL-Suche 'title any "semantic web"' => 174 Treffer.
#] Ende Erstinstallation Elasticsearch; Ende iii)
# ******************************************************************
# II. BEGINN Hauptverarbeitung Upgrade Juniper HF3 => Kiwi (R3-2021)
# ******************************************************************
# ******************************************
# II.i)
# Upgrade der Okapi-Version / Neustart Okapi
# Das muss man machen, sonst kann man die neuen Module nicht ziehen
# ******************************************
# Installation und Konfiguration Okapi
# Die Okapi-Version steht in platform-complete/install.json,
# also muss zunächst das heruntergeladen werden:
# Klone das Repositorium platform-complete, wechsle in das Verzeichnis
# git clone https://github.com/folio-org/platform-complete
cd ~/platform-complete
git fetch
# neuer Branch R3-2021-hotfix-1
# Leihe den Branch aus.
# Lokale Änderungen zwischenspeichern. Das sollte nur stripes.config.js betreffen.
# Verwerfe Änderungen an install.json etc:
git restore install.json
git restore okapi-install.json
git restore stripes-install.json
git restore package.json
git stash save
git checkout master
git pull
git checkout R3-2021-hotfix-1
git stash pop
# Lies R3-Okapi-Version aus install.json: okapi-4.11.1
# Okapi als Debian-Paket von repository.folio.org holen
# Importieren Sie den FOLIO-Signaturschlüssel, fügen Sie das FOLIO apt-Repository hinzu und installieren Sie Okapi (dieser Version).
# okapi.conf sichern:
sudo su
cp -p /etc/folio/okapi/okapi.conf /usr/folio/upgrade/
#
wget --quiet -O - https://repository.folio.org/packages/debian/folio-apt-archive-key.asc | sudo apt-key add -
OK
sudo add-apt-repository "deb https://repository.folio.org/packages/ubuntu focal/"
sudo apt-get update
sudo apt-get -y --allow-change-held-packages install okapi=4.11.1-1 # R3-2021 Okapi Version
# Okapi im Cluster-Modus installieren
# Port-Bereich in okapi.conf ändern (Elasticsearch ist auf 9200, 9300!)
vim /usr/folio/upgrade/okapi.conf
- role="cluster"
- cluster_config="-hazelcast-config-file /etc/folio/okapi/hazelcast.xml"
- cluster_port="9001"
- port_start="9301"
- port_end="9520"
# Auch den nodename setzen:
vim /usr/folio/upgrade/okapi.conf
nodename="10.9.2.86"
# Den nodename kann man so raus kriegen (Dank an Jason): curl -X GET http://localhost:9130/_/discovery/nodes
[ {
"nodeId" : "70484de6-fb16-4be1-9efb-10a2a37b76bf",
"url" : "http://10.9.2.86:9130",
"nodeName" : "10.9.2.86"
} ]
# siehe in https://github.com/folio-org/okapi/blob/master/doc/guide.md#running-in-cluster-mode
# okapi.conf zurückspielen:
sudo cp -p /usr/folio/upgrade/okapi.conf /etc/folio/okapi/okapi.conf
in hazelcast.xml setzen:
<tcp-ip enabled="true">
<interface>10.9.2.86</interface>
<member-list>
<member>10.9.2.86</member>
</member-list>
</tcp-ip>
# Neue Umgebungsvariablen für Hazelcast an Okapi senden (wenn man Hazelcast bisher nicht verwendet hat):
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"OKAPI_CLUSTERHOST\",\"value\":\"10.9.2.86\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"HAZELCAST_IP\",\"value\":\"10.9.2.86\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"HAZELCAST_PORT\",\"value\":\"5701\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"HAZELCAST_FILE\",\"value\":\"/etc/folio/okapi/hazelcast.xml\"}" http://localhost:9130/_/env
# Neustart Okapi:
sudo systemctl daemon-reload
sudo systemctl restart okapi.service
# in /var/log/folio/okapi/okapi.log muss kommen:
INFO DeploymentManager fast shutdown
# und direkt im Anschluss
INFO InternalModule InternalModule starting okapiversion=4.8.2
...
INFO MainVerticle Deploy completed succesfully
# Jetzt startet es die Module wieder an.
docker ps --all | grep "mod-" | wc
# Hole die Liste der Module für diesen Mandanten (rein informativ)
curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules
...
}, {
"id" : "okapi-4.8.2"
} ]
# 9x edge, 52x folio_ (Frontend), 62x mod- (Backend) = die R2-Module + das R3-Okapi
# ENDE Upgrade Okapi-Version; weiter "Upgrade auf Kiwi":
# II.ii)
# Moduldeskriptoren aus dem zentralen Register abrufen:
cd ~/folio-install
cat << END > okapi-pull.json
> {
> "urls": [
> "https://folio-registry.dev.folio.org"
> ]
> }
> END
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @okapi-pull.json http://localhost:9130/_/proxy/pull/modules
2022-02-18T09:46:33,188 INFO ProxyContext 272340/proxy REQ 127.0.0.1:60464 supertenant POST /_/proxy/pull/modules okapi-4.11.1
2022-02-18T09:46:34,691 INFO PullManager Remote registry at https://folio-registry.dev.folio.org is version 4.11.1
2022-02-18T09:46:34,692 INFO PullManager pull smart
2022-02-18T09:46:37,248 INFO PullManager pull: 177 MDs to insert
2022-02-18T09:46:37,919 INFO ProxyContext 272340/proxy RES 200 4730306us okapi-4.11.1 /_/proxy/pull/modules
# II.iii)
# Ein kompatibles FOLIO-Backend bereitstellen (deploy)
# 1. Umgebungsvariablen zur Verwendung durch die bereitgestellten Module :
Neue Umgebungsvariablen für mod-search / Elasticsearch an /env senden:
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"ELASTICSEARCH_HOST\",\"value\":\"10.9.2.86\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"ELASTICSEARCH_URL\",\"value\":\"http://10.9.2.86:9200\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"ELASTICSEARCH_USERNAME\",\"value\":\"elastic\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"ELASTICSEARCH_PASSWORD\",\"value\":\"s3cret\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"INITIAL_LANGUAGES\",\"value\":\"ger\"}" http://localhost:9130/_/env;
Das Environment sollte jetzt ungefähr so aussehen:
curl -X GET http://localhost:9130/_/env
[ {
"name" : "DB_DATABASE",
"value" : "folio"
}, {
"name" : "DB_HOST",
"value" : "10.9.2.65"
}, {
"name" : "DB_PASSWORD",
"value" : "folio123"
}, {
"name" : "DB_PORT",
"value" : "5432"
}, {
"name" : "DB_USERNAME",
"value" : "folio"
}, {
"name" : "ELASTICSEARCH_HOST",
"value" : "10.9.2.86"
}, {
"name" : "ELASTICSEARCH_PASSWORD",
"value" : "s3cret"
}, {
"name" : "ELASTICSEARCH_URL",
"value" : "http://10.9.2.86:9200"
}, {
"name" : "ELASTICSEARCH_USERNAME",
"value" : "elastic"
}, {
"name" : "HAZELCAST_FILE",
"value" : "/etc/folio/okapi/hazelcast.xml"
}, {
"name" : "HAZELCAST_IP",
"value" : "10.9.2.86"
}, {
"name" : "HAZELCAST_PORT",
"value" : "5701"
}, {
"name" : "INITIAL_LANGUAGES",
"value" : "ger"
}, {
"name" : "KAFKA_HOST",
"value" : "10.9.2.86"
}, {
"name" : "KAFKA_PORT",
"value" : "9092"
}, {
"name" : "OKAPI_CLUSTERHOST",
"value" : "10.9.2.86"
}, {
"name" : "OKAPI_URL",
"value" : "http://10.9.2.86:9130"
}, {
"name" : "SYSTEM_USER_PASSWORD",
"value" : "*******"
} ]
# Die Backend-Module bereitstellen (Deploy)
# Das zieht auch die Docker-Abbilder von folioci.
# Rein informativ: Schauen, wie viele Docker-Container jetzt schon laufen:
sudo docker ps | grep -v "^CONTAINER" | wc -l
# 68 Container laufen:
# - 62 Backend-Module R2-2021
# - Stripes
# - 3 Nodes Elasticsearch
# - Kafka & Zookeeper
# Zuerst mod-pubsub hochziehen und aktivieren:
Die R3-Version von mod-pubsub steht in ~/platform-complete/okapi-install.json: mod-pubsub-2.4.2
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d '[ { "id" : "mod-pubsub-2.4.2", "action" : "enable" } ]' http://localhost:9130/_/proxy/tenants/diku/install?simulate=true
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d '[ { "id" : "mod-pubsub-2.4.2", "action" : "enable" } ]' http://localhost:9130/_/proxy/tenants/diku/install?deploy=true\&preRelease=false\&tenantParameters=loadReference%3Dtrue
HTTP/1.1 200 OK
# mod-pubsub-2.3.5 wurde dabei am Ende automatisch undeployed:
2022-02-18T10:03:30,873 INFO DiscoveryManager autoUndeploy mod-pubsub-2.3.5
2022-02-18T10:03:30,874 INFO DiscoveryManager callUndeploy srvcId=mod-pubsub-2.3.5 instId=8fc4a72f-6a89-4e71-a202-70832313a418 node=10.9.2.86
2022-02-18T10:03:30,875 INFO DeploymentManager undeploy instId 8fc4a72f-6a89-4e71-a202-70832313a418
2022-02-18T10:03:30,877 INFO DockerModuleHandle stop container 724a6897b6e1a6b9162bc46917473689d33448a42e135be4bb880e330b8504a0 image folioorg/mod-pubsub:2.3.5
2022-02-18T10:03:30,884 INFO TenantManager job complete
2022-02-18T10:03:31,617 INFO DockerModuleHandle delete container 724a6897b6e1a6b9162bc46917473689d33448a42e135be4bb880e330b8504a0 image folioorg/mod-pubsub:2.3.5
# Schließlich alle Backend-Module bereitstellen
# *********************************************************************************************************
# Die Module einzeln bereitstellen. Für jedes Modul wird ein Container hochgefahren.
# *********************************************************************************************************
# *******************************************************
# Alles deployen, was noch nicht deplyoed ist:
# Die Liste okapi-install.json Modul für Modul durch gehen.
# *******************************************************
# Für ein einzelnes Modul geht es so:
cat > circulation-deployment-descriptor.json <<END
{
"srvcId": "mod-circulation-22.0.4",
"nodeId": "10.9.2.86"
}
END
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @circulation-deployment-descriptor.json http://localhost:9130/_/discovery/modules
mod-pusbsub aus der Liste okapi-install.json entfernen:
vim ~/platform-complete/okapi-install.json
entferne mod-pubsub-2.4.2
Alle Module mit einem einzigen Skript deployen. Das Skript geht die Liste Modul für Modul durch.
cd ~/folio-install
./deploy-all-backend-modules.sh ~/platform-complete/okapi-install.json 10.9.2.86
das läuft ca. 15 Minuten.
=> Jetzt sind die R3-Container deployed, aber noch nicht aktiviert.
Außerdem laufen auf dem System noch die R2-Container. Diese sind aktiviert. D.h. aktuell ist das System noch im Zustand "R2-2021", bis auf das Okapi (das aber abwärtskompatibel auf R2 ist) und mod-pubsub.
Es laufen 61 R2-Backend-Module (alle außer pubsub) und alle 65 R3-Backend-Module:
docker ps --all | grep "mod-" | wc
126 1537 31418
# mod-eusage-reports-1.1.0 zusätzlich deployen, da es von einem der R3-2021-hotfix-1 Frontend-Module benötigt wird:
cat > mod-eusage-reports-1.1.0-deployment-descriptor.json <<END
{
"srvcId": "mod-eusage-reports-1.1.0",
"nodeId": "10.9.2.86"
}
END
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @mod-eusage-reports-1.1.0-deployment-descriptor.json http://localhost:9130/_/discovery/modules
# II.iv) Aktivieren der Module für den Mandanten.
# a) Aktiviere die R3-Frontend-Module an für den Mandanten.
zunächst simulieren:
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/stripes-install.json http://localhost:9130/_/proxy/tenants/diku/install?simulate=true\&preRelease=false
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/stripes-install.json http://localhost:9130/_/proxy/tenants/diku/install?preRelease=false\&tenantParameters=loadReference%3Dtrue
# b) Die R3-Backend-Module für den Mandanten aktivieren
Auch in okapi-install.json korrigieren: mod-eusage-reports-1.0.4 --> mod-eusage-reports-1.1.0 !!
# Jetzt nur aktivieren, nicht deployen, da der Container schon läuft:
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/okapi-install.json http://localhost:9130/_/proxy/tenants/diku/install?simulate=true\&preRelease=false
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @/usr/folio/platform-complete/okapi-install.json http://localhost:9130/_/proxy/tenants/diku/install?deploy=false\&preRelease=false\&tenantParameters=loadReference%3Dtrue
# Rein informativ: Bereitgestellte Module auflisten lassen
curl -w '\n' -D - http://localhost:9130/_/discovery/modules | grep srvcId | wc
127
# Rein informativ: Aktivierte Module auflisten lassen
curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules | grep id | wc
132
- 56 Frontend-Module
- 10 edge-Module
- 65 R3-2021 Backend-Module
- 1 Okapi-Modul (4.11.1)
# II.v)
# Eine R3-Version der FOLIO Stripes-Plattform erstellen
# Installation von Stripes und nginx in einem Docker-Container
# Quelle: https://github.com/folio-org/platform-complete
cd ~/platform-complete
vim docker/Dockerfile
ARG OKAPI_URL=http://folio-hbz5.hbz-nrw.de/okapi
ARG TENANT_ID=diku
vim docker/nginx.conf
server {
listen 80;
server_name folio-hbz5.hbz-nrw.de;
charset utf-8;
access_log /var/log/nginx/host.access.log combined;
# front-end requests:
# Serve index.html for any request not found
location / {
# Set path
root /usr/share/nginx/html;
index index.html index.htm;
include mime.types;
types {
text/plain lock;
}
try_files $uri /index.html;
}
# back-end requests:
location /okapi {
rewrite ^/okapi/(.*) /$1 break;
proxy_pass http://10.9.2.86:9130/;
}
}
vim stripes.config.js
Mandant (tenant) und Okapi-URL anpassen:
okapi: { 'url':'http://folio-hbz5.hbz-nrw.de/okapi', 'tenant':'diku' },
Die URL muss von außen erreichbar sein, als vom Browser. Der Endpoint /okapi wird in der nginx.conf auf den internen Port 9130 umgeleitet.
Zeile wieder hinzufügen (falls noch nicht vorhanden):
'@folio/search' : {},
# in stripes.config.js Logo und Favoriten-Bildchen anpassen
# Den Docker-Container bauen
sudo su
docker build -f docker/Dockerfile --build-arg OKAPI_URL=http://10.9.2.86:9130 --build-arg TENANT_ID=diku -t stripes .
Sending build context to Docker daemon 1.138GB
Step 1/19 : FROM node:15-alpine as stripes_build
...
Step 19/19 : ENTRYPOINT ["/usr/bin/entrypoint.sh"]
---> Running in 519f63f13e99
Removing intermediate container 519f63f13e99
---> dacd966c64e1
Successfully built dacd966c64e1
Successfully tagged stripes:latest
# Läuft ca. 15 Minuten lang.
# Den Docker-Container starten. Dabei Port 80 von außen auf Port 80 des Containers umleiten. Für SSL muss auch der Port 443 umgeleitet werden (ist nicht Teil dieser Doku):
Den alten stripes-Container anhalten: docker stop <containerid>
Den Port 80 vollständig befreien: netstat -taupn | grep 80. Noch laufende Prozesse auf diesem Port, z.B. docker-proxy, entfernen.
nohup docker run -d -p 80:80 stripes
# Einloggen in den Docker Container
docker exec -it <id> sh
überprufen, ob die Konf.datei richtig angekommen ist:
vi /etc/nginx/conf.d/default.conf
# das Webserver-Log in dem Container verfolgen
tail -f /var/log/nginx/host.access.log
# Auf Frontend einloggen
http://folio-hbz5.hbz-nrw.de
Sind die R3-Module zu sehen ? Sieht in "Einstellungen - Installationsdetails" alles gut aus ? Richtige Okapi-Version ?
Die alten stripes-Container ("Exited" ... ago) entfernen: docker rm <containerid>
# II.vi) Aufräumen
# Aufräumen. Nicht mehr benutzte Container zurückziehen (undeploy)
cd ~/upgrade
# Welche Container sind jetzt aktiviert ?
curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/supertenant/modules
nur aktuelles Okapi. (rein informativ)
curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules
nur die R3-Module (rein informativ)
# Welche Container sind im Discovery und laufen ?
cd ~/folio-install
curl -w '\n' -XGET http://localhost:9130/_/discovery/modules | jq '.[] | .srvcId + "/" + .instId' > dockerps.sh
# Das sollte noch die Modulversionen des alten Releases enthalten
# => Backend-Module (mod-*) des alten Releases + Backend-Module des neuen Releases (127 Module).
# Von den 127 deployten Modulen müssen jetzt noch 62 entfernt werden:
- alle R2-Module bis auf mod-pubsub. Achtung !!! Teilweise sind es die gleichen wie in R2 !!! Gucken, welches entfernt werden muss !!!
- mod-eusage-reports-1.0.4
sort dockerps.sh > dockerps.todelete.sh
# Vergleiche mit ~/platform-complete/okapi-install-sh (R3-Module)
# Alles, was in Kiwi R3 benötigt wird, aus der Liste dockerps.todelete.sh entfernen.
=> 62 Zeilen
# Nicht mehr benutzte, also nicht aktivierte, Versionen so löschen:
curl -w '\n' -D - -XDELETE http://localhost:9130/_/discovery/modules/mod-agreements-4.1.1/<instId>
...
./dockerps.todelete.sh
wird jeweils mit "HTTP/1.1 204 No Content" quittiert.
# Jetzt noch einmal die bereitgestellten Module auflisten lassen:
curl -w '\n' -D - http://localhost:9130/_/discovery/modules | grep srvcId | wc
65
# Das sollte nur die Modulversionen des neuen Releases enthalten (65 Module für R3-2021)
# Vergleich mit der Anzahl laufenden Docker-Containern:
docker ps --all | grep "mod-" | wc
65
docker ps --all | wc
73
# ziehe stripes, 4x Elasticsearch, Kafka, Zookeeper und die Überschriftszeile ab => 65 Container mit Backend-Modulen (Summen stimmen überein).
* *** FERTIG
*** Melden Sie sich als "diku_admin:admin" (oder Ihr Systemadministrator-Login) auf http://folio-hbz2.hbz-nrw.de (durch Ihren Server-Namen ersetzen) an.
# II.vii) Nachbereitung: Manuelle Tests:
- Prüfen, ob die alten Daten noch da sind ! Z.B im Katalog, unter Benutzerverwaltung etc. (Ja)
- sind die Reference Data bei der Migration richtig mitgekommen ? (Martina: Bei den Settings/Einstellungen konnten wir feststellen, dass zwar beim Katalog alles ok scheint (sehr gut), aber bei Ausleihe und Personen und an 2 anderen Stellen die Beispieleinträge wieder „reinkopiert“ wurden und geringfügig wurde etwas überschrieben. (Ingolf: siehe https://folio-org.atlassian.net/browse/UXPROD-3111))