feat(deploy): RTGS 3센터 컨테이너 배포 산출물
- 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>
This commit is contained in:
48
deploy/README.md
Normal file
48
deploy/README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# 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에서)
|
||||
```bash
|
||||
# 저장소 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`
|
||||
- 검증(로컬에서 통과한 기준 동일):
|
||||
1. DT에서 이체 → RCVD → ACCC
|
||||
2. 콘솔 상단 "모니터링 센터" DC1/DC2/DC3 전환 → **📈 보고서 완전 동일**(거래·금액·대사·기관별)
|
||||
3. 정족수: `dc3-hermes` 중지해도 ACCC(2/3) — `docker compose stop dc3-hermes`
|
||||
- 직접 확인용 호스트 포트: LV `8099/8199/8299`, Gucci `8095/8195/8295`
|
||||
|
||||
## Gitea push (Coder 내부)
|
||||
```bash
|
||||
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면 동등 이상 확인.
|
||||
Reference in New Issue
Block a user