Page History
...
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:
- 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.1 | 2018-09-11 | Ændret databasedriver til MySQL | Trifork |
| 1.0.11 | 2019-08-16 | Fjernet SCES properties. Opdateret default value for property "minlog.read-activity-text". | Trifork |
| 1.0.12 | 2019-25-09 | Ajourført | Trifork |
| 1.0.17 | 2020-10-08 | Ajourført | KvalitetsIT |
| 1.0.18 | 2021-04-13 | Opdateret | KvalitetsIT |
| 1.0.21 | 2021-09-02 | Ajourføring af links | KvalitetsIT |
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 -DskipTestsProjektets 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 kan man oprette de nødvendige database-schemas vha. scriptet compose/database/db/create_db.sql. I application.properties-filen i projektet er datasources som default sat til at anvende root-user med tomt password. 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 testAlternativt kan også samtidigt bygge projektet Alternativt kan projektet også bygges uden afvikling af test ved at anvende Maven-kommandoen:
mvn clean install -DskipTestsKrav til miljø
Komponenten 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.
...
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, 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 compose/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 SQL-scripter scripts i compose/database/db/test. |
| Info |
|---|
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/test. |
Deployment
Komponenten deployes vha. NSP's platform Docker image og konfigurationsfiler mountes i containeren som angivet i projektets Compose-filer.
skr-service komponenten Komponenterne konfigureres ved hjælp et Wildfly-modul, der indholder de nødvendige konfigurationsfiler til definering af datasources, brugerdefinerede parametre, logning, mm. 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. |
Konfiguration af
...
services
I folderen "compose/configuration" findes følgende konfigurationsfiler:
| application.properties | Konfiguration af skr-service |
...
| operations.properties | Konfiguration af skr-operations |
| minlogclient.properties | Konfiguration af minlog integrationen i skr-service |
| nas.properties | Konfiguration af nas integrationen i skr-service og skr-operations |
| log4j-nspslalog.properties | Konfiguration af sla log i skr-service og skr-operations |
| log4j.xml | Konfiguration af logning i skr-service og skr-operations |
application.properties
Til at styre SKR kan følgende properties sættes:
| Property | Beskrivelse | Default |
|---|---|---|
| datasource.skr.jndi-name | Angiver navnet på en JNDI datasource til Stamkortregister-databasen | java:jboss/datasources/SKR-DS |
| datasource.stamdata |
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.
Spring Boot-properties
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)
Port som Spring Boot management endpoints bind'er på. Endpoints deaktiveres ved at sættes værdien til -1.
| .jndi-name | Angiver navnet på den |
| JNDI datasource der giver adgang til en (replikeret) stamdata-database | java:jboss/datasources/ |
| STM-DS |
Komponentspecifikke-properties
| app.endpoint | Angiver den location der vises i wsdl. | ||||
| Property | Beskrivelse | Default | |||
|---|---|---|---|---|---|
| dcc.endpoint | Angiver 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-text | Angiver den tekst der registreres i MinLog, når der bliver læst Stamkortregister-data for et CPR-nummer | Opslag i Stamkort | |||
| minlog.write-activity-text | Angiver den tekst der registreres i MinLog, når der bliver læst Stamkortregister-data for et CPR-nummer | Opdatering af Stamkortregister | |||
| schemavalidation.validate-requests | Angiver 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 | |||
| minlog.title.borger | Default rolle, der sendes med til MinLog, når den udførende bruger er en borger eller en borger på vegne af en anden borger | Borger | |||
| minlog.title.sf.ingenrolle | Default rolle, der sendes med til MinLog, når den udførende bruger er en sundhedsfaglig uden enten uddannelseskode eller national rolle | Ingen verificeret rolle | forward-only-filter.enabled | Angiver om servicen kun skal kunne tilgås igennem DGWS/IDWS Proxyen (wsproxy komponenten). Bør altid være sat til true. (true/false) | true |
| whitelist.careproviderid | Angiver 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.
...
| jobs.delete.cpr-max-results | Slettejob: Angiver maksimum antal rækker med opdateringer i cpr-registry der skal læses ad gangen | 25 |
| jobs.delete.cpr-max-loops | Slettejob: Angiver maksimum antal batches der skal behandles pr. jobeksekvering | 2 |
| skr.codesystem.legalRelationshipTypes | Her 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.ekstern-test.nspop.dk:8080/stamdata-personinformation | http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-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 |
| personinformation.errorcount.duration | angiver hvor lang tid tilbage der skal tælles fejl fra PersonInformation servicen (ifm. /isAlive endpointet). Angives som duration i ISO-8601 formattet. | PT10M |
| personinformation.error.tolerance | Angiver antal fejl der tolereres fra PersonInformation servicen før /isAlive endpointet angiver servicen som ikke tilgængelig. | 50 |
| allowed.idws.audience | Det tilladte audience på indkommende idws requests | https://fsk |
| skr.citizen.powerofattorney.privileges | Fuldmagts-streng | <TBD> |
| skr.phonenumber.validation | Validering af telefonnummer kan man slå til/fra med denne property. Mulige værdier: ON/OFF | OFF |
operations.properties
| Property | Beskrivelse |
|---|---|
| datasource.skr.jndi-name | Angiver navnet på en JNDI datasource til Stamkortregister-databasen |
| cleanup.batchsize | Angiver 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 |
| migration.batchsize | Angiver antal CPR-nummer der skal migreres af gangen. |
| migration.limit | Angiver antal CPR-nummer der skal hentes fra databasen, som senere opdeles i migration.batchsize |
| migration.desired.execution.duration | Ønsket udførselstid for kørsler af migrations jobbet. Angives i ISO-8601 formattet. Fx 'PT20S' (20 sekunder) Et kald vil køre migrations indtil den konfigurerede tid er gået, eller der ikke er flere opgaver på stakken. |
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.servers | Kafka endpoint, som anvendes i forbindelse med kald til MinLog2 |
| kafka.producer.client.id | Navnet som SKR vil fremgå med i listen af Producers på et Kafka Cluster. |
| kafka.producer.key.serializer | Serializer key for Kafka producer |
| kafka.producer.key.value.serializer | Serializer value for Kafka producer |
| kafka.topic | Kafka topic som anvendes i forbindelse med kald til MinLog2 |
nas.properties
| Property | Beskrivelse |
|---|---|
| nas.app.name | Applikationsnavn til sla-logning ved NAS-kald |
| nas.app.shortname | Kort applikationsnavn til sla-logning ved NAS-kald. |
| nas.fail.theshold | Grænse for hvor mange gange NAS-kald må fejle i træk, før NAS opfattes som usund. |
| nas.connect.timeout.millis | Grænse for hvor lang tid det må tage at oprette forbindelse til NAS (i ms.). |
| nas.read.timeout.millis | Grænse for hvor lang tid det må tage at modtage svar fra NAS (i ms.). |
| nas.max.total.connections | Maksimalt antal samtidige NAS-forbindelser. |
| nas.default.max.connections.per.route | Maksimalt antal NAS-forbindelser per rute. |
| nas.service.url | NAS Endpoint |
| nas.topic | NAS topic |
| nas.idcard.subject.id.type | Subjecttype for IDKort til NAS-kald. |
| nas.idcard.subject.id | SubjectId for IDKort til NAS-kald. |
| nas.idcard.subject.name | Subjectname for IDKort til NAS-kald. |
| nas.idcard.level | Sikkerhedsniveau for IDKort til NAS-kald. |
| nas.idcard.system.name | Systemnavn i IDKort til NAS-kald. |
| nas.sts.endpoint | Endpointet, hvor Minspærring skal trække sit SOSI IDkort på baggrund af sts.keystore |
| nas.sts.test.mode | Boolsk værdi, der angiver om der anvendes test- eller produktions SOSIFederation |
| nas.sts.keystore | sti til keystore, der indeholder certifikat til at trække Idkort til NAS-kald. |
| nas.sts.keystore.password | Password til sts.keystore |
| nas.credentialvault.alias | Alias 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 er mountet i Docker containeren under <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.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
Der følgende Følgende beskriver de forskellige deployables som komponenten indeholder.
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 projektet) |
Se driftsvejledningen for yderligere information.
...