Upgrade R1-2021 auf R2-2021 "Juniper"
Upgrade R1-2021 => R2-2021 "Juniper"
Auf Basis von "platform-complete"
mit automatischer Migration der Datenbankinhalte
Deployment mit Okapi, "Single Server" auf BS Ubuntu 20.04.2 LTS
Server-Hardware erhöhen
Benötigt für den Upgrade R1 -> R2 werden:
8 CPUs
40 GB RAM
empfohlen: 350 GB SSD HD
Ubuntu Updates installieren
sudo apt-get update
sudo apt-get upgrade
sudo reboot
Nach System-Neustart muss folgendes von selber wieder anstarten:
- postgres
systemctl start postgresql (läuft schon)
- docker
systemctl start docker.service (läuft schon)
- okapi
systemctl start okapi.service (läuft schon)
- nginx
systemctl start nginx (läuft schon)
==> Das System fährt nach Reboot selbständig wieder hoch; man kann sich sofort wieder anmelden.
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 der Datei platform-complete/install.json, also muss zunächst eine aktuelle Version dieser Datei heruntergeladen werden:
# Klone das Repositorium platform-complete, falls noch nicht geschehen
# git clone https://github.com/folio-org/platform-complete
Wechsle in das Verzeichnis
cd ~/platform-complete
git fetch
# neuer Branch R2-2021, neuer Tag R2-2021-GA
# 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 R2-2021-GA
git stash pop
# Lies R2-Okapi-Version aus install.json: okapi-4.8.2
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).
Zuerst 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.8.2-1 # R2-2021 Okapi Version
# okapi.conf zurückspielen:
sudo cp -p ~/upgrade/okapi.conf /etc/folio/okapi/okapi.conf
Evtl. Port-Bereich in okapi.conf erweitern (9131-9350); Gucken, wie viele Ports schon belegt sind (sudo docker ps --all | wc)
Es müssen noch mindestens 60 Ports frei sein !
sudo apt-mark hold okapi
okapi set on hold.
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.3.3
...
INFO MainVerticle Deploy completed succesfully
# 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"
} ]
# 8x edge, 50x folio_ (Frontend), 60x mod- (Backend) = die R1-Module + das R2-Okapi
Moduldeskriptoren aus dem zentralen Register abrufen
vim ~/folio-install/runbooks/single-server/scripts/okapi-pull.json
{
"urls": [
"https://folio-registry.dev.folio.org"
]
}
cd ~
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @folio-install/runbooks/single-server/scripts/okapi-pull.json http://localhost:9130/_/proxy/pull/modules
2021-08-25T13:11:06,833 INFO ProxyContext 619855/proxy REQ 127.0.0.1:45316 supertenant POST /_/proxy/pull/modules okapi-4.8.2
2021-08-25T13:11:17,625 INFO PullManager Remote registry at https://folio-registry.dev.folio.org is version 4.7.1
2021-08-25T13:11:17,625 INFO PullManager pull smart
2021-08-25T13:11:31,578 INFO PullManager pull: 2457 MDs to insert
2021-08-25T13:11:33,823 INFO ProxyContext 619855/proxy RES 200 26989705us okapi-4.8.2 /_/proxy/pull/modules
Ein kompatibles FOLIO-Backend bereitstellen und für den Mandanten aktivieren.
Umgebungsvariablen zur Verwendung durch die bereitgestellten Module in der Okapi-Umgebung veröffentlichen:
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_HOST\",\"value\":\"10.9.2.62\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_PORT\",\"value\":\"5432\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_DATABASE\",\"value\":\"folio\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_USERNAME\",\"value\":\"folio\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_PASSWORD\",\"value\":\"folio123\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"KAFKA_HOST\",\"value\":\"10.9.2.85\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"KAFKA_PORT\",\"value\":\"9092\"}" http://localhost:9130/_/env;
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"OKAPI_URL\",\"value\":\"http://10.9.2.85:9130\"}" http://localhost:9130/_/env;
# Rein informativ: Schauen, wie viele Docker-Container jetzt schon laufen:
sudo docker ps | grep -v "^CONTAINER" | wc -l
# es laufen ca. 60 Container des R1-Releases
Zuerst die Umgebungsvariablen für mod_pubsub ändern, wg. Kommunikation mit Kafka
KAFKA_HOST und OKAPI_URL auf die aktuelle IP-Adresse setzen:
cd ~/upgrade
# Die R2-Version von pubsub ist mod-pubsub-2.3.3.
# Die R2-2021-Versionen für die einzelnen Module stehen in der Datei ~/platform-complete/okapi-install.json
wget https://folio-registry.dev.folio.org/_/proxy/modules/mod-pubsub-2.3.3 -O pubsub-module-descriptor.json
vim pubsub-module-descriptor.json
# Im Launch-Deskriptor anpassen:
}, {
"name" : "KAFKA_HOST",
"value" : "10.9.2.85"
}, {
"name" : "OKAPI_URL",
"value" : "http://10.9.2.85:9130"
}, {
"name" : "SYSTEM_USER_PASSWORD",
"value" : "***geheim***"
} ],
curl -X DELETE -D - -w '\n' http://localhost:9130/_/proxy/modules/mod-pubsub-2.3.3
curl -i -w '\n' -X POST -H 'Content-type: application/json' -d @pubsub-module-descriptor.json http://localhost:9130/_/proxy/modules
Das gleiche auch (ohne OKAPI_URL) machen für diese Module
Die R2-Versionen der Module in der okapi-install.json nachgucken:
mod-data-import
mod-data-export-spring
mod-data-export-worker
mod-ebsconet
mod-inventory
mod-inventory-storage
mod-invoice
mod-quick-marc
mod-remote-storage
# mod-search ==> das nicht installieren, sonst muss auch elasticsearch installiert werden
mod-source-record-manager
mod-source-record-storage
Zuerst mod-pubsub hochziehen und aktivieren:
curl -w '\n' -D - -X POST -H "Content-type: application/json" -d '[ { "id" : "mod-pubsub-2.3.3", "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.3.3", "action" : "enable" } ]' http://localhost:9130/_/proxy/tenants/diku/install?deploy=true\&preRelease=false\&tenantParameters=loadReference%3Dtrue
Schließlich alle Backend-Module bereitstellen und aktivieren:
- Elasticsearch (u.a.) nicht installieren !
cd ~/platform-complete
Entferne mod-search und folio_inventory-es aus install.json. Entferne auch mod-kb-ebsco-java, folio_search, edge-caiasoft, edge-dematic, mod-gobi, mod-ebsconet und mod-codex-ekb, falls diese nicht unbedingt benötigt werden.
Enferne mod-search aus okapi-install.json. Entferne auch mod-kb-ebsco-java, mod-gobi, mod-ebsconet, mod-codex-ekb.
Entferne folio_inventory-es aus stripes-install.json. Entferne aucg folio_search, edge-caiasoft, edge-dematic.
Entferne @folio/inventory-es aus package.json. Entferne auch @folio/search.
# *****************************************************************************************
# Die Module einzeln bereitstellen. Für jedes Modul wird ein Container hochgefahren.
# *****************************************************************************************
# **********************************************
# Alles deployen, was noch nicht deployed ist.
# **********************************************
Für ein einzelnes Modul geht es so:
cat > circulation-deployment-descriptor.json <<END { "srvcId": "mod-circulation-22.0.4", "nodeId": "10.9.2.85" } END curl -w '\n' -D - -X POST -H "Content-type: application/json" -d @circulation-deployment-descriptor.json http://localhost:9130/_/discovery/modules
Die Liste okapi-install.json Modul für Modul durch gehen und deployen !
=> Jetzt sind die R2-Container deployed, aber nicht aktiviert.
Außerdem laufen auf dem System noch die R1-Container. Diese sind aktiviert. D.h. aktuell ist das System noch im Zustand "R1-2021", bis auf das Okapi (das aber abwärtskompatibel auf R1 ist).
Die R2-Backend-Module für den Mandanten aktivieren
# Jetzt nur aktivieren, nicht deployen, da der Container schon läuft. Es muss die gesamte Liste okapi-install.json übergeben werden, sonst werden die Abhängigkeiten falsch aufgelöst (also nicht auf die gewünschten R2-Versionen):
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
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
vary: origin
Content-Type: application/json
X-Okapi-Trace: POST okapi-4.8.2 /_/proxy/tenants/diku/install.. : 200 3670882us
Rein informativ: Bereitgestellte Module auflisten lassen (nur Backend)
curl -w '\n' -D - http://localhost:9130/_/discovery/modules | grep srvcId | wc
Rein informativ: Aktivierte Module auflisten lassen (Frontend + Backend)
curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules | grep id | wc
Melde die Liste der Frontend-Module an, um sie für den Mandanten zu aktivieren
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/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
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
vary: origin
Content-Type: application/json
X-Okapi-Trace: POST okapi-4.8.2 /_/proxy/tenants/diku/install.. : 200 8014004us
Installation Frontend: Eine R2-Version der FOLIO Stripes-Plattform erstellen
Installation von Stripes und nginx in einem Docker-Container
# Quelle: https://github.com/folio-org/platform-complete
Docker-File und nginx-Konfiguration anpassen
cd ~/platform-complete
vim docker/Dockerfile
ARG OKAPI_URL=http://10.9.2.85:9130 # die IP des Servers anpassen
ARG TENANT_ID=diku
vim docker/nginx.conf
server {
listen 80;
server_name folio-hbz2.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.85:9130/;
}
}
vim stripes.config.js
Mandant (tenant) und Okapi-URL anpassen:
okapi: { 'url':'http://folio-hbz2.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.
Diese Zeile entfernen (die search-App nicht installieren) :
'@folio/search' : {},
In stripes.config.js auch Logo und Favoriten-Bildchen anpassen, falls gewünscht
Den Docker-Container bauen
sudo su
docker build -f docker/Dockerfile --build-arg OKAPI_URL=http://10.9.2.85: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 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 (nicht Teil dieser Doku):
nohup docker run -d -p 80:80 stripes
nginx auf dem Server anhalten:
sudo service nginx stop
# Mal einloggen in den Docker Container
docker exec -it <id> sh
überprufen, ob die Konfig-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
Aufräumen.
Diese Schritt ist wichtig, das sonst leicht die Perfomance des Servers in die Knie gehen kann. Besonders beim nächsten Upgrade !!
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
curl -w '\n' -XGET http://localhost:9130/_/proxy/tenants/diku/modules
# Welche Container sind im Discovery und laufen ?
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 (das sollten ca. 120 Module sein).
# Nicht mehr benutzte, also nicht aktivierte, Versionen so löschen:
z.B.: curl -w '\n' -D - -XDELETE http://localhost:9130/_/discovery/modules/mod-orders-12.0.1
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
60
# Das sollte nur die Modulversionen des neuen Releases enthalten
# Vergleich mit der Anzahl laufenden Docker-Containern:
docker ps --all | wc
63 788 15088
# ziehe Kafka, Zookeeper und die Überschriftszeile ab => 60 Container mit Backend-Modulen (Die Summen stimmen überein).
FERTIG
Melden Sie sich als "diku_admin:admin" (oder mit Ihrem Systemadministrator-Login) auf http://folio-hbz2.hbz-nrw.de (durch Ihren Server-Namen ersetzen) an.
Prüfen Sie, ob die alten Daten noch da sind ! Z.B im Katalog, unter Benutzerverwaltung etc.