본문으로 건너뛰기

설정 파일은 어디 있나

데이터레이크의 설정은 «출처 둘, 방향 하나» 로 만들어집니다. 운영자가 고치는 파일은 정해져 있고, 컨테이너 안의 설정 파일은 그것을 곱해서 생성한 것입니다.

호스트 /etc/kopens/conf/*.template ← 설정의 «형태» (빈칸이 뚫린 원본)
× /etc/kopens/plantpulse-platform.env ← 시크릿 (비밀번호 · API 키)
× /etc/kopens/platform.node.env ← 이 노드의 값 (IP · 모드)
+ 이미지 안 config/defaults.env ← 비밀 아닌 기본값 (위에서 안 준 것만)
─────────────────────────────────────────
→ pd config render → /opt/kopens/plantpulse-platform/<모듈>/conf/… (생성물)

pd start매번 예외 없이 먼저 렌더합니다. 그래서 컨테이너 안 생성물을 손으로 고쳐도 다음 기동에 사라집니다. 2026-09-01 에 실제로 컨테이너 안 cassandra.yaml 을 고쳐 인증을 켰다가, 재생성으로 파일이 되돌아가면서 인증이 통째로 깨진 사고가 있었습니다.

정본 파일 넷

#파일담는 것형식누가 쓰나
1/etc/kopens/plantpulse-platform.env시크릿 — 서비스 계정 비밀번호 · API 키 · TLS 비밀번호. 비밀 아닌 공통 값도 여기 적을 수 있습니다VAR=값 한 줄에 하나, export 없이. 머리글 두 줄(# generated: · # last rotation:)은 도구가 관리install.sh 가 만들고, passwd.sh 가 갱신. 비밀 아닌 줄은 운영자가 직접
2/etc/kopens/platform.node.env이 박스에만 참인 값PP_MASTER_IP · PP_KAFKA_ADVERTISED_HOST · DOCKER_PP_EXTERNAL_IP · PP_NODE_ID같은 형식설치 도구가 틀에서 만들고, 운영자가 직접
3/etc/kopens/conf/*.template설정의 형태 — 각 엔진의 설정 파일 원본 33개각 엔진의 문법 + ${PP_변수} 자리표시자첫 기동 때 이미지에서 시드, 그 뒤 운영자가 직접
4(이미지 안) plantpulse-datalake-cli/config/defaults.env비밀 아닌 기본값 — 포트 · 계정 이름 · 디렉터리 · TLS 설정KEY=value제품. 운영자는 고치지 않고 1·2 로 덮습니다
비밀번호는 파일 편집으로 바뀌지 않습니다

사이드카의 비밀번호 줄을 고치는 것만으로는 반영이 끝나지 않습니다. PostgreSQL · Cassandra 처럼 서버 계정이 정본인 값은 서버 쪽도 함께 바꿔야 하고, 순서를 틀리면 플랫폼이 기동하지 않습니다. bin/passwd.sh 가 그 순서를 대신 밟습니다 → 비밀번호 · API 키 바꾸기

값이 결정되는 순서

호스트의 bin/env.sh 가 위에서 아래로 읽는 순서가 곧 우선순위입니다. 뒤에 읽히는 것이 이깁니다.

우선순위출처왜 이기나
1 (최상)/etc/kopens/platform.node.env사이드카 다음에 읽히는 무조건 대입
2/etc/kopens/plantpulse-platform.envVAR=값 무조건 대입 — 셸 export 도 덮습니다
3호출 셸의 export1 · 2 가 그 이름을 안 적었을 때만
4 (최하)bin/env.sh${VAR:-기본값}아무도 안 정했을 때만

그 값이 compose 를 거쳐 컨테이너에 환경변수로 들어가고, 컨테이너 안에서는 넘어온 값이 defaults.env 를 이깁니다.

설치가 끝난 노드에서 export 는 조용히 무시됩니다

PP_PG_PASSWORD=새값 bin/up.sh 처럼 셸에서 값을 주는 방법은 사이드카가 아직 없는 노드에서만 통합니다. 사이드카가 이미 그 이름을 들고 있으면 사이드카가 이깁니다. 실제로 이렇게 바꿨다고 믿고 넘어간 사고가 있었습니다.

지금 이 박스의 유효 값과 출처를 보려면 머릿속으로 시뮬레이션하지 말고 이 명령을 치세요. 시크릿은 **** 로 가려집니다.

cd /opt/kopens/plantpulse-platform-docker
bin/env.sh --print

컨테이너 안에는 사이드카가 없습니다

컨테이너에는 /etc/kopens/plantpulse-platform.env 파일이 마운트되지 않습니다. 값은 호스트의 bin/env.sh 가 사이드카를 읽고, compose 가 그것을 환경변수로 컨테이너에 넣는 경로로만 들어갑니다.

그래서 두 가지가 따라옵니다.

  • 사이드카를 고친 뒤에는 컨테이너를 다시 만들어야 새 값이 들어갑니다. 호스트의 bin/restart-datalake.sh 가 그 일을 합니다.
  • compose 가 적지 않은 이름은 아무리 사이드카에 적어도 컨테이너에 닿지 않습니다. 어떤 이름이 닿는지는 compose/docker-compose.ymlx-pp-secrets 앵커와 plantpulse-datalake 서비스의 environment: 블록이 정합니다. 변수 레퍼런스에 «닿는 이름» 만 모아 두었습니다.

pd doctor 를 컨테이너 안에서 치면 사이드카 행이 «파일 없음» 이 아니라 아예 안 나오고, 대신 all required secrets set 행이 실제 측정입니다 — 정상입니다.

템플릿 목록 — 무엇이 어디로 렌더되나

호스트 /etc/kopens/conf/ 의 템플릿 33개(최상위 23 + cluster/ 10)가 아래 위치로 갑니다. 대응표의 정본은 컨테이너 안 plantpulse-datalake-cli/config/render.map 이고, pd config list 가 이 노드의 모드에 해당하는 행을 찍습니다.

템플릿렌더 위치 (PP_HOME 기준)MASTERWORKER
valkey.confplantpulse-storage/cache/valkey/conf/valkey.conf○ (cluster/)
postgresql.conf · pg_hba.confplantpulse-storage/db/postgres/conf/○ (cluster/)
cassandra.yaml · jvm-server.optionsplantpulse-storage/db/cassandra/conf/○ (cluster/)
spark-env.sh · spark-defaults.conf · metrics.propertiesplantpulse-analytics/spark/conf/
hive-site.xml · hive-auth.propertiesplantpulse-analytics/spark/conf/○ (cluster/)
hive-site.xmlplantpulse-analytics/hive/conf/hive-site.xml
kyuubi-defaults.confplantpulse-analytics/kyuubi/conf/
gravitino-iceberg-rest-server.confplantpulse-analytics/gravitino/conf/
kafka.properties · kafka-jaas.confplantpulse-messaging/kafka/config/kafka.properties · jaas.conf
hivemq.xml · plantpulse-mq-auth.propertiesplantpulse-messaging/mqtt/conf/config.xml · auth.properties
plantpulse-timeseries-engine.confplantpulse-timeseries/engine/conf/ (두 이름으로)
plantpulse-datalake-admin-api.propertiesplantpulse-datalake-admin-api/config/○ (cluster/)
workflow.yaml · application.yamlplantpulse-workflow/temporal/config/ · kestra/config/
plantpulse-cep.propertiesplantpulse-cep/config/
plantpulse-jdbc.properties · plantpulse-data-gateway.propertiesplantpulse-data-gateway/config/

cluster/ 표시는 WORKER 노드가 /etc/kopens/conf/cluster/ 아래의 다른 템플릿을 쓴다는 뜻입니다. 예를 들어 MASTER 의 valkey.conf.template 에는 replicaof 가 없고, cluster/valkey.conf.template 에는 replicaof ${PP_MASTER_IP} ${PP_REDIS_PORT} 가 있습니다.

템플릿 문법

세 가지뿐입니다.

문법
${PP_VAR}값이 없으면 렌더 전체가 실패합니다(exit 4). 빈 값으로 채우고 지나가지 않습니다
${PP_VAR:기본값} · ${PP_VAR:-기본값}값이 없으면 기본값

시크릿에는 인라인 기본값을 둘 수 없습니다. 옛 렌더러가 빈 값으로 채우고 지나가 비밀번호가 빈 문자열인 Cassandra 가 뜬 적이 있어서, 지금은 빠진 이름을 전부 나열하고 멈춥니다.

렌더되지 않는 설정 — 관리 콘솔 계정

관리 콘솔의 로그인 계정은 어느 템플릿에도 들어가지 않습니다. admin-api 프로세스가 환경변수에서 직접 읽습니다. 디스크에 비밀번호 사본을 하나 더 만들지 않기 위해서입니다.

변수어디서 오나기본값
PP_DATALAKE_ADMIN_USERdefaults.envadmin
PP_DATALAKE_ADMIN_PASSWORD사이드카2026-09-05 이후 설치본은 웹 콘솔 관리자와 같은 개발용 기본값 → 초기 비밀번호 변경. 그 전 설치본은 비어 있어 콘솔이 꺼져 있습니다
PP_DATALAKE_ADMIN_API_KEY사이드카없음 — 비면 키 인증만 꺼지고 브라우저 로그인은 그대로

옛 안내와 다른 점

옛 문서지금
configure.sh 가 설정을 생성한다pd config render (그리고 pd start 가 매번)
/etc/kopens/confplantpulse-startup/template 로 마운트된다plantpulse-datalake-cli/config/templates 로 마운트됩니다(2026-09-03). 옛 자리는 아무것도 읽지 않는 사본이라 운영자 편집이 렌더에 닿지 않았습니다
컨테이너 안 env.sh · env-reset.sh없어졌습니다. 값은 호스트가 정하고 compose 가 넘깁니다
PP_OPTIONS 로 컴포넌트를 끈다변수 이름은 PD_OPTIONS 로 바뀌었고, 현재 compose 스택은 이 값을 컨테이너에 넘기지 않습니다FAQ
PP_TIER (FULL / DATALAKE / APP)2026-09-02 에 삭제됐습니다. 모든 박스는 전체 설치입니다

관련 문서