- Dockerfile.backend: 7서비스 공용 이미지(멀티스테이지 gradle 빌드, SERVICE env 선택, curl 포함) - docker-compose.yml: PG(3DB)+Kafka+순번기+DC1/DC2/DC3 각6서비스+프론트, 컨테이너 격리로 포트오프셋 불필요, depends_on 헬스 순서 - Dockerfile.frontend+nginx.conf: 콘솔+DT 정적빌드→nginx 서빙+API 리버스프록시(X-RTGS-DC 헤더/dcN 경로 센터 라우팅) - init/init-3centers.sql, .dockerignore, README(Coder 런북 + Coolify 어댑테이션/정책 경고) - vite.config: 배포 빌드에 dt.html 엔트리 추가(콘솔+DT 한번에) 빌드/기동 검증은 Coder(podman)에서 — 로컬 PC는 Docker 미지원. 프론트 build·compose 구조는 로컬 정적 검증 완료. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RTGS 컨테이너 배포 (deploy/)
RTGS 3센터 A-A-A 풀스택을 컨테이너로 기동하는 산출물. 로컬 native 실행(run-*.cmd)과 별개이며, Docker/podman 호스트(사내 Coder 워크스페이스 등)에서 사용한다.
⚠️ 이 산출물은 Coder(podman)에서 빌드·검증한다. 개발 로컬 PC는 가상화 차단으로 Docker가 없어 여기서 build/up 불가 — 파일 정합성만 로컬 검증됨.
구성
| 파일 | 역할 |
|---|---|
Dockerfile.backend |
7개 서비스 공용 이미지(멀티스테이지 gradle 빌드). SERVICE env로 실행 서비스 선택 |
Dockerfile.frontend + nginx.conf |
콘솔+DT 정적 빌드 → nginx 서빙 + API 리버스프록시(센터 라우팅) |
docker-compose.yml |
PostgreSQL(3DB) + Kafka + 순번기 + DC1/DC2/DC3 각 6서비스 + 프론트 |
init/init-3centers.sql |
rtgs_dc1/2/3 DB 생성(스키마·시드는 각 센터 LouisVuitton Flyway) |
포트 오프셋 없음(컨테이너 격리) — service name으로 구분. 센터 간 통신은 CHANEL_URL=http://dcN-chanel:8091, KAFKA_BOOTSTRAP=kafka:9092, POSTGRES_HOST=postgres 로 연결.
기동 (Coder에서)
# 저장소 clone (Gitea 토큰 인증) 후 프로젝트 루트에서:
docker compose -f deploy/docker-compose.yml up --build -d
docker compose -f deploy/docker-compose.yml ps # 헬스 확인(전 서비스 healthy까지 1~2분)
- 접속: 콘솔
http://<host>:8080/, 단말(DT)http://<host>:8080/dt.html - 검증(로컬에서 통과한 기준 동일):
- DT에서 이체 → RCVD → ACCC
- 콘솔 상단 "모니터링 센터" DC1/DC2/DC3 전환 → 📈 보고서 완전 동일(거래·금액·대사·기관별)
- 정족수:
dc3-hermes중지해도 ACCC(2/3) —docker compose stop dc3-hermes
- 직접 확인용 호스트 포트: LV
8099/8199/8299, Gucci8095/8195/8295
Gitea push (Coder 내부)
git remote add origin https://gitea.bokdev.in/playground/rtgs.git # 서버 프로젝트명은 "POC", 저장소는 rtgs
git push -u origin main # 자격증명 프롬프트 시 Gitea 개인 액세스 토큰(repo read/write)
로컬 PC 셸에서는 gitea.bokdev.in 미도달(사내망) — push/배포는 Coder 안에서. (ACS도 동일)
Coolify/Kubero 어댑테이션 (플랫폼 정책 확인 필요)
ACS는 "단일 Node 컨테이너 + 플랫폼 관리형 PostgreSQL(자체 DB 컨테이너 금지)" 정책이었다. RTGS는 Kafka + 다중 JVM + 3 DB라 그 틀과 다르므로 인프라팀 확인 필수:
- Coolify가 docker-compose(다중 컨테이너) 리소스를 허용하면 → 본 compose를 그대로 Public Repository + Compose로 등록.
- 관리형 PostgreSQL 강제 시 →
postgres서비스 제거, 각 서비스 env를 플랫폼 제공DATABASE_URL(또는POSTGRES_HOST/PORT/USER/PASSWORD)로 교체. 단 3개 논리 DB(rtgs_dc1/2/3)가 필요하므로 관리형 인스턴스에 DB 3개 생성 권한 필요. - Kafka 미지원 시 → 관리형 메시징 대체 또는 별도 배치 협의(저널 = 설계 핵심이라 제거 불가).
- 도메인:
https://rtgs.apps.bokdev.in(포털 등록값) 또는 매뉴얼상*.apps.bokdev.in.
주의 (ACS 시행착오 반영)
- 헬스체크용
curl을 런타임 이미지에 포함(미포함 시 Coolify healthcheck 실패). - 저장소는
playground조직(개인 네임스페이스 금지). - Kafka 저널은 단일 파티션(전역순서) —
KAFKA_NUM_PARTITIONS=1유지. - PostgreSQL
max_connections=300(19서비스 커넥션). 관리형 DB면 동등 이상 확인.