From 097981112d8f62e22af5e40967852bd58feee0ef Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Thu, 27 Mar 2025 01:49:56 +0100 Subject: [PATCH] add postgresql docker --- .gitignore | 4 +++- README.md | 5 +++-- build.gradle.kts | 33 +++++++++++++++++++++++++++++++ docker/.env.template | 2 ++ docker/docker-compose.yaml | 40 +++++++++++++++++++++++++++++++++++++- 5 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 docker/.env.template diff --git a/.gitignore b/.gitignore index c426c32..fe1d708 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,6 @@ out/ /.nb-gradle/ ### VS Code ### -.vscode/ \ No newline at end of file +.vscode/ +/docker/.env +/docker/*.secret diff --git a/README.md b/README.md index 8bd46be..8f525ca 100644 --- a/README.md +++ b/README.md @@ -2,5 +2,6 @@ Event demo ========== Admin service URL: - - http://dashboard.traefik.me/dashboard/ - - http://redis.traefik.me/ \ No newline at end of file + - [Traefik](http://pgadmin.traefik.me/) + - [Redis](http://pgadmin.traefik.me/) + - [pgAdmin](http://pgadmin.traefik.me/) \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 5ece9fa..b9ceeaf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,6 +52,39 @@ tasks.test { dependsOn("composeUp") } +tasks.register("copyEnv") { + group = "docker" + description = "copy the default dotenv file" + from("/docker") + into("/docker") + rename { + println(it) + it.removeSuffix(".template") + } + include(".env.template") + eachFile { + if (File("docker/$name").exists()) { + exclude() + } + } + doLast { + val files = + listOf( + File("docker/pgadmin.secret"), + File("docker/postgresql.secret"), + ) + + files.forEach { + if (!it.exists()) { + it.writeText("") + } + } + } +} +tasks.composeUp { + dependsOn("copyEnv") +} + dependencies { implementation("io.ktor:ktor-server-core-jvm") implementation("io.ktor:ktor-server-auth-jvm") diff --git a/docker/.env.template b/docker/.env.template new file mode 100644 index 0000000..fe0285b --- /dev/null +++ b/docker/.env.template @@ -0,0 +1,2 @@ +POSTGRES_USER=event-demo +PGADMIN_DEFAULT_EMAIL= \ No newline at end of file diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index fc586ef..568b021 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -32,6 +32,44 @@ services: - "traefik.http.routers.redis.rule=Host(`redis.traefik.me`)" - "traefik.http.services.redis.loadbalancer.server.port=8001" + postgresql: + image: postgres:17.4 + ports: + - "5432:5432" + environment: + POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password + POSTGRES_USER: event-demo + secrets: + - postgresql_password + healthcheck: + test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"] + interval: 1s + timeout: 5s + retries: 10 + volumes: + - postgresql_data:/var/lib/postgresql/data + + pgadmin: + image: dpage/pgadmin4 + environment: + PGADMIN_DEFAULT_EMAIL: $PGADMIN_DEFAULT_EMAIL + PGADMIN_DEFAULT_PASSWORD_FILE: /run/secrets/pgadmin_password + secrets: + - pgadmin_password + volumes: + - pgadmin_data:/var/lib/pgadmin + labels: + - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.traefik.me`)" + - "traefik.http.services.pgadmin.loadbalancer.server.port=80" + +secrets: + pgadmin_password: + file: pgadmin.secret + postgresql_password: + file: postgresql.secret + volumes: redis_data: - redisinsight_data: \ No newline at end of file + redisinsight_data: + postgresql_data: + pgadmin_data: \ No newline at end of file