Archived
Docker Compose configuration for local development with PostgreSQL 17 and MinIO (S3-compatible object storage). Includes helper scripts for start/stop, multi-database init, Liquibase migrations Dockerfile, and production Dockerfile using distroless Java 21. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
92 lines
3.2 KiB
Bash
Executable File
92 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
FRESH=false
|
|
NO_FRONTEND=false
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--fresh) FRESH=true; shift ;;
|
|
--no-frontend) NO_FRONTEND=true; shift ;;
|
|
*) echo "Unknown option: $1"; echo "Usage: $0 [--fresh] [--no-frontend]"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
echo "=== Concilium - Local Development ==="
|
|
|
|
if [ "$FRESH" = true ]; then
|
|
echo "Removing all volumes (clean database)..."
|
|
docker compose -f docker/compose.yml down -v 2>/dev/null || true
|
|
else
|
|
docker compose -f docker/compose.yml down 2>/dev/null || true
|
|
fi
|
|
|
|
echo "Building application..."
|
|
./gradlew :concilium-server:shadowJar -q
|
|
|
|
echo "Starting docker services..."
|
|
docker compose -f docker/compose.yml up -d
|
|
|
|
echo "Waiting for PostgreSQL..."
|
|
until docker exec concilium-postgres pg_isready -U devuser -d concilium > /dev/null 2>&1; do
|
|
sleep 2
|
|
done
|
|
echo "PostgreSQL ready"
|
|
|
|
# Run Liquibase migrations (empty changelog for now, but wired for future use)
|
|
PG_DRIVER="$PROJECT_ROOT/docker/.cache/postgresql-42.7.2.jar"
|
|
if [ ! -f "$PG_DRIVER" ]; then
|
|
mkdir -p "$PROJECT_ROOT/docker/.cache"
|
|
curl -sSL -o "$PG_DRIVER" https://repo1.maven.org/maven2/org/postgresql/postgresql/42.7.2/postgresql-42.7.2.jar
|
|
fi
|
|
DOCKER_NETWORK=$(docker inspect concilium-postgres --format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{end}}' 2>/dev/null)
|
|
docker run --rm --network "$DOCKER_NETWORK" \
|
|
-v "$PROJECT_ROOT/concilium-core/src/main/resources/db:/liquibase/db:ro" \
|
|
-v "$PG_DRIVER:/liquibase/lib/postgresql.jar:ro" \
|
|
--entrypoint bash liquibase/liquibase:4.30.0 -c \
|
|
'LB="--changelog-file=db/liquibase/changelog.yaml --url=jdbc:postgresql://concilium-postgres:5432/concilium --username=devuser --password=devpass --search-path=/liquibase" && liquibase $LB update' \
|
|
&& echo "Migrations complete" || echo "Migrations skipped (empty changelog)"
|
|
|
|
echo "Waiting for MinIO..."
|
|
until curl -sf http://localhost:9030/minio/health/live > /dev/null 2>&1; do
|
|
sleep 2
|
|
done
|
|
echo "MinIO ready"
|
|
|
|
docker exec concilium-minio mc alias set local http://localhost:9000 minioadmin minioadmin 2>/dev/null
|
|
docker exec concilium-minio mc mb local/concilium-artifacts --ignore-existing 2>/dev/null || true
|
|
echo "MinIO buckets ready"
|
|
|
|
echo ""
|
|
echo "=== Services Ready ==="
|
|
echo "PostgreSQL: localhost:5456 (devuser/devpass)"
|
|
echo "MinIO API: http://localhost:9030"
|
|
echo "MinIO UI: http://localhost:9031 (minioadmin/minioadmin)"
|
|
echo "Backend: http://localhost:8000"
|
|
echo ""
|
|
|
|
export RDBMS_VENDOR=postgresql
|
|
export RDBMS_HOSTNAME=localhost
|
|
export RDBMS_PORT=5456
|
|
export RDBMS_DATABASE_NAME=concilium
|
|
export RDBMS_USERNAME=devuser
|
|
export RDBMS_PASSWORD=devpass
|
|
export S3_ENDPOINT=http://localhost:9030
|
|
export S3_BUCKET_NAME=concilium-artifacts
|
|
export S3_ACCESS_KEY=minioadmin
|
|
export S3_SECRET_KEY=minioadmin
|
|
export S3_REGION=us-east-1
|
|
export AUTH_MODE=dev_local
|
|
|
|
if [ "$NO_FRONTEND" = false ] && [ -d "$PROJECT_ROOT/frontend" ] && [ -f "$PROJECT_ROOT/frontend/package.json" ]; then
|
|
echo "Starting frontend dev server..."
|
|
(cd "$PROJECT_ROOT/frontend" && npm run dev &)
|
|
fi
|
|
|
|
echo "Starting backend..."
|
|
java -jar concilium-server/build/libs/concilium.jar
|