Skip to end of banner
Go to start of banner

Upgrade R1-2021 auf R2-2021 "Juniper"

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

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.

  • No labels