From b490bec437931117e578fbc106fa98ecc35d43d6 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Thu, 10 Apr 2025 09:50:00 +0200 Subject: [PATCH 1/5] feat: update all postgres image references to 16.8-alpine3.21 --- .../kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt | 2 +- build.gradle | 2 +- docker/app/Dockerfile | 2 +- docker/docker-compose.template.yml | 2 +- docker/docker-compose.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt b/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt index 80f55721375..ac7669efd9c 100644 --- a/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt +++ b/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt @@ -14,7 +14,7 @@ class PostgresDockerRunner( override fun run() { instance = DockerContainerRunner( - image = "postgres:16.3", + image = "postgres:16.8-alpine3.21", expose = mapOf(postgresAutostartProperties.port to "5432"), waitForLog = "database system is ready to accept connections", waitForLogTimesForNewContainer = 2, diff --git a/build.gradle b/build.gradle index 1fefb33a9a1..8aacb4140ef 100644 --- a/build.gradle +++ b/build.gradle @@ -103,7 +103,7 @@ project(':server-app').afterEvaluate { commandLine "docker", "rm", "--force", "--volumes", dbSchemaContainerName } exec { - commandLine "docker", "run", "-e", "POSTGRES_PASSWORD=postgres", "-d", "-p55538:5432", "--name", dbSchemaContainerName, "postgres:13" + commandLine "docker", "run", "-e", "POSTGRES_PASSWORD=postgres", "-d", "-p55538:5432", "--name", dbSchemaContainerName, "postgres:16.8-alpine3.21" } Thread.sleep(5000) } diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index f22e6f7d01c..f395b8b5873 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -1,4 +1,4 @@ -FROM postgres:13.21-alpine3.22 +FROM postgres:16.8-alpine3.21 ENTRYPOINT [] diff --git a/docker/docker-compose.template.yml b/docker/docker-compose.template.yml index ff1d5a98eac..c395ba5ddcb 100644 --- a/docker/docker-compose.template.yml +++ b/docker/docker-compose.template.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:11 + image: postgres:16.8-alpine3.21 environment: - POSTGRES_PASSWORD=postgres app: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3753a3a7c8b..e5576cc9634 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:11 + image: postgres:16.8-alpine3.21 volumes: - ../build/db-data:/var/lib/postgresql/data/ environment: From a246265ed1a767f6120c0597929d82e95c61e03c Mon Sep 17 00:00:00 2001 From: Cynthia Date: Fri, 11 Apr 2025 09:47:06 +0200 Subject: [PATCH 2/5] fix: use debian-based PostgreSQL images instead of Alpine musl libc's reduced feature-set causes unexpected issues with ordering existing workarounds seem to surface more unexpected issues as well let's go for the easy solution first --- .../io/tolgee/postgresRunners/PostgresDockerRunner.kt | 2 +- build.gradle | 7 ++++++- docker/app/Dockerfile | 2 +- docker/docker-compose.template.yml | 2 +- docker/docker-compose.yml | 4 ++-- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt b/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt index ac7669efd9c..9ebfe522385 100644 --- a/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt +++ b/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt @@ -14,7 +14,7 @@ class PostgresDockerRunner( override fun run() { instance = DockerContainerRunner( - image = "postgres:16.8-alpine3.21", + image = "postgres:16.8", expose = mapOf(postgresAutostartProperties.port to "5432"), waitForLog = "database system is ready to accept connections", waitForLogTimesForNewContainer = 2, diff --git a/build.gradle b/build.gradle index 8aacb4140ef..b53e57aa849 100644 --- a/build.gradle +++ b/build.gradle @@ -103,7 +103,12 @@ project(':server-app').afterEvaluate { commandLine "docker", "rm", "--force", "--volumes", dbSchemaContainerName } exec { - commandLine "docker", "run", "-e", "POSTGRES_PASSWORD=postgres", "-d", "-p55538:5432", "--name", dbSchemaContainerName, "postgres:16.8-alpine3.21" + commandLine "docker", "run", + "-e", "POSTGRES_PASSWORD=postgres", + "-d", + "-p55538:5432", + "--name", dbSchemaContainerName, + "postgres:16.8" } Thread.sleep(5000) } diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index f395b8b5873..10a46c2cccc 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -1,4 +1,4 @@ -FROM postgres:16.8-alpine3.21 +FROM postgres:16.8 ENTRYPOINT [] diff --git a/docker/docker-compose.template.yml b/docker/docker-compose.template.yml index c395ba5ddcb..ef63e41331e 100644 --- a/docker/docker-compose.template.yml +++ b/docker/docker-compose.template.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:16.8-alpine3.21 + image: postgres:16.8 environment: - POSTGRES_PASSWORD=postgres app: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index e5576cc9634..7e28ab9aa84 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:16.8-alpine3.21 + image: postgres:16.8 volumes: - ../build/db-data:/var/lib/postgresql/data/ environment: @@ -14,4 +14,4 @@ services: depends_on: - "db" smtp: - image: namshi/smtp \ No newline at end of file + image: namshi/smtp From f47f9aecfd0d49bacac803be1785a8504116ce26 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Fri, 11 Apr 2025 10:11:04 +0200 Subject: [PATCH 3/5] fix: properly adjust Dockerfile --- docker/app/Dockerfile | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index 10a46c2cccc..7c22225dd43 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -2,8 +2,17 @@ FROM postgres:16.8 ENTRYPOINT [] -RUN apk --no-cache add openjdk21 -RUN apk --no-cache add libxml2 +RUN < /dev/null + echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list + apt -qq update + apt -qq -y install temurin-21-jdk libxml2 + apt -qq -y remove wget --purge --auto-remove + rm -rf /var/lib/apt/lists/* +EOF ############# ### Tolgee # From df2fe08282bef780f597ecb479477de648d3a5d1 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Thu, 6 Nov 2025 21:49:34 +0100 Subject: [PATCH 4/5] feat: postgresql 18 --- .../kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt | 2 +- build.gradle | 2 +- docker/app/Dockerfile | 2 +- docker/docker-compose.template.yml | 2 +- docker/docker-compose.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt b/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt index 9ebfe522385..54dfac2879b 100644 --- a/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt +++ b/backend/app/src/main/kotlin/io/tolgee/postgresRunners/PostgresDockerRunner.kt @@ -14,7 +14,7 @@ class PostgresDockerRunner( override fun run() { instance = DockerContainerRunner( - image = "postgres:16.8", + image = "postgres:18.0", expose = mapOf(postgresAutostartProperties.port to "5432"), waitForLog = "database system is ready to accept connections", waitForLogTimesForNewContainer = 2, diff --git a/build.gradle b/build.gradle index b53e57aa849..30f0f5ecd6b 100644 --- a/build.gradle +++ b/build.gradle @@ -108,7 +108,7 @@ project(':server-app').afterEvaluate { "-d", "-p55538:5432", "--name", dbSchemaContainerName, - "postgres:16.8" + "postgres:18.0" } Thread.sleep(5000) } diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index 7c22225dd43..922145c012e 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -1,4 +1,4 @@ -FROM postgres:16.8 +FROM postgres:18.0 ENTRYPOINT [] diff --git a/docker/docker-compose.template.yml b/docker/docker-compose.template.yml index ef63e41331e..298329a8a0c 100644 --- a/docker/docker-compose.template.yml +++ b/docker/docker-compose.template.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:16.8 + image: postgres:18.0 environment: - POSTGRES_PASSWORD=postgres app: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 7e28ab9aa84..a40a4a8f0b4 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,6 +1,6 @@ services: db: - image: postgres:16.8 + image: postgres:18.0 volumes: - ../build/db-data:/var/lib/postgresql/data/ environment: From fabd16139df652b16454ef48c64808b228294859 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Thu, 6 Nov 2025 22:03:34 +0100 Subject: [PATCH 5/5] build: introduce -pg18 docker builds to not cause breaking changes yet --- .github/workflows/release.yml | 6 ++++-- docker/app/legacy.Dockerfile | 39 +++++++++++++++++++++++++++++++++++ gradle/docker.gradle | 22 ++++++++++++++------ 3 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 docker/app/legacy.Dockerfile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 278abbc5695..4e55f1173a8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,8 +66,10 @@ jobs: if: ${{ steps.version.outputs.VERSION != '' }} run: | docker buildx create --use - docker buildx build . -t tolgee/tolgee:${{ steps.version.outputs.VERSION }} --platform linux/arm64,linux/amd64 --cache-from type=registry,ref=tolgee/tolgee:latest --cache-to type=inline --push - docker buildx build . -t tolgee/tolgee:latest --platform linux/arm64,linux/amd64 --cache-from type=registry,ref=tolgee/tolgee:latest --cache-to type=inline --push + docker buildx build . -f legacy.Dockerfile -t tolgee/tolgee:${{ steps.version.outputs.VERSION }} --platform linux/arm64,linux/amd64 --cache-from type=registry,ref=tolgee/tolgee:latest --cache-to type=inline --push + docker buildx build . -f legacy.Dockerfile -t tolgee/tolgee:latest --platform linux/arm64,linux/amd64 --cache-from type=registry,ref=tolgee/tolgee:latest --cache-to type=inline --push + docker buildx build . -t tolgee/tolgee:${{ steps.version.outputs.VERSION }}-pg18 --platform linux/arm64,linux/amd64 --cache-from type=registry,ref=tolgee/tolgee:latest --cache-to type=inline --push + docker buildx build . -t tolgee/tolgee:latest-pg18 --platform linux/arm64,linux/amd64 --cache-from type=registry,ref=tolgee/tolgee:latest --cache-to type=inline --push working-directory: build/docker - name: Pack with webapp diff --git a/docker/app/legacy.Dockerfile b/docker/app/legacy.Dockerfile new file mode 100644 index 00000000000..69fe0526f43 --- /dev/null +++ b/docker/app/legacy.Dockerfile @@ -0,0 +1,39 @@ +# TODO: remove for Tolgee 4 release +FROM postgres:13.21-alpine3.22 + +ENTRYPOINT [] + +RUN apk --no-cache add openjdk21 +RUN apk --no-cache add libxml2 + +############# +### Tolgee # +############# + +# Expose application port +EXPOSE 8080 + +# Define persistent volume for data storage +VOLUME /data + +# Environment variables for configuration +ENV HEALTHCHECK_PORT=8080 \ + spring_profiles_active=docker + +# Copy necessary application files +COPY BOOT-INF/lib /app/lib +COPY META-INF /app/META-INF +COPY BOOT-INF/classes /app +COPY --chmod=755 cmd.sh /app + +################# +### Let's go ## +################# + +# Define the startup command +ENTRYPOINT ["/app/cmd.sh"] + + +# Health check to ensure the app is up and running +HEALTHCHECK --interval=10s --timeout=3s --retries=20 \ + CMD wget --spider -q "http://127.0.0.1:$HEALTHCHECK_PORT/actuator/health" || exit 1 diff --git a/gradle/docker.gradle b/gradle/docker.gradle index 6635901e7b4..b85671a6be7 100644 --- a/gradle/docker.gradle +++ b/gradle/docker.gradle @@ -21,8 +21,12 @@ task docker { doLast { exec { workingDir dockerPath - commandLine "docker", "build", ".", "-t", "tolgee/tolgee", "--cache-from", "type=registry,ref=tolgee/tolgee:latest" + commandLine "docker", "build", ".", "-t", "tolgee/tolgee", "--cache-from", "type=registry,ref=tolgee/tolgee:latest-pg18" } + exec { + workingDir dockerPath + commandLine "docker", "build", ".", "-f", "legacy.Dockerfile", "-t", "tolgee/tolgee", "--cache-from", "type=registry,ref=tolgee/tolgee:latest" + } } dependsOn("dockerPrepare") } @@ -32,13 +36,19 @@ void createDockerBuildxTask(String taskName, boolean isPush) { doLast { if (project.hasProperty('dockerImageTag')) { def commandParams = ["docker", "buildx", "build", ".", "-t", project.property('dockerImageTag'), "--platform", "linux/arm64,linux/amd64"] - if (isPush) { + def commandParamsLegacy = ["docker", "buildx", "build", ".", "-f", "legacy.Dockerfile", "-t", project.property('dockerImageTag') + "-pg18", "--platform", "linux/arm64,linux/amd64"] + if (isPush) { commandParams += ["--push"] + commandParamsLegacy += ["--push"] } - exec { - workingDir dockerPath - commandLine commandParams - } + exec { + workingDir dockerPath + commandLine commandParams + } + exec { + workingDir dockerPath + commandLine commandParamsLegacy + } } else { throw new GradleException('A "dockerImageTag" project property must be defined! e.g. ./gradlew dockerBuildx -PdockerImageTag=myImageTag'); }