Skip to content

Commit

Permalink
Legg opp til enklere portkonflikthåndtering i docker og applikasjon
Browse files Browse the repository at this point in the history
  • Loading branch information
anderssonw committed Aug 20, 2024
1 parent 190c167 commit 1248ae6
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 22 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,5 @@ out/

### Jenv ###
.java-version

.env
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
FROM eclipse-temurin:21-jdk-alpine
EXPOSE 8080:8080
EXPOSE ${PORT:-8080}:${PORT:-8080}
RUN mkdir /app
COPY /build/libs/matrikkel-bygning-egenregistrering-all.jar /app/app.jar
ENTRYPOINT ["java", "-Dlogback.configurationFile=logback-cloud.xml", "-jar","/app/app.jar"]
53 changes: 37 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,18 @@ Databasen kan startes med docker compose:
$ docker-compose up db -d
```

Flagget `-d` gjør at loggene fra containeren ikke skrives til stdout. Dersom du ønsker det kan du droppe flagget.
Flagget `-d` gjør at containeren kjøres i detached modus og loggene fra containeren ikke skrives til stdout. Dersom du
ønsker det kan du droppe flagget.

### Integrasjon mot matrikkel APIet
### Kjøring av applikasjon

Som standard brukes det en stub/mock mot matrikkel APIet når applikasjonen kjører lokalt.
For å endre til å gå mot et faktisk kjørende matrikkel, må propertien `matrikkel.useStub` settes til `false`
i [application-local.conf](./src/main/resources/application-local.conf)
Når databasen kjører, kan du kjøre opp applikasjonen enten lokalt, eller som en Docker container. Før du gjør dette må
du bygge applikasjonen, dette kan gjøres med gradle:

I tillegg må følgende miljøvariabler være satt (f.eks. i Run Configurations i IntelliJ)

```
MATRIKKEL_BASE_URL // Kan settes for å overstyre default miljø
MATRIKKEL_USERNAME
MATRIKKEL_PASSWORD
```sh
$ ./gradlew build
```

### Kjøring av applikasjon

Når databasen kjører, kan du kjøre opp applikasjonen enten lokalt, eller som en Docker container.

Hvis du vil kjøre appen som en Docker container kan du kjøre:

```sh
Expand All @@ -52,9 +44,38 @@ $ docker-compose up web -d
Ellers er det bare å kjøre opp applikasjonen som ønsket via IntelliJ eller kommandolinje. Ingen spesielle hensyn som er
nødvendig rundt miljøkonfigurasjon, det skal ha sane defaults.

#### Håndtering av portkonflikter

Applikasjonen er satt opp til å håndtere bruk av andre porter enn default 8080 og 8081. Hvis du ønsker å bruke dette kan
du opprette en fil ved navn `.env` på rot i prosjektet. Denne filen blir ignorert av git og sjekkes ikke inn. Sett så
følgende variabler:

```
PORT=<PORT_NUMMER>
INTERNAL_PORT=<PORT_NUMMER>
```

`PORT` brukes for selve applikasjonen, mens `INTERNAL_PORT` brukes for interne endepunkter som metrikker og
helsesjekker.

### Integrasjon mot matrikkel APIet

Som standard brukes det en stub/mock mot matrikkel APIet når applikasjonen kjører lokalt.
For å endre til å gå mot et faktisk kjørende matrikkel, må propertien `matrikkel.useStub` settes til `false`
i [application-local.conf](./src/main/resources/application-local.conf)

I tillegg må følgende miljøvariabler være satt (f.eks. i Run Configurations i IntelliJ)

```
MATRIKKEL_BASE_URL // Kan settes for å overstyre default miljø
MATRIKKEL_USERNAME
MATRIKKEL_PASSWORD
```

### Integrasjonstester

Prosjektet inneholder noen integrasjonstester som ligger under [src/integrationTest](src/integrationTest). Testene bruker blant annet
Prosjektet inneholder noen integrasjonstester som ligger under [src/integrationTest](src/integrationTest). Testene
bruker blant annet
testcontainers for å kjøre opp en database som bruke under testene.

Testene er definert med en egen task som kan kjøres slik:
Expand Down
4 changes: 3 additions & 1 deletion docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ services:
web:
build: .
ports:
- "8080:8080"
- "${PORT:-8080}:${PORT:-8080}"
environment:
DB_URL: postgresql://db:5432/postgres
PORT: "${PORT:-8080}"
INTERNAL_PORT: "${INTERNAL_PORT:-8081}"
depends_on:
db:
condition: service_healthy
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,18 @@ import no.kartverket.matrikkel.bygning.services.EgenregistreringsService
import no.kartverket.matrikkel.bygning.services.HealthService

fun main() {
val internalPort = System.getenv("INTERNAL_PORT")?.toIntOrNull() ?: 8081
val port = System.getenv("PORT")?.toIntOrNull() ?: 8080

embeddedServer(
factory = Netty,
port = 8081,
port = internalPort,
module = Application::internalModule,
).start(wait = false)

embeddedServer(
factory = Netty,
port = 8080,
port = port,
module = Application::mainModule,
watchPaths = listOf("classes"),
).start(wait = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package no.kartverket.matrikkel.bygning.plugins

import io.bkbn.kompendium.core.plugin.NotarizedApplication
import io.bkbn.kompendium.json.schema.KotlinXSchemaConfigurator
import io.bkbn.kompendium.oas.OpenApiSpec
import io.bkbn.kompendium.oas.info.Info
import io.ktor.server.application.*
Expand All @@ -15,6 +14,5 @@ fun Application.configureOpenAPI() {
version = "0.1",
),
)
schemaConfigurator = KotlinXSchemaConfigurator()
}
}
1 change: 1 addition & 0 deletions src/main/resources/application-local.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
storage {
jdbcURL = "postgresql://localhost:5432/postgres"
jdbcURL = ${?DB_URL}
username = "postgres"
password = "postgres"
}
Expand Down

0 comments on commit 1248ae6

Please sign in to comment.