sjekkliste:
- ha riktig gradle versjon (kan finnes i
build.gradle.kts
- let ettergradleVersion =
) - ha riktig java versjon (kan finnes i
build.gradle.kts
- let etterjvmTarget =
) - La prosjektet ditt bruke riktig java versjon (høyreklikk prosjektnavn ->
Open module settings
og set riktig java versjon)- Du kan laste ned java versjon ved bruk av SDKman
- Ikke ha database porten i bruk av noe annet (hvis du for eksempel lastet ned postgresql via homebrew og startet den)
Kan startes lokalt fra web/src/main/kotlin/.../Application.kt sin fun main(...)
. Krever at start-dev.sh
skriptet
i su-se-fremover kjører
Lokal database startes med docker compose up
Hvis man ønsker å resette hele databasen og starte fra scratch er det enkleste å slette volumet ved å
kjøre ./resetdb.sh
sudo nano /etc/hosts
- Legg inn følgende:
# NAV POSTGRES PREPROD URL 10.53.17.46 b27dbvl030.preprod.local # NAV POSTGRES PROD URL 10.53.15.186 A01DBVL036.adeo.no
- lagre
For backup av testmiljøets database, må du hente brukernavn og password (admin - se Koble til database i preprod/prod) fra vault.
Backup
- For å ta en kopi av databasen kan du bruke følgende script i
terminalen
pg_dump -U username -W -h remote_hostname -p remote_port -F c database_name > filnavn.dump
- eksempel for lokalt
pg_dump -U user -h localhost -p 5432 -F c supstonad-db-local > filnavn.dump
- password
pwd
- password
- eksempel for
test
pg_dump -U brukernavnFraVault -h b27dbvl030.preprod.local -p 5432 -F c supstonad-db-15-dev > filnavn.dump
- eksempel for lokalt
Import
- For å legge inn dataen i basen kan du kjøre
følgende
pg_restore -h remote_host -p remote_port -U brukernavn -d database_name filnavn.dump
- eksempel for lokalt
pg_restore -c --if-exists -h localhost -p 5432 -U user -d supstonad-db-local filnavn.dump
- password er
pwd
- Terminal vil kanskje gi deg en del 'errors' pga roller etc. Disse kan du se bort ifra
- Hvis du samtidig inspecter filen (f.eks nano) vil du kanskje se en del encoding issues. Disse var heller ikke et problem ved import
- password er
- eksempel for lokalt
Dersom man får feilene
running bootstrap script ... 2022-08-30 16:10:20.342 CEST [53606] FATAL: could not create shared memory segment: Cannot allocate memory
java.lang.IllegalStateException: Process [/var/folders/l_/c1b_7t2n39j48k7sbpp54zy00000gn/T/embedded-pg/PG-8eddc1e460ca1c5597350c162933683c/bin/initdb, -A, trust, -U, postgres, -D, /var/folders/l_/c1b_7t2n39j48k7sbpp54zy00000gn/T/epg3835758492450081687, -E, UTF-8] failed
kan du prøve disse 2 mulighetene:
-
Hvis du ikke har; legg inn
export LC_CTYPE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
i din terminal profil (f.eks .zshrc). Dersom det ikke fikser problemet, kan du også prøve punktet over.
-
øke shared memory:
sudo sysctl kern.sysv.shmmax=104857600
eller en annen ønsket verdi, for eksempel524288000
sudo sysctl kern.sysv.shmall=2560
eller en annen ønsket verdi, for eksempel65536
su-se-framover tar seg av autentisering (backend for frontend (BFF)) og kaller su-se-bakover med on-behalf-of tokens ( per bruker).
Lokalt kjøres det opp en mock oauth2-server på http://localhost:4321 . Se https://github.com/navikt/su-se-framover#mock-oauth-server for mer informasjon.
Legg inn følgende variabler i .env:
- AZURE_APP_CLIENT_ID
- AZURE_APP_WELL_KNOWN_URL
- AZURE_APP_CLIENT_SECRET
Kan kopiere AZURE_APP_WELL_KNOWN_URL
fra .env.azure.template
Disse hentes fra kjørende pod i det miljøet du vil teste mot.
Merk: AZURE_APP_CLIENT_SECRET
roteres automatisk.
For da å bruke gruppe-claimet som kommer fra Azure må man også endre implementasjonen av getGroupsFromJWT
i ./web/src/main/kotlin/no/nav/su/se/bakover/web/Extensions.kt.
Bytt dette i AuthenticationConfig.kt
- verifier(jwkStsProvider, stsJwkConfig.getString("issuer"))
+ verifier(jwkStsProvider, "https://security-token-service.nais.preprod.local"))
Bytt dette i StsClient.kt
override fun jwkConfig(): JSONObject {
val (_, _, result) = wellKnownUrl.httpGet().responseString()
return result.fold(
- { JSONObject(it) },
+ { JSONObject(it.replace("nais.preprod.local", "dev.adeo.no")) },
{ throw RuntimeException("Could not get JWK config from url $wellKnownUrl, error:$it") }
)
}
Legg disse i .env
USE_STUB_FOR_STS=false
STS_URL=https://security-token-service.dev.adeo.no
Applikasjonen vil selv generere gyldige jwt-tokens for inkommende kall. Ved behov kan innholdet i disse konfigureres
i JwtStub.kt
.
Merk at tokens som genereres automatisk av appen kun vil være gyldige for den aktuelle instansen som genererte den.
For å unngå at man må starte helt fra "login" når applikasjonen restartes, kan man heller slette gamle access_token
fra
browser,
dette fører til at det gjenværende refresh_token
benyttes til å generere nye.
Ved behov for "ekte" innlogging mot Azure kan dette aktiveres for lokal utvikling ved å endre konfigurasjonen i
filen AuthenticationConfig.kt
.
For at dette skal fungere må man i tillegg bytte ut Azure-stubben i StubClientsBuilder.kt
med en faktisk Azure-klient.
Bruk av faktisk klient krever miljøvariabelen:
- AZURE_APP_CLIENT_SECRET
Dette kan man enten legge inn i Run Configuration
i IntelliJ eller lage en .env
fil på rot-nivå. Se .env.template
som eksempel.
Spør en fra teamet, eller hent de fra Vault
under team-secrets for supstonad
Benytter oss av spotless: https://github.com/diffplug/spotless/tree/main/plugin-gradle Som har støtte for forskjellig verktøy som ktlint, ktfmt, diktat, prettier.
- IntelliJ: https://plugins.jetbrains.com/plugin/18321-spotless-gradle og https://github.com/ragurney/spotless-intellij-gradle
- VS Code: https://marketplace.visualstudio.com/items?itemName=richardwillis.vscode-spotless-gradle
- Hvis du har pluginen; Meny -> Code -> Reformat Code with Spotless
- Det finnes en gradle task;
spotlessApply
som kan keybindes eller knyttes til on-save (må muligens bruke FileWatcher-plugin)
./gradlew spotlessDiagnose
- Installer ktlint https://github.com/pinterest/ktlint/releases/ (inntil plugin støtter dette. Kan vurdere legge binæren i prosjektet)
- ktlint applyToIDEAProject (denne overstyrer da IntelliJ sine formateringsregler så godt det går.)
- Kjør
rm ./.git/hooks/pre-commit ./.git/hooks/pre-push
for å slette gamle hooks hvis den feiler ved commit
Vi bruker Prometheus for å samle inn metrikker. Se https://doc.nais.io/observability/metrics.
alerts.yml
deployes automatisk vha. .github/workflows/alerts-deploy.yml
og
benytter Prometheus Query Language for å sette opp
alerts basert på metrikker.
Se https://doc.nais.io/observability/alerts.
preprod: https://prometheus.dev-fss.nais.io prod: https://prometheus.prod-fss.nais.io
preprod: https://alertmanager.dev-fss.nav.cloud.nais.io/#/alerts prod: https://alertmanager.prod-fss.nav.cloud.nais.io/#/alerts
- View alerts:
kubectl --namespace=supstonad get alerts
- Describe alert:
kubectl --namespace=supstonad describe alert su-se-bakover
- Delete alert:
kubectl --namespace=supstonad delete alert su-se-bakover
- Deploy new alert: Just run the
alerts-deploy.yml
GitHub actions workflow
- Find the lastest version of gradle, e.g. by checking here: https://gradle.org/releases/
- Then run
./gradlew wrapper --gradle-version <version>
- In
build.gradle.kts
you also have to change the gradle version. E.g. search forgradleVersion =
- in
gradle.properties
look forktorVersion
orkotlinVersion
- Replace the version with the one you want
- Load gradle changes
- In
build.gradle.kts
and search forjvmTarget =
- In
.github/workflows/*.yml
and search forjava-version
- In
Dockerfile
replaceFROM ghcr.io/navikt/baseimages/temurin:<version>
- Fjern KUBECONFIG pathen i shellet ditt
- fjern kubeconfig-repoet
navikt/kubeconfig
- Du må ha nais-cli - https://docs.nais.io/cli/
- Du må også ha gcloud-cli (kanskje?) - https://cloud.google.com/sdk/docs/install
- log inn i gcloud -
gcloud auth login --update-adc
- Kjør
nais kubeconfig
- Dette vil hente ned alle Clusterene.- merk: Kjør
nais kubeconfig -io
for å hente on-prem clusters også (dev-fss/prod-fss)
- merk: Kjør
- Sett context du hr lyst til å bruke
- for eksempel:
kubectl config use-context dev-fss
- Hvis du må sette namespace i tillegg:
kubectl config set-context --current --namespace=supstonad
- for eksempel:
- Nå skal du kunne kjøre
kubectl get pods
og få listet alle podene våre
Dersom man ønsker å inspisere meldingene i preprod-miljøet:
- Via VmWare (utvikler image): http://a34drvw006.devillo.no:8000/ navn på hostname/lø ligger i
.nais/dev.yaml
.
I preprod: Dersom man ønsker å slette/endre/legge til meldinger eller flytte fra backoff til hovedkø, kan man bruke https://github.com/jmstoolbox/jmstoolbox
- Finn hostname/kø i
.nais/dev.yaml
. - Ping hostname for å få IP
10.53.17.118
- Finn username/password i vault: https://vault.adeo.no/ui/vault/secrets/serviceuser/show/dev/srvsupstonad
- Legg inn channel:
Q1_SU_SE_BAKOVER
- Legg inn queueManager
MQLS02
- Finn en passende Ibm mq jar: https://github.com/jmstoolbox/jmstoolbox/wiki/2.1-Setup-for-IBM-MQ
Vi bruker Github sin innebygde dependabot: https://github.com/navikt/su-se-bakover/network/updates
Se og .github/dependabot.yaml
Denne vil opprette PRs en gang i uka på dependencies som ikke kjører siste versjon.
- Via naisdevice (fungerer kun med nav image) eller via vmware
- Finner settings i
.nais/dev.yaml
og.nais/prod.yaml
. - Hent brukernavn/passord på https://vault.adeo.no/ui/vault/secrets (login med oidc). Åpne konsollen og velg ønsket
rolle:
vault read postgresql/preprod-fss/creds/supstonad-db-15-dev-readonly
vault read postgresql/preprod-fss/creds/supstonad-db-15-dev-user
vault read postgresql/preprod-fss/creds/supstonad-db-15-dev-admin
vault read postgresql/prod-fss/creds/supstonad-db-15-prod-readonly
vault read postgresql/prod-fss/creds/supstonad-db-15-prod-user
vault read postgresql/prod-fss/creds/supstonad-db-15-prod-admin
Se også https://github.com/navikt/utvikling/blob/main/docs/teknisk/PostgreSQL.md
- Lag en PR tilsvarende denne: https://github.com/navikt/database-iac/pull/511
- Lag en PR tilsvarende denne: https://github.com/navikt/vault-iac/pull/5270
- Sjekk at den nye databasen er satt opp og du kan logge inn med vault bruker. Påse at alle extensions er lagt til. E.g.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;
. Hvis ikke hør i #postgres i slack. - Merk at vi ønsker plain sql siden vi skal gjøre endringer:
pg_dump -U <vault-db-username> -W -h b27dbvl030.preprod.local -p 5432 supstonad-db-15-dev > preprod.dump
- Vi må endre db og roles:
sed -i '.bak' 's/supstonad-db-15-dev/<ny-db>/g' preprod.dump
- Fjern extensions-linjene fra dumpen dersom de allerede er utført.
- Legg til
SET ROLE '<db>-admin';
øverst i dumpen. - Lag en PR i su-se-bakover med endringene for først preprod og senere en pr for prod.
kubectl scale deployment su-se-bakover --replicas=0
eller alternivt slett deploymenten.kubectl delete cronjob -l app=su-datapakke-soknad
- Kopier skjema+data til ny base:
PGPASSWORD='<vault-db-passord>' psql -h <ny-db-host>> -p 5432 -U <vault-db-username> -d <ny-db> -f preprod.dump
- Hvis det går bra, merge PRen og deploy. Replicas blir da resatt basert på nais.yml.
- Deploy su-datapakke-soknad. F.eks. ved å endre på den ./datapakker/README.md eller lignende.
Det er opprettet en replikeringsdatabase med data fra den eksisterende su-alder løsningen i Infotrygd (test). Tilgang til databasen kan bestilles via identrutinen.
Tilkobling: jdbc:oracle:thin:@a01dbfl033.adeo.no:1521/infotrygd_suq
(personlig tilgang testet ok med SQLDeveloper i
VDI)
SELECT encode(generertdokument, 'base64') FROM dokument where revurderingId = '<REPLACE_ME>';
base64 --decode -i input.base64 -o output.pdf