#!/usr/bin/env bash # ============================================================================= # eBdesk SiCABE — Environment Defaults # Sourced by install.sh and bootstrap.sh # Override any value by exporting the variable before running install.sh # or by creating deploy/.env with: export VAR=value # ============================================================================= # ─── Global ───────────────────────────────────────────────────────────────── export SICABE_ENV="${SICABE_ENV:-development}" export COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-sicabe}" export SICABE_DOMAIN="${SICABE_DOMAIN:-localhost}" export TIMEZONE="${TIMEZONE:-Asia/Jakarta}" # ─── Secrets (ALWAYS override in production!) ─────────────────────────────── # Password statis agar konsisten saat docker-compose memproses env vars. # Di production, overriede semua nilai berikut di file .env dengan password kuat. # openssl rand -hex 16 > .env # PostgreSQL: 1 instance shared untuk semua service (beda database) export POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-sicabe_pg_super_DevOnly}" export KEYCLOAK_DB_PASSWORD="${KEYCLOAK_DB_PASSWORD:-sicabe_kc_db_DevOnly}" export NESSIE_DB_PASSWORD="${NESSIE_DB_PASSWORD:-sicabe_nessie_db_DevOnly}" export AIRFLOW_DB_PASSWORD="${AIRFLOW_DB_PASSWORD:-sicabe_af_db_DevOnly}" export OPENMETADATA_DB_PASSWORD="${OPENMETADATA_DB_PASSWORD:-sicabe_om_db_DevOnly}" export KEYCLOAK_ADMIN_PASSWORD="${KEYCLOAK_ADMIN_PASSWORD:-admin123}" export MINIO_ROOT_PASSWORD="${MINIO_ROOT_PASSWORD:-minio12345}" export AIRFLOW_ADMIN_PASSWORD="${AIRFLOW_ADMIN_PASSWORD:-airflow123}" export GRAFANA_ADMIN_PASSWORD="${GRAFANA_ADMIN_PASSWORD:-grafana123}" export OPENMETADATA_ADMIN_PASSWORD="${OPENMETADATA_ADMIN_PASSWORD:-openmetadata123}" # OpenLDAP (identity — sumber grup untuk Trino & StarRocks) export LDAP_ADMIN_PASSWORD="${LDAP_ADMIN_PASSWORD:-ldap_admin_DevOnly}" export LDAP_CONFIG_PASSWORD="${LDAP_CONFIG_PASSWORD:-ldap_config_DevOnly}" # OIDC Client secrets untuk setiap komponen (wajib sinkron dengan konfigurasi # Trino, Grafana, dll. yang menggunakan nilai hardcoded di file .properties) export TRINO_CLIENT_SECRET="${TRINO_CLIENT_SECRET:-trino-secret}" export STARROCKS_CLIENT_SECRET="${STARROCKS_CLIENT_SECRET:-starrocks-secret}" export AIRFLOW_CLIENT_SECRET="${AIRFLOW_CLIENT_SECRET:-airflow-secret}" export OPENMETADATA_CLIENT_SECRET="${OPENMETADATA_CLIENT_SECRET:-om-secret}" export GRAFANA_CLIENT_SECRET="${GRAFANA_CLIENT_SECRET:-grafana-secret}" # ─── Network ──────────────────────────────────────────────────────────────── export HTTP_PORT="${HTTP_PORT:-80}" export HTTPS_PORT="${HTTPS_PORT:-443}" # Catatan: PostgreSQL TIDAK diexpose ke host (internal network saja). # Untuk debugging dari host: docker exec -it sicabe-postgres psql -U sicabe_admin -d keycloak # ─── Skema Port Host (prefix 12xxx) ───────────────────────────────────────── # Aturan: host port = "12" + 3 digit port kanonik. Port internal container tetap. # Memudahkan pelatihan: seluruh endpoint ada di blok 12000-12999. # ─── Keycloak (Phase 1 — Governance: IAM) ────────────────────────────────── export KEYCLOAK_VERSION="${KEYCLOAK_VERSION:-26.7}" export KEYCLOAK_PORT="${KEYCLOAK_PORT:-12080}" export KEYCLOAK_DB="${KEYCLOAK_DB:-keycloak}" export KEYCLOAK_DB_USER="${KEYCLOAK_DB_USER:-keycloak}" export KEYCLOAK_DB_HOST="${KEYCLOAK_DB_HOST:-postgres}" # CATATAN: KC_HOSTNAME_URL sudah DIHAPUS di Keycloak 26.0.0 — jangan dipasang lagi # (dulu diekspor di sini, dan tidak berpengaruh apa pun). Yang menentukan issuer, # discovery, dan redirect sekarang: KC_HOSTNAME = URL publik lengkap, yang di compose # diisi dari KEYCLOAK_PUBLIC_URL (lihat docker-compose.yml service keycloak). export SICABE_REALM="${SICABE_REALM:-sicabe}" export KEYCLOAK_ADMIN="${KEYCLOAK_ADMIN:-admin}" # ─── Identity — OpenLDAP (Phase 1b) ───────────────────────────────────────── # LDAP = sumber kebenaran GRUP (Trino & StarRocks group provider). # User tetap didefinisikan di realm Keycloak (autentikasi OIDC). export OPENLDAP_VERSION="${OPENLDAP_VERSION:-1.5.0}" export OPENLDAP_PORT="${OPENLDAP_PORT:-12389}" export LDAP_ORGANISATION="${LDAP_ORGANISATION:-SiCABE}" export LDAP_DOMAIN="${LDAP_DOMAIN:-sicabe.local}" export LDAP_ADMIN_DN="${LDAP_ADMIN_DN:-cn=admin,dc=sicabe,dc=local}" export LDAP_BASE_DN="${LDAP_BASE_DN:-dc=sicabe,dc=local}" export LDAP_USERS_DN="${LDAP_USERS_DN:-ou=users,dc=sicabe,dc=local}" export LDAP_GROUPS_DN="${LDAP_GROUPS_DN:-ou=groups,dc=sicabe,dc=local}" # ─── MinIO (Phase 2 — Storage) ────────────────────────────────────────────── # Image MinIO HANYA tersedia di quay.io — repo Docker Hub `minio/minio` dan # `minio/mc` sudah tidak ada (pull gagal: "repository does not exist"). export MINIO_VERSION="${MINIO_VERSION:-RELEASE.2025-09-07T16-13-09Z}" export MINIO_MC_VERSION="${MINIO_MC_VERSION:-RELEASE.2025-08-13T08-35-41Z}" export MINIO_PORT="${MINIO_PORT:-12900}" export MINIO_CONSOLE_PORT="${MINIO_CONSOLE_PORT:-12901}" export MINIO_ROOT_USER="${MINIO_ROOT_USER:-minioadmin}" export MINIO_BUCKET_ICEBERG_DATA="${MINIO_BUCKET_ICEBERG_DATA:-iceberg-data}" # Nama + prefix path warehouse Iceberg. Dipakai IDENTIK di: Nessie # (NESSIE_CATALOG_DEFAULT_WAREHOUSE + location S3), Trino default-warehouse-dir, # StarRocks/OM/Sling external catalog. Ganti SATU nilai ini bila client memakai # nama/path berbeda (mis. `wh`) — lalu `--generate --sync`. export ICEBERG_WAREHOUSE="${ICEBERG_WAREHOUSE:-warehouse}" # Prefix REST Iceberg pada Nessie (dipakai konsumen REST: Sling, StarRocks, gate fase 2). # Nessie menyajikannya di `/iceberg` (tetap); ubah bila layanan existing memakai prefix lain. export NESSIE_ICEBERG_PREFIX="${NESSIE_ICEBERG_PREFIX:-/iceberg}" # Apache Nessie (Phase 2 — Storage: Metadata Catalog) export NESSIE_VERSION="${NESSIE_VERSION:-0.108.4-java}" export NESSIE_PORT="${NESSIE_PORT:-12120}" # Nessie persistence database (PostgreSQL) — mengikuti konvensi shared Postgres export NESSIE_DB="${NESSIE_DB:-nessie}" export NESSIE_DB_USER="${NESSIE_DB_USER:-nessie}" # ─── Alamat antar-container (multi-host) ──────────────────────────────────── # B1 (Review 10 §4.4): hostname yang dilihat CONTAINER saat menghubungi komponen # lain. Kontrak: DEFAULT = nama container di docker-compose.yml → SINGLE-HOST # TIDAK BERUBAH (dibuktikan diff `docker compose config` sha256 identik). # Untuk menyebar komponen ke beberapa host, override ke alamat host pemilik: # POSTGRES_HOST=10.20.0.12 MINIO_HOST=10.20.0.12 KEYCLOAK_HOST=10.20.0.10 # OPENMETADATA_HOST=10.20.0.10 STARROCKS_FE_HOST=10.20.0.11 # Dibedakan dari komponen EXISTING milik sistem lain (lihat bagian di bawah): # yang itu memakai *_URL / S3_ENDPOINT + EXTERNAL_SERVICES. export POSTGRES_HOST="${POSTGRES_HOST:-postgres}" export MINIO_HOST="${MINIO_HOST:-minio}" export KEYCLOAK_HOST="${KEYCLOAK_HOST:-keycloak}" export OPENMETADATA_HOST="${OPENMETADATA_HOST:-openmetadata-server}" export AIRFLOW_WEBSERVER_HOST="${AIRFLOW_WEBSERVER_HOST:-airflow-webserver}" export STARROCKS_FE_HOST="${STARROCKS_FE_HOST:-starrocks-fe}" export STARROCKS_CN_HOST="${STARROCKS_CN_HOST:-starrocks-cn}" export OPENSEARCH_HOST="${OPENSEARCH_HOST:-openmetadata-opensearch}" # ─── URL BROWSER-FACING (tls.mode != none) ────────────────────────────────── # Dipakai HANYA untuk apa yang dilihat BROWSER (issuer OIDC, redirect, link UI) — # BUKAN untuk lalu lintas container (itu memakai `*_HOST`/alamat di atas). # Default = nilai sekarang, jadi tanpa perubahan apa pun perilakunya identik. # Saat `tls.mode` = edge/full, generator menimpanya menjadi https://