From 15b8e6be24a5764364adc00be297dcbbfa8be607 Mon Sep 17 00:00:00 2001
From: Nessar
Date: Wed, 22 Jul 2026 19:38:52 +0200
Subject: [PATCH] feat: add development environment configuration for Docker
Compose
---
compose.dev.yml | 70 +++++++++++++++++++++++++++++++++++++++++++++++++
compose.yml | 28 ++++++++------------
2 files changed, 81 insertions(+), 17 deletions(-)
create mode 100644 compose.dev.yml
diff --git a/compose.dev.yml b/compose.dev.yml
new file mode 100644
index 0000000..800a907
--- /dev/null
+++ b/compose.dev.yml
@@ -0,0 +1,70 @@
+name: lmnp-dev
+
+services:
+ mongodb:
+ image: mongo:8.0
+ restart: unless-stopped
+ entrypoint:
+ - /bin/bash
+ - -c
+ - |
+ if [ ! -s /data/configdb/keyfile ]; then
+ umask 077
+ openssl rand -base64 756 > /data/configdb/keyfile
+ fi
+ chmod 400 /data/configdb/keyfile
+ exec docker-entrypoint.sh mongod --replSet rs0 --keyFile /data/configdb/keyfile --bind_ip_all
+ environment:
+ MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USERNAME:-lmnp}
+ MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD:?Set MONGO_ROOT_PASSWORD to a URL-safe value}
+ volumes:
+ - mongodb_data:/data/db
+ - mongodb_config:/data/configdb
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - >-
+ mongosh --quiet --host localhost
+ --username "$${MONGO_INITDB_ROOT_USERNAME}"
+ --password "$${MONGO_INITDB_ROOT_PASSWORD}"
+ --authenticationDatabase admin
+ --eval 'try { rs.status() } catch (error) { rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongodb:27017"}]}) }; db.hello().isWritablePrimary'
+ | grep -q true
+ interval: 5s
+ timeout: 10s
+ retries: 10
+ start_period: 20s
+
+ backend:
+ build:
+ context: ./backend
+ dockerfile: Dockerfile
+ restart: unless-stopped
+ ports:
+ - "${BACKEND_PORT:-8080}:8080"
+ environment:
+ SPRING_DATA_MONGODB_URI: mongodb://${MONGO_ROOT_USERNAME:-lmnp}:${MONGO_ROOT_PASSWORD:?Set MONGO_ROOT_PASSWORD to a URL-safe value}@mongodb:27017/lmnp?authSource=admin&replicaSet=rs0&directConnection=true
+ OIDC_ISSUER_URI: ${OIDC_ISSUER_URI:?Set OIDC_ISSUER_URI}
+ OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:?Set OIDC_CLIENT_ID}
+ OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET:?Set OIDC_CLIENT_SECRET}
+ LMNP_ATTACHMENT_STORAGE_PATH: /data/attachments
+ volumes:
+ - attachment_data:/data/attachments
+ depends_on:
+ mongodb:
+ condition: service_healthy
+
+ frontend:
+ build:
+ context: ./frontend
+ dockerfile: Dockerfile
+ restart: unless-stopped
+ ports:
+ - "${FRONTEND_PORT:-8081}:80"
+ depends_on:
+ - backend
+
+volumes:
+ mongodb_data:
+ mongodb_config:
+ attachment_data:
diff --git a/compose.yml b/compose.yml
index 93ef691..84a51f3 100644
--- a/compose.yml
+++ b/compose.yml
@@ -1,7 +1,9 @@
+name: lmnp-prod
+
services:
mongodb:
image: mongo:8.0
- container_name: lmnp-mongodb
+ restart: unless-stopped
entrypoint:
- /bin/bash
- -c
@@ -12,11 +14,9 @@ services:
fi
chmod 400 /data/configdb/keyfile
exec docker-entrypoint.sh mongod --replSet rs0 --keyFile /data/configdb/keyfile --bind_ip_all
- ports:
- - "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME: admin
- MONGO_INITDB_ROOT_PASSWORD: adminpassword
+ MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USERNAME:-lmnp}
+ MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD:?Set MONGO_ROOT_PASSWORD to a URL-safe value}
volumes:
- mongodb_data:/data/db
- mongodb_config:/data/configdb
@@ -39,14 +39,12 @@ services:
build:
context: ./backend
dockerfile: Dockerfile
- container_name: lmnp-backend
- ports:
- - "8080:8080"
+ restart: unless-stopped
environment:
- SPRING_DATA_MONGODB_URI: mongodb://admin:adminpassword@mongodb:27017/lmnp?authSource=admin&replicaSet=rs0&directConnection=true
- OIDC_ISSUER_URI: ${OIDC_ISSUER_URI:-http://localhost:8090/realms/voidAuth}
- OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:-lmnp-client}
- OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET:-lmnp-secret}
+ SPRING_DATA_MONGODB_URI: mongodb://${MONGO_ROOT_USERNAME:-lmnp}:${MONGO_ROOT_PASSWORD:?Set MONGO_ROOT_PASSWORD to a URL-safe value}@mongodb:27017/lmnp?authSource=admin&replicaSet=rs0&directConnection=true
+ OIDC_ISSUER_URI: ${OIDC_ISSUER_URI:?Set OIDC_ISSUER_URI}
+ OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:?Set OIDC_CLIENT_ID}
+ OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET:?Set OIDC_CLIENT_SECRET}
LMNP_ATTACHMENT_STORAGE_PATH: /data/attachments
volumes:
- attachment_data:/data/attachments
@@ -58,7 +56,7 @@ services:
build:
context: ./frontend
dockerfile: Dockerfile
- container_name: lmnp-frontend
+ restart: unless-stopped
ports:
- "80:80"
depends_on:
@@ -68,7 +66,3 @@ volumes:
mongodb_data:
mongodb_config:
attachment_data:
-
-networks:
- default:
- name: lmnp-net