76 lines
4.1 KiB
Plaintext
76 lines
4.1 KiB
Plaintext
# ==============================================================================
|
|
# docker/nats.conf — MAM 원격 프로덕션 브로커 (Track 1R)
|
|
#
|
|
# 정본 문서: PRIVATE_SERVER.md §9.1
|
|
# 시크릿: 이 파일에는 없습니다. 모든 password 는 docker/.env → compose
|
|
# environment → 컨테이너 환경변수로 주입되는 $VAR 참조입니다.
|
|
#
|
|
# ⚠ 암호 문자 제약: NATS 는 환경변수 값을 자체 설정 렉서로 재파싱합니다.
|
|
# 암호에 [공백 ; , ] } # ' " $] 가 들어가면 설정이 깨지거나 다르게 해석됩니다.
|
|
# 반드시 `openssl rand -base64 32` (알파벳 A-Za-z0-9+/=) 를 사용하십시오.
|
|
# ==============================================================================
|
|
server_name: mam-hub
|
|
|
|
# ── JetStream: MQTT retained/QoS1 저장소. 종료 이벤트 재수신이 여기에 의존 ──
|
|
jetstream {
|
|
store_dir: "/data" # 절대경로 고정. '~' 도 인용된 "$HOME" 도 확장되지 않음
|
|
max_file: 10G # 접미사는 대문자만 유효 (K/M/G/T)
|
|
max_mem: 256M
|
|
}
|
|
|
|
http_port: 8222 # 무인증 모니터링 → 호스트 게시는 loopback 한정 (compose)
|
|
|
|
mqtt {
|
|
port: 1883
|
|
ack_wait: 60s # WAN RTT 흡수 (기본 30s)
|
|
max_ack_pending: 1024 # 다중 에이전트 동시 발행 여유 (상한 65535)
|
|
}
|
|
|
|
websocket {
|
|
port: 8080
|
|
no_tls: true # 사설망/tailnet 한정. 생략하면 TLS 설정 필수라 기동 실패
|
|
|
|
# ── 원점(Origin) 정책 ────────────────────────────────────────────────
|
|
# 기본값은 이미 '모든 출처 허용'입니다. same_origin 의 기본값은 false 이고
|
|
# allowed_origins 가 비어 있으면 checkOrigin() 이 Origin 헤더를 읽지도 않고
|
|
# 즉시 nil 을 반환합니다 (server/websocket.go:1039).
|
|
# → http://localhost:3000 의 브라우저 대시보드는 별도 설정 없이 접속됩니다.
|
|
# → `same_origin: false` 를 적는 것은 no-op 입니다.
|
|
#
|
|
# 8080 을 tailnet 밖으로 노출한다면 아래를 켜서 출처를 좁히십시오.
|
|
# 주의: allowed_origins 를 비우지 않는 순간 원점 검사가 '켜집니다'.
|
|
# "*" 는 절대 쓰지 마십시오 — 옵션 검증 실패로 서버가 기동하지 못합니다
|
|
# (websocket.go:1142 "must be absolute URLs with http or https scheme").
|
|
# allowed_origins: ["https://dashboard.example", "http://localhost:3000"]
|
|
|
|
# ── 이 포트는 MQTT-over-WebSocket 도 서빙합니다 ───────────────────────
|
|
# 경로 /mqtt 로 붙으면 완전한 MQTT 클라이언트가 됩니다 (mqtt.go:193,
|
|
# websocket.go:1335 → createMQTTClient, 1883 리스너와 동일 함수).
|
|
# ws://<host>:8080/mqtt → MQTT. retained 종료 이벤트를 받습니다.
|
|
# ws://<host>:8080/ → NATS 네이티브. retained 를 받지 못합니다 (N-1).
|
|
# 브라우저 대시보드는 MQTT.js 로 /mqtt 에 붙이는 것을 권장합니다.
|
|
}
|
|
|
|
# ── 인증 및 멀티테넌시 ────────────────────────────────────────────────────
|
|
accounts {
|
|
MAM: {
|
|
jetstream: enabled # MQTT 내부 스트림이 이 계정 안에 생성됨
|
|
users: [
|
|
# 발행자 겸 구독자 — MAM 에이전트 본체 (.mam.env 의 MQTT_USERNAME)
|
|
{ user: mam_agent, password: $MAM_BROKER_PASS }
|
|
|
|
# 관측자 — 대시보드/모니터링. 반드시 MAM 계정 안에 위치
|
|
{ user: mam_observer, password: $MAM_OBSERVER_PASS,
|
|
permissions: {
|
|
subscribe: { allow: ["python.mqtt.jobs.>"] } # M3 이후: "mam.<fp>.jobs.>"
|
|
publish: { deny: [">"] }
|
|
}
|
|
}
|
|
]
|
|
}
|
|
# MAM 과 무관한 홈랩 서비스 전용. MAM subject 는 보이지 않음(의도된 격리)
|
|
HOME: { jetstream: enabled, users: [ { user: home, password: $HOME_BROKER_PASS } ] }
|
|
SYS: { users: [ { user: sys, password: $SYS_BROKER_PASS } ] }
|
|
}
|
|
system_account: SYS
|