docker-compose.images.yml
Rama main · réplica de lectura del repositorio original.
# IceGuard from PUBLISHED images — no local build required.
#
# Pulls ghcr.io/<owner>/iceguard-{frontend,backend} (default tag: latest) instead of
# building from source. Same three tiers as docker-compose.yml via profiles:
#
# Level 1 — app only: docker compose -f docker-compose.images.yml up -d
# frontend + backend; point the backend at YOUR Postgres via .env (ICEGUARD_DB_URL).
# Level 2 — + database: docker compose -f docker-compose.images.yml --profile db up -d
# Level 3 — + sandbox: docker compose -f docker-compose.images.yml --profile db --profile sandbox up -d
#
# UI: http://localhost:8090 · API/Swagger: http://localhost:8080/q/swagger-ui
#
# Pin a version or a different registry/owner with env vars:
# TAG=0.1.0 ICEGUARD_IMAGE_NS=ghcr.io/adelfardi docker compose -f docker-compose.images.yml up -d
#
# Tear down (add -v to wipe data):
# docker compose -f docker-compose.images.yml --profile db --profile sandbox down
name: iceguard
services:
frontend:
image: ${ICEGUARD_IMAGE_NS:-ghcr.io/adelfardi}/iceguard-frontend:${TAG:-latest}
pull_policy: always
environment:
BACKEND_URL: http://backend:8080
ports:
- "8090:80"
depends_on:
- backend
networks: [iceguard]
backend:
image: ${ICEGUARD_IMAGE_NS:-ghcr.io/adelfardi}/iceguard-backend:${TAG:-latest}
pull_policy: always
environment:
QUARKUS_DATASOURCE_DB_KIND: postgresql
QUARKUS_DATASOURCE_USERNAME: ${ICEGUARD_DB_USER:-iceguard}
QUARKUS_DATASOURCE_PASSWORD: ${ICEGUARD_DB_PASSWORD:-iceguard}
QUARKUS_DATASOURCE_JDBC_URL: ${ICEGUARD_DB_URL:-jdbc:postgresql://postgres:5432/iceguard}
QUARKUS_OIDC_ENABLED: "false"
# The UI is served by nginx on :8090, so the browser's Origin is http://localhost:8090.
# The image's baked default only allows the Vite dev origin (:5173); override it here.
QUARKUS_HTTP_CORS_ORIGINS: ${ICEGUARD_CORS_ORIGINS:-http://localhost:8090}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-minioadmin}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-minioadmin}
AWS_REGION: ${AWS_REGION:-us-east-1}
ports:
- "8080:8080"
depends_on:
postgres:
condition: service_healthy
required: false
networks: [iceguard]
# ── Level 2: Postgres (IceGuard's required dependency) ──
postgres:
image: postgres:16-alpine
profiles: ["db"]
environment:
POSTGRES_DB: iceguard
POSTGRES_USER: ${ICEGUARD_DB_USER:-iceguard}
POSTGRES_PASSWORD: ${ICEGUARD_DB_PASSWORD:-iceguard}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${ICEGUARD_DB_USER:-iceguard}"]
interval: 5s
timeout: 3s
retries: 10
networks: [iceguard]
# ── Level 3: test sandbox — MinIO + a working Iceberg REST catalog ──
minio:
image: minio/minio:latest
profiles: ["sandbox"]
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio-data:/data
networks: [iceguard]
minio-init:
image: minio/mc:latest
profiles: ["sandbox"]
depends_on:
minio:
condition: service_started
entrypoint: >
/bin/sh -c "
sleep 3;
mc alias set local http://minio:9000 minioadmin minioadmin;
mc mb --ignore-existing local/warehouse;
echo 'Bucket warehouse created';
"
networks: [iceguard]
rest-catalog:
image: apache/iceberg-rest-fixture:latest
profiles: ["sandbox"]
ports:
- "8181:8181"
environment:
AWS_ACCESS_KEY_ID: minioadmin
AWS_SECRET_ACCESS_KEY: minioadmin
AWS_REGION: us-east-1
CATALOG_WAREHOUSE: s3://warehouse/rest/
CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO
CATALOG_S3_ENDPOINT: http://minio:9000
CATALOG_S3_PATH__STYLE__ACCESS: "true"
depends_on:
minio-init:
condition: service_completed_successfully
networks: [iceguard]
volumes:
postgres-data:
minio-data:
networks:
iceguard: