Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Dette dokument beskriver installation og konfiguration af Stamkortregister-servicen (SKR). Konfiguration af tilhørende DGWS/IDWS Proxy er også beskrevet.

Stamkortregister-servicen består af 2 komponenter to komponener (war-arkiver), der skal konfigureres og deployes på en applikationsserver:

  • skr-service: Stamkortregister-servicen. War-arkiv. Servlet-baseret webservice pakket specifikt til Wildfly.

  • wsproxy: DGWS/IDWS Proxy. Er ikke inkluderet i dette projekts kildekode. War-arkiv. Servlet-baseret proxy-komponent til håndtering af DGWS/IDWS i requests og responsesskr-operations: REST-service til baggrundsjobs, som kaldes af driften.

Projektet bygges med Maven og kræver Java 8 samt en MariaDB-installation for at kunne afvikle unit-tests.

Udover normalt tilgængelige Maven dependencies, afhænger projektet også af interne artefakter. Hvis disse artefakter ikke er udgivet (released) i den påkrævede version i NSP's Nexus repository, skal man selv udtjekke og bygge dem fra NSP's Subversion i den pågældende version. Artefakternes forskellige versioner vil være tilgængelige under et Subversion-tag. Disse artefakter er:

  • dgws_idws_proxy (Maven identifier: dk.sds.dgws-idws-proxy:wsproxy-apicpr-subscriber (Maven identifier: dk.sds:cprsubscriber)

For at bygge disse interne artefakter, henvises der til artefakternes dokumentation.

...

Version

Dato

Ændring

Ansvarlig

1.0.0

2018-08-31

Initialt dokument

Trifork

1.0.12018-09-11Ændret databasedriver til MySQLTrifork
1.0.112019-08-16Fjernet SCES properties. Opdateret default value for property "minlog.read-activity-text".Trifork
1.0.122019-25-09Ajourført

Trifork

1.0.172020-10-08AjourførtKvalitetsIT
1.0.182021-04-13OpdateretKvalitetsIT
1.0.212021-09-02Ajourføring af linksKvalitetsIT

Byggevejledning

For at bygge projektet og dets deployables (war-filer) uden at køre unit-tests og integrationstestssamt afvikle unittests, anvendes følgende Maven kommando:

mvn clean install -DskipTests

Projektets deployables ender i target-mappen under de respektive moduler.

Afvikling af unit-tests

For at afvikle projektets unit-tests, skal en MariaDB-database-server være tilgængelig.

I udviklingssammenhæng og ved unit-tests kan man nøjes med én databasebruger og ét database-schema. Disse kan oprettes vha. scripterne recreate_service_user.sql og recreate_database.sql som er lokaliseret under skr-service/src/test/resources/db. Hvis disse standard-scripts anvendes, så passer de database-credentials, som er angivet i application.properties-filen i projektet. Database-strukturen bliver automatisk oprettet vha. Flyway SQL-scripter, når unit-testene afvikles.

Unit-testene i projektet kan afvikles med følgende Maven-kommando:

mvn clean test

Alternativt kan også samtidigt bygge projektet Alternativt kan projektet også bygges uden afvikling af test ved at anvende Maven-kommandoen:

mvn clean install -DskipTests

Krav til miljø

Kravene er baseret på det driftsmiljø, der aktuelt er gældende på den Nationale Service Platform (NSP).

Krav til applikationsserver

Servicen er udviklet til at kunne afvikles på Wildfly 8 i produktion, som bliver brugt på NSP platformen, og denne installationsvejledning beskriver en sådan opsætning. Applikationsserveren kræver Java 8 eller højere.

Krav til operativsystem

Der stilles ingen krav til operativsystemet udover Java-understøttelse. Ubuntu Linux bruges som operativsystem på NSP’en, men udviklingen af servicen er foretaget på Windows 10 og denne platform kan ligeledes afvikle servicenKomponenten er tilpasset at kunne indgå i det aktuelt gældende CI-miljø på NSP. Det tager aktuelt udgangspunkt i version 1 af NSP's platform Docker image.

Krav til database

Servicen er testet mod MariaDB version 10.1, som bliver brugt på NSP platformen.

Ved unittest anvendes en in-memory H2 database, som automatisk startes ved afvikling af tests. 

Krav til hardware

Der stilles ikke nogle særlige minimumskrav til hardware, udover minimumskravene for operativsystemet, for at kunne afvikle servicen fornuftigt til testformål. Dog skal man men man skal forvente at bruge high-end hardware (både cpu, ram, netkort og diske) for at kunne opfylde de gældende svartidskrav på NSP.

...

Servicen kræver en enkelt database til dens egen data. Derudover afhænger den af adgang til et view i en (replikeret) stamdata-database.

Servicen konfigureres med 2 datasources, som tilgår databaserne vha. separat specificerede brugere.

Databasebrugeren, der tilgår servicens database, skal være tildelt følgende rettigheder:

  • Ved normal drift i produktion: SELECT, INSERT, UPDATE, DELETE
  • Yderligere nødvendige rettigheder ved databaseoprettelse og migreringer:  CREATE, DROP, ALTER

Databasebrugeren, der tilgår stamdata-view'et, skal være tildelt følgende rettigheder:

  • Ved normal drift i produktion: SELECT
  • Yderligere nødvendige rettigheder ved databaseoprettelse og migreringer: CREATE VIEW, DROP

Oprettelse af database og tabeller

Datamodellen styres vha. inkrementelle SQL-scripterscripts, der kan findes under mappen  skr-service/etccompose/database/db/migration.

Info

Scripterne er udformet til at blive kørt med databasemigreringsværktøjet Flyway, men dette er kun aktiveret under afvikling af unit-tests, da dette ikke ønskes anvendt i produktion.

I produktion anvendes scripterne manuelt og skal køres på databasen i inkrementel rækkefølge baseret på versionsnummeret i filnavnet (først V100-__(...).sql, dernæst 01-V2__(...).sql, osv.). Hvert script må aldrig køres mere end én gang; der . Der gælder dog en undtagelse for ikke-versionerede scripterscriptes, hvis filnavne begynder filnavne indeholder med R, som står for Repeatable. Disse Repeatable scripter skal køres hver gang deres indhold (checksum) er blevet ændret, men de må først køres efter alle versionerede scripter er blevet kørt.

Ved initial installation af servicen vil det således være følgende scripter, der skal køres i den nedenstående rækkefølge:

Servicens database

  • 01-V1__createdb.sql
  • 02-V2__languagecodes.sql
  • 03-V3__patientlock.sql
  • 04-V4__healthprovider.sql
  • 05-V5__increase_versiondescription_column_size.sql
  • 06-V6__create_Properties.sql

 

Info

Under afvikling af unit-tests bliver test-data automatisk indsat i tabellerne vha. yderligere scripter i projektets test-resources.SQL-scripts i compose/database/db/

Info

I udviklingssammenhæng og ved unit-tests kan en databasebruger og en database oprettes vha. scripterne recreate_service_user.sql og recreate_database.sql som er lokaliseret under skr-service/src/test/resources/db. Derefter kan Flyway automatisk initialisere databasen.

Deployment på Wildfly

Denne sektion beskriver konfiguration og deployment af alle ovenstående komponenter på Wildfly 8.

Installation af konfigurationsfiler

Scriptet 08-R__create_v2_Person_Simplified_view.sql opretter et view, som afhænger af eksistensen af tabellen v2_Person. Dette er tabellen, der indeholder CPR-ændringer, og den skal man selv stå for at levere. Under afvikling af unit-tests bliver en testudgave af denne tabel automatisk oprettet vha. et SQL-script i compose/database/db.

Deployment

Komponenten deployes vha. NSP's platform Docker image og konfigurationsfiler mountes i containeren som angivet i projektets Compose-filer.

Komponenterne skr-service komponenten konfigureres ved hjælp et Wildfly-modul, der indholder de nødvendige konfigurationsfiler til definering af datasources, brugerdefinerede parametre, logning, mm.

Info

skr-service er via en jboss-deployment-structure.xml konfigureret til at have en afhængighed på et Wildfly-modul med navnet dk.sundhedsdatastyrelsen.stamkortregister.

Wildfly-modulet, som indeholder konfigurationsfilerne, kan findes under etc/wildfly/modules.

For at installere modulet på Wildfly kopieres indholdet i mappen etc/wildfly/modules til Wildfly's modul-mappe (<wildfly-root>/modules). Med denne fremgangsmåde vil alle nødvendige filer blive tilføjet til Wildfly de rigtige steder, og eksempelvis vil filen i etc/wildfly/modules/dk/sundhedsdatastyrelsen/stamkortregister/main/module.xml ende under <wildfly-root>/modules/dk/sundhedsdatastyrelsen/stamkortregister/main/module.xml.

Selve konfigurationsfilerne for skr-service er lokaliseret i mappen <wildfly-root>/modules/dk/sundhedsdatastyrelsen/stamkortregister/main/resources. Konfigurationsfilerne vil være tilgængelige direkte på classpath'en for de deployede komponenter.

 Wildfly-modulet er integreret i komponentens Docker image.


Info

Alle konfigurerbare properties bør gennemgås inden idriftsættelse, men standardværdierne er tiltænkt anvendelse i produktion medmindre andet er angivet. Med "standardværdierne" forstås de værdier der står i eksempelfilerne under etc/wildfly-mappen i projektets kildekode.

Konfiguration af servicen

Herunder beskrives properties i skr-service komponentens konfigurationsfiler.

application.properties

Properties er her opdelt i to tabeller. Den første tabel indeholder anvendte Spring Boot-properties. Den anden tabel indeholder properties, der er specifikt defineret til brug i servicen. Begge typer af properties er defineret i samme konfigurationsfil.


Konfiguration af services

I folderen "compose/configuration" findes følgende konfigurationsfiler:

application.propertiesKonfiguration af skr-service
operations.propertiesKonfiguration af skr-operations
minlogclient.propertiesKonfiguration af minlog integrationen i skr-service
nas.propertiesKonfiguration af nas integrationen i skr-service og skr-operations
log4j-nspslalog.propertiesKonfiguration af sla log i skr-service og skr-operations
log4j.xmlKonfiguration af logning i skr-service og skr-operations

application.properties

Til at styre SKR kan følgende properties sættes:

...

PropertyBeskrivelseDefault
spring
datasource.
application
skr.jndi-name
Navnet på applikationen. Skal ikke ændres.skrspring.jmx.enabledDisable Spring Boot JMX. Skal ikke ændres. Deaktiveret da vi ikke udstiller særlig JMX funktionalitet.falsespring.jta.enabled

JTA transaktioner. Det er påkrævet at denne er false, således at Spring Boot i stedet anvender dens egen håndtering af transaktioner. (true/false)

falsemanagement.server.port

Port som Spring Boot management endpoints bind'er på. Endpoints deaktiveres ved at sættes værdien til -1.

-1
Angiver navnet på en JNDI datasource til Stamkortregister-databasenjava:jboss/datasources/SKR-DS
datasource.stamdata
spring.datasource
.jndi-nameAngiver navnet på den
primære
JNDI datasource der giver adgang til en (replikeret) stamdata-databasejava:jboss/datasources/
SKR
STM-DS

Komponentspecifikke-properties

Fælles Stamkorthttp://test1sts/services/NewSecurityTokenServiceEndpoint til CPR-Enkeltopslagcpr-ws/service/DetGodeCPROpslag-1.0.3
app.endpointAngiver den location der vises i wsdl.
PropertyBeskrivelseDefault
dcc.endpointAngiver det endpoint, som DCC'en skal kalde. Dette kommer til at fremgå af den XML, der returneres i /dksconfig. Bør ændres før produktion.http://test1.fsk.netic.dk:8080/fsk/services/fsk
minlog.read-activity-textAngiver den tekst der registreres i MinLog, når der bliver læst Stamkortregister-data for et CPR-nummerLæsning af Fælles Opslag i Stamkort
minlog.write-activity-textAngiver den tekst der registreres i MinLog, når der bliver læst Stamkortregister-data for et CPR-nummerOpdatering af Stamkortregister
schemavalidationwhitelist.validate-requestsAngiver om requests skal schema-valideres (true/false)true
schemavalidation.validate-responses

Angiver om responses skal schema-valideres (true/false)

true
schemavalidation.fail-on-response-error

Angiver om en kald skal returnere fejl, hvis response ikke er schema-valid (true/false)

true
forward-only-filter.enabledAngiver om servicen kun skal kunne tilgås igennem DGWS/IDWS Proxyen (wsproxy komponenten). Bør altid være sat til true. (true/false)true
cpre.keystore.filesystem.pathStil til CPRE keystore på filsystemet. Kan være absolut eller relativ i forhold til hvor Wildfly startes fra.cert/Statens_Serum_Institut_FOCES.jks
careprovideridAngiver en komma-separeret liste af whitelistede CVR-numre fra medcom:CareProviderID-attributten fra en DGWS header. Denne whitelisting medfører, at anvenderen kan redigere data ud fra et DGWS niveau 3 kald. Standard-værdien er Sundhed.dk's CVR-nummer.31908574
jobs.delete.cpr-max-resultsSlettejob: Angiver maksimum antal rækker med opdateringer i cpr-registry der skal læses ad gangen25
jobs.delete.cpr-max-loopsSlettejob: Angiver maksimum antal batches der skal behandles pr. jobeksekvering2
skr.codesystem.legalRelationshipTypesHer kan mulige værdier af "RelationType" angives. uspec_paaroerende,
ingen_relationer,
barn,
mor,
far,
forælder,
søskende,
aegtefaelle,
barnebarn,
svigerbarn,
øvrig_familie,
nabo,
samboende,
registreret_partner,
anden,
søn,
datter
cprexists.validationlevel

Valideringsniveau for CPR validering

Eksempel: WARNING, REJECT, OFF


personinformation.url

URL for PersonInformation service

Eksempel: http://test1-cnsp

cpre.sts.endpointEndpoint til STS

.ekstern-test.nspop.dk:8080/

cpre.endpoint

stamdata-personinformation

http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-
cpre.keystore.passwordPassword til det keystore der udpeges af cpre.keystore.filesystem.pathTest1234
cpre.org.idCVR-nummeret fra certifikatet der ligger i det keystore der udpeges af cpre.keystore.filesystem.path46837428
cpre.connect.timeout.millisConnect-timeout mod CPR-enkeltopslag (ms)2000
cpre.read.timeout.millisRead-timeout mod CPR-enkeltopslag (ms)7000
whitelist.careprovideridAngiver en komma-separeret liste af whitelistede CVR-numre fra medcom:CareProviderID-attributten fra en DGWS header. Denne whitelisting medfører, at anvenderen kan redigere data ud fra et DGWS niveau 3 kald. Standard-værdien er Sundhed.dk's CVR-nummer.31908574

log4j2.xml

Konfigurerer logning for servicen.

Standardværdierne angiver nogle brugbare niveauer for anvendelse i produktion. Se Driftsvejledningen for uddybet beskrivelse af logning.

Se den officielle Log4j 2 dokumentation for alternativ konfiguration.

minlogclient.properties

Konfigurerer MinLog for servicen.

Standardværdierne indeholder konfiguration der skriver MinLog-logninger til test1-miljøet.

I produktion skal properties konfigureres som beskrevet i MinLog Service - Guide til anvendere.

nspslalog-skr.properties

Konfigurerer SLA-logning for servicen.

Standardværdien er at SLA-logning er slået til.

...

personinformation/v1
personinformation.maxTotalConnections

Konfiguration af client pool til kald af PersonInformation service

200
personinformation.defaultMaxConnectionsPerRoute

Konfiguration af client pool til kald af PersonInformation service

20
allowed.idws.audienceDet tilladte audience på indkommende idws requestshttps://fsk
skr.citizen.powerofattorney.privilegesFuldmagts-streng<TBD>
skr.phonenumber.validation

Validering af telefonnummer kan man slå til/fra med denne property.

Mulige værdier: ON/OFF

OFF

operations.properties

PropertyBeskrivelse
datasource.skr.jndi-nameAngiver navnet på en JNDI datasource til Stamkortregister-databasen
cleanup.batchsizeAngiver antal person id'er der skal tjekkes cpr numre for af gangen.
desired.execution.duration

Ønsket udførselstid for kørsler af cpr oprydningsjobbet. Angives i ISO-8601 formattet. Fx 'PT20S' (20 sekunder)

Et kald vil køre oprydninger indtil den konfigurerede tid er gået, eller der ikke er flere opgaver på stakken.

personinformation.url

URL for PersonInformation service

minlogclient.properties

SKR anvender MinLogProvider til at registrere logninger i MinLog2, og i den forbindelse skal Kafka properties for Min Log 2 konfigureres. 

Property

Beskrivelse

kafka.producer.bootstrap.serversKafka endpoint, som anvendes i forbindelse med kald til MinLog2
kafka.producer.client.idNavnet som SKR vil fremgå med i listen af Producers på et Kafka Cluster.
kafka.producer.key.serializerSerializer key for Kafka producer
kafka.producer.key.value.serializerSerializer value for Kafka producer
kafka.topic

Kafka topic som anvendes i forbindelse med kald til MinLog2


nas.properties

PropertyBeskrivelse
nas.app.nameApplikationsnavn til sla-logning ved NAS-kald
nas.app.shortnameKort applikationsnavn til sla-logning ved NAS-kald.
nas.fail.thesholdGrænse for hvor mange gange NAS-kald må fejle i træk, før NAS opfattes som usund.
nas.connect.timeout.millisGrænse for hvor lang tid det må tage at oprette forbindelse til NAS (i ms.).
nas.read.timeout.millisGrænse for hvor lang tid det må tage at modtage svar fra NAS (i ms.).
nas.max.total.connectionsMaksimalt antal samtidige NAS-forbindelser.
nas.default.max.connections.per.routeMaksimalt antal NAS-forbindelser per rute.
nas.service.urlNAS Endpoint
nas.topicNAS topic
nas.idcard.subject.id.typeSubjecttype for IDKort til NAS-kald.
nas.idcard.subject.idSubjectId for IDKort til NAS-kald.
nas.idcard.subject.nameSubjectname for IDKort til NAS-kald.
nas.idcard.levelSikkerhedsniveau for IDKort til NAS-kald.
nas.idcard.system.nameSystemnavn i IDKort til NAS-kald.
nas.sts.endpointEndpointet, hvor Minspærring skal trække sit SOSI IDkort på baggrund af sts.keystore
nas.sts.test.modeBoolsk værdi, der angiver om der anvendes test- eller produktions SOSIFederation
nas.sts.keystoresti til keystore, der indeholder certifikat til at trække Idkort til NAS-kald.
nas.sts.keystore.passwordPassword til sts.keystore
nas.credentialvault.aliasAlias fra certifikatet, der blev brugt til NAS. Bruges til at overskrive systemets egenskab, der er indstillet af Sosi Library.


log4j-nspslalog.properties

Standardværdierne konfigurerer en Log4j-backend der logger med ISO 8601 timestamps.

Se NSP-util - Designdokument.doc eller den officielle Log4j 1 dokumentation for alternativ konfiguration.

Konfiguration af proxy-komponent

Wsproxy er en separat komponent og har derfor adskilte konfigurationsfiler ift. selve servicen. Bemærk at disse konfigurationsfiler ikke er placeret i et modul, men i stedet under etc/wildfly/standalone/configuration. De skal installeres i <wildfly-root>/ standalone/configuration.

Der henvises til Installationsvejledning (DGWS/IDWS Proxy) for nærmere beskrivelse af konfigurationen.

wsproxy-skr.properties

Konfigurerer wsproxy komponenten.

Standardværdierne indeholder konfiguration til test1-miljøet, der signerer IDWS-responses med det medfølgende testcertifikat.

proxyconfig-skr.xml

Konfigurerer mapning af requests til den interne forwarding fra wsproxy til selve servicen.

Standardværdierne angiver nogle brugbare konfigurationer af mapninger for anvendelse i produktion.

log4j2-wsproxy-skr.xml

Konfigurerer wsproxy komponentens egen logning. Komponenten har både service-logning og audit-logning.

...

log4j.xml

Konfigurerer logning for servicen.

Der benyttes en rolling file appender, hvor størrelsen af log filerne og antallet af gemte log filer konfigureres med de to environment variable: LOG_MAX_FILE_SIZE og LOG_MAX_BACKUP_INDEX.

Standardværdierne angiver nogle brugbare niveauer for anvendelse i produktion. Se Driftsvejledningen for uddybet beskrivelse af logning.

Se den officielle Log4j dokumentation for alternativ konfiguration.

Konfiguration af Accesshandler

security.properties

Konfigurerer security-api'et. Standardværdierne opsætter en keystore til signering af responses. Der henvises til accesshandlerens dokumentation for yderligere detaljer om konfiguration af security-api'et.

security.skip

Der henvises til accesshandlerens dokumentation for yderligere detaljer om konfiguration af security-api'et.

Konfiguration af datasources

skr-service komponenten kræver adgang til en JNDI datasource. Denne skal opsættes i Wildfly og refereres til i servicens application.properties.

Vær opmærksom på at datasource'en skal opsættes med en strategi for reconnect håndtering i produktion. Se Wildfly's dokumentation for opsætning af datasources.

Info

I mappen etc/wildfly/standalone/deployments er inkluderet eksempler på datasource-konfigurationer til servicens database (skr-ds.xml). Denne datasource-konfigurationsfil kan opsættes i Wildfly ved at kopiere den ind i <wildfly-root>/standalone/deployments. Derudover skal der også deployes en databaseklient-driver i samme mappe. Den medfølgende datasource-konfiguration anvender driveren mysql-connector-java-5.1.29.jar og denne medfølger ikke i projektet.

Ændring til standardkonfiguration i Wildfly

Standardkonfigurationen i Wildfly refererer i filen modules/system/layers/base/sun/jdk/main/service-loader-resources/META-INF/services/javax.script.ScriptEngineFactory til 2 ScriptEngineFactories:

com.sun.script.javascript.RhinoScriptEngineFactory
jdk.nashorn.api.scripting.NashornScriptEngineFactory

RhinoScriptEngineFactory findes ikke i Java 8. Derfor fås fejlen "javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory not found" når der anvendes Java 8. For at undgå denne fejlmeddelelse under opstart af Wildfly skal den første linje fjernes eller udkommenteres.

Deployment af komponenter

uspec_paaroerende,
ingen_relationer,
barn,
mor,
far,
forælder,
søskende,
aegtefaelle,
barnebarn,
svigerbarn,
øvrig_familie,
nabo,
samboende,
registreret_partner,
anden,
søn,
datter

Overblik over komponenter

Følgende beskriver de forskellige deployables som komponenten indeholderKomponenter, der skal deployes til Wildfly, kopieres til mappen <wildfly-root>/standalone/deployments.

Filnavn når deployet

Beskrivelse

Kilde

skr-service.war

SKR servicen

skr-service-<version>.war

skr-operations.war

DGWS/IDWS Proxy . Se Installationsvejledning (DGWS/IDWS Proxy) for dokumentation. War-filen for wsproxy komponenten omdøbes til skr.war, hvilket bevirker at webservice context-path for wsproxy i dette tilfælde bliver /skr.

SKR operations servicen

skr-operations

wsproxy

-<version>.war

(findes ikke i skr-projektet)

Se driftsvejledningen for yderligere information.

...

Når der kommer opgraderinger til en komponent, vil der medfølge release notes, der beskriver opgradering, fallback, osv. for den enkelte komponent.

Start/genstart af komponenterne

Alle komponenter kan genstartes ved at opdatere war-filens last access time med Unix-kommandoen touch, hvilket automatisk detekteres af Wildfly's deploynent scanner. Alternativt kan Wildfly genstartes.