경로 지도 — 무엇이 어디에 있나
데이터레이크의 파일은 호스트와 컨테이너 안 두 세계에 나뉘어 있습니다. 어느 쪽 경로인지 헷갈리는 것이 사고의 절반입니다. 이 페이지는 «그 파일이 어디 있지» 에 답하는 한 장짜리 지도입니다.
외울 것은 세 줄입니다
- 고치는 파일은 호스트의
/etc/kopens/아래에 있습니다. - 컨테이너 안
/opt/kopens/plantpulse-platform/…/conf/는 생성물입니다. 고쳐도 다음 기동에 사라집니다. - 데이터 · 백업 · 임시 파일은 Docker 볼륨이라 컨테이너를 다시 만들어도 남습니다.
호스트
운영자가 고치는 파일 — /etc/kopens/
| 경로 | 무엇 | 고치나 | 박스 간 복사 |
|---|---|---|---|
/etc/kopens/plantpulse-platform.env | 시크릿 사이드카 — 서비스 비밀번호 · API 키 · TLS 비밀번호. 권한 0600 | 비밀번호는 passwd.sh 로. 비밀 아닌 값은 VAR=값 줄을 직접 | 그대로 복사 |
/etc/kopens/platform.node.env | 노드 파일 — 이 박스에만 참인 값(PP_MASTER_IP · PP_KAFKA_ADVERTISED_HOST · DOCKER_PP_EXTERNAL_IP · PP_NODE_ID) | 직접 편집 | 절대 복사 금지 |
/etc/kopens/conf/ | 설정 템플릿 33개(*.template). 컨테이너의 plantpulse-datalake-cli/config/templates 로 바인드 마운트 | 직접 편집 → 템플릿 고치기 | 필요하면 |
/etc/kopens/conf.dist/ | 지난 배포 이미지가 실은 템플릿 기본값(3-way 비교 기준선). 컨테이너에 읽기 전용 마운트 | 손대지 않는다 — 배포마다 도구가 갱신 | — |
/etc/kopens/conf.backup/<시각>/ | 템플릿 재시드 때 도구가 남긴 백업 | 참고만 | — |
/etc/kopens/ca/ | 박스 간 공유 CA(CA.crt · CA.key) | 두 번째 박스로 옮길 때만 | 첫 박스 → 다음 박스 |
/etc/kopens/workers.roster | 클러스터 워커 명부 <id> <ip> | worker-add.sh 계열 도구만 | — |
/etc/kopens/rotation.journal | 비밀번호 회전 진행 기록(0600). 실패한 회전을 이어서 하는 근거 | 손대지 않는다 | — |
운영 스크립트 — /opt/kopens/plantpulse-platform-docker/
| 경로 | 무엇 |
|---|---|
bin/ | 운영 동사 전부 — up.sh down.sh restart.sh restart-datalake.sh status.sh logs.sh shell.sh passwd.sh rotate-secret.sh update.sh backup.sh doctor.sh ops-check.sh … |
bin/env.sh | 호스트 쪽 기본값과 호스트에서 계산되는 값(코어 · 메모리 · 디스크). bin/env.sh --print 가 «지금 이 박스의 유효 값과 출처» 를 찍습니다 |
compose/docker-compose.yml | 컨테이너 정의. 데이터레이크가 받는 환경변수 · 공개 포트 · 볼륨 · 메모리 한계 |
compose/platform.env.example | 운영자가 여는 그 파일 하나 — 쓸 수 있는 변수 전부가 주석과 함께. 여기서 줄을 골라 사이드카나 노드 파일에 옮겨 적습니다(생성물이라 직접 고치지 않습니다) |
compose/platform.node.env.example | 노드 파일의 틀 |
bin/env.sh 를 직접 고치지 마세요옛 안내 중 «env.sh 에 export 를 추가하라» 는 것이 있습니다. 동작은 하지만 설치 트리 안이라 업데이트 · 재설치에 취약합니다. 같은 값을 사이드카나 노드 파일에 VAR=값 으로 적으면 설치 트리 밖이라 살아남고, 우선순위도 더 높습니다 → 값이 결정되는 순서
Docker 볼륨
호스트의 named volume 입니다. remove.sh 로 컨테이너를 지워도 볼륨은 남습니다.
| 볼륨 | 컨테이너 안 경로 | 무엇 |
|---|---|---|
pp-data | /data1/pp-data (PP_DATA_DIR) | 모든 데이터 — Cassandra · PostgreSQL · Valkey · MinIO · Kafka · Spark 이벤트 로그 · 논리 덤프 · 계획 밖 정지 기록 |
pp-temp | /data1/pp-temp (PP_TEMP_DIR) | 임시 파일. pd clean 이 비웁니다. 여기에 보관용 파일을 두지 마세요 |
pp-backup | /data1/pp-backup (PP_BACKUP_DIR) | 물리 백업 저장소(pgbackrest/ · medusa/) · 백업 이력 · 콘솔 설정 리비전 |
pp-security | /var/security | TLS 자재. plantpulse-certs 컨테이너가 만들고 데이터레이크와 앱이 읽습니다 |
컨테이너 안
컨테이너에 들어가는 방법은 둘입니다. 명령 하나만 칠 때는 docker exec, 여러 개 칠 때는 셸을 엽니다.
docker exec plantpulse-datalake pd status # 하나만
/opt/kopens/plantpulse-platform-docker/bin/shell.sh # 셸 열기 (= docker exec -it … bash)
런타임 트리 — PP_HOME=/opt/kopens/plantpulse-platform
| 경로 | 무엇 |
|---|---|
plantpulse-datalake-cli/ | pd 자신. bin/pd · cmd/ · lib/ · services/order.txt · config/defaults.env · config/render.map |
plantpulse-datalake-cli/config/templates/ | 호스트 /etc/kopens/conf 가 마운트된 자리. 컨테이너 안에서 보이는 것은 호스트 사본입니다 |
plantpulse-datalake-cli/config/templates.dist/ | 호스트 /etc/kopens/conf.dist 가 읽기 전용으로 마운트된 자리 |
plantpulse-storage/cache/valkey · db/postgres · db/cassandra · object/minio | 저장소 넷. 각각 bin/ conf/ logs/ |
plantpulse-analytics/spark · hive · gravitino · kyuubi | 분석 넷 |
plantpulse-messaging/kafka · mqtt | 브로커 둘 |
plantpulse-timeseries/engine · dashboard | 시계열 엔진과 Grafana |
plantpulse-cep/ · plantpulse-data-gateway/ | Tomcat 위의 웹 모듈. 설정은 config/, 로그는 server/logs/ |
plantpulse-workflow/temporal · kestra | 워크플로우 엔진 둘 |
plantpulse-datalake-admin-api/ | 관리 콘솔 백엔드. webapp/ 이 화면, logs/pd-events.jsonl 이 이벤트 저널 |
plantpulse-backup/ | 물리 백업 툴킷(bin/backup.sh)과 systemd 타이머 |
pd env 가 이 목록을 이 노드의 실제 값으로 찍어 줍니다. 경로를 외우지 말고 이 명령을 쓰세요.
docker exec plantpulse-datalake pd env
생성물 — 고치면 사라지는 것
pd start 가 매번 템플릿을 렌더해 아래 위치에 씁니다. 첫 줄이 # GENERATED by pd from <템플릿> - edit /etc/kopens/plantpulse-platform.env instead 입니다.
| 생성물 | 원본 템플릿(호스트 /etc/kopens/conf/) |
|---|---|
plantpulse-storage/db/postgres/conf/postgresql.conf · pg_hba.conf | postgresql.conf.template · pg_hba.conf.template |
plantpulse-storage/db/cassandra/conf/cassandra.yaml · jvm-server.options | cassandra.yaml.template · jvm-server.options.template |
plantpulse-storage/cache/valkey/conf/valkey.conf | valkey.conf.template |
plantpulse-messaging/kafka/config/kafka.properties · jaas.conf | kafka.properties.template · kafka-jaas.conf.template |
plantpulse-messaging/mqtt/conf/config.xml · auth.properties | hivemq.xml.template · plantpulse-mq-auth.properties.template |
plantpulse-cep/config/plantpulse-cep.properties | plantpulse-cep.properties.template |
plantpulse-data-gateway/config/plantpulse-jdbc.properties · plantpulse-data-gateway.properties | plantpulse-jdbc.properties.template · plantpulse-data-gateway.properties.template |
전체 대응표는 설정 파일은 어디 있나 — 템플릿 목록에 있습니다.
로그
| 무엇 | 어디 | 보는 법 |
|---|---|---|
부팅 로그 — pd start 가 서비스 런처 출력을 이어 붙인 것 | /var/log/plantpulse-datalake.log | pd logs (BOOT 태그) |
| 컨테이너 관점의 부팅 사본 | /var/log/plantpulse-boot.log | tail |
| 서비스 로그 40여 개 | 각 모듈의 logs/ — 목록은 pd logs --list | pd logs [서비스] |
| 위 전부를 합친 컨테이너 로그 | Docker | 호스트에서 bin/logs.sh plantpulse-datalake |
| 이벤트 저널 — 누가 언제 start/stop/backup 했나 | plantpulse-datalake-admin-api/logs/pd-events.jsonl | 콘솔 이벤트 화면, tail |
| 계획 밖 정지 기록 | /data1/pp-data/pd/downtime/ | pd downtime |
그 밖의 위치
| 무엇 | 어디 |
|---|---|
| TLS 자재 | /var/security/plantpulse/ (.certs_generated 가 생성 기록) |
| PostgreSQL 논리 덤프 | /data1/pp-data/postgres/dump/ |
| 물리 백업 저장소 · 이력 · 락 | /data1/pp-backup/ (pgbackrest/ · medusa/ · history.jsonl · pd-backup.lock) |
| 백업 도구 설정 — 비밀번호가 들어 있으니 붙여 넣지 마세요 | /etc/pgbackrest/pgbackrest.conf · /etc/medusa/medusa.ini (기동 때 pd 가 씁니다) |
| 백업 스케줄 오버라이드 | /data1/pp-data/backup/schedule.json |
| 이미지 정체 | /etc/plantpulse-image.env · /etc/plantpulse-modules.json |