From cbbcfef4002c53b93d4253b5b4baba542e937220 Mon Sep 17 00:00:00 2001 From: brandon Date: Mon, 30 Mar 2026 16:30:28 +0900 Subject: [PATCH] Update TO-BE: Proxmox + Coolify architecture --- network-plan.md | 143 +++++++++++++++++++++++++++++++----------------- 1 file changed, 92 insertions(+), 51 deletions(-) diff --git a/network-plan.md b/network-plan.md index daeda85..1a845a0 100644 --- a/network-plan.md +++ b/network-plan.md @@ -223,76 +223,115 @@ Gitea (https://git.0022222.xyz) --- -## 목표 구조 (TO-BE): Proxmox + 서브도메인 기반 +## 목표 구조 (TO-BE): Proxmox + Coolify + +### 설계 원칙 +- **개발자 셀프서비스**: git push → 자동 빌드/배포 (인프라 담당자 개입 불필요) +- **최소 구성**: VM 1개 (Coolify) + CT 1개 (DB) — 단순할수록 좋다 +- **Proxmox**: 스냅샷/백업/리소스 격리 담당, 서비스 오케스트레이션은 Coolify에 위임 ``` ┌─────────────────────────────────────┐ │ ISP (SK브로드밴드) │ + │ WAN: 동적 IP (DDNS 권장) │ └──────────────┬──────────────────────┘ │ ┌──────────────┴──────────────────────┐ │ TP-Link Archer AXE75 │ + │ LAN: 192.168.0.254 │ │ 포트포워딩: 80, 443 → .101 │ │ WireGuard VPN: 51820/UDP │ └──────────────┬──────────────────────┘ │ ┌────────────────────────────┴────────────────────────────┐ - │ Proxmox 호스트 (192.168.0.100) │ + │ Proxmox VE (192.168.0.100) │ │ SSD / i9-10900K / 64GB │ + │ 관리: https://.100:8006 (VPN 전용) │ │ │ - │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────┐ ┌─────┐ │ - │ │CT101 │ │CT102 │ │CT103 │ │CT104 │ │CT105│ │ - │ │Caddy │ │Gitea │ │Apps │ │DB │ │CI │ │ - │ │.101 │ │.102 │ │.103 │ │.104 │ │.105 │ │ - │ │:80/:443 │ │:3000 │ │Docker │ │PG │ │Jenk │ │ - │ │ │→│ │ │TB,CM,CB │ │MySQL │ │Gitea│ │ - │ │ │→│ │ │GW,CC │ │ │ │Runr │ │ - │ └─────────┘ └─────────┘ └─────────┘ └──────┘ └─────┘ │ + │ ┌──────────────────────────────────┐ ┌─────────────┐ │ + │ │ VM 101: Coolify (192.168.0.101) │ │CT 104: DB │ │ + │ │ Ubuntu 22.04 / 8C / 48GB │ │.104 │ │ + │ │ │ │PostgreSQL │ │ + │ │ ┌─ Traefik (리버스 프록시) ────┐ │ │MySQL │ │ + │ │ │ :80/:443 ← 외부 유일 진입점 │ │ │(내부만 접근) │ │ + │ │ │ auto Let's Encrypt SSL │ │ └─────────────┘ │ + │ │ └─────────────────────────────┘ │ │ + │ │ │ │ + │ │ ┌─ Coolify (PaaS) ────────────┐ │ │ + │ │ │ 관리 UI: :8000 │ │ │ + │ │ │ │ │ │ + │ │ │ ┌─ Gitea (:3000) ─────────┐ │ │ │ + │ │ │ │ git.0022222.xyz │ │ │ │ + │ │ │ └─────────────────────────┘ │ │ │ + │ │ │ │ │ │ + │ │ │ ┌─ 앱 서비스 (Docker) ────┐ │ │ │ + │ │ │ │ tb.0022222.xyz (TB) │ │ │ │ + │ │ │ │ cm.0022222.xyz (CM) │ │ │ │ + │ │ │ │ cb.0022222.xyz (CB) │ │ │ │ + │ │ │ │ gw.0022222.xyz (GW) │ │ │ │ + │ │ │ │ cc.0022222.xyz (CC) │ │ │ │ + │ │ │ │ + 새 서비스 자동 추가 │ │ │ │ + │ │ │ └─────────────────────────┘ │ │ │ + │ │ └─────────────────────────────┘ │ │ + │ └──────────────────────────────────┘ │ └────────────────────────────────────────────────────────┘ - 외부 → :80/:443 → CT101 (Caddy) → 서브도메인별 라우팅 - VPN → 직접 접근 (Proxmox :8006, Jenkins, DB 등) + 개발자 워크플로우: + Gitea push → Coolify webhook → 자동 빌드 → Docker 배포 → 서브도메인+SSL 자동 ``` ### IP 할당 -| IP | 역할 | 비고 | -|----|------|------| -| 192.168.0.254 | TP-Link 라우터 | 관리 웹UI | -| 192.168.0.100 | Proxmox 호스트 | 관리 웹UI (8006) | -| 192.168.0.101 | CT: Reverse Proxy | Caddy — 외부 유일 진입점 | -| 192.168.0.102 | CT: Gitea | GitLab 대체 | -| 192.168.0.103 | CT: 웹앱 (Docker) | TrainBoard, CM, CheeseBoard, GroupWare 등 | -| 192.168.0.104 | CT: DB | PostgreSQL + MySQL (내부만 접근) | -| 192.168.0.105 | CT: Jenkins/CI | Jenkins + Gitea Runner | +| IP | 역할 | 리소스 | 비고 | +|----|------|--------|------| +| 192.168.0.254 | TP-Link 라우터 | - | 관리 웹UI (VPN 전용) | +| 192.168.0.100 | Proxmox 호스트 | - | 관리 웹UI :8006 (VPN 전용) | +| 192.168.0.101 | VM: Coolify | 8C / 48GB / 400GB | PaaS + 리버스 프록시 + 앱 전체 | +| 192.168.0.104 | CT: DB | 2C / 8GB / 100GB | PostgreSQL + MySQL (내부만) | ### 라우터 포트포워딩 (최종) | 외부 포트 | 내부 대상 | 용도 | |-----------|-----------|------| | 80 | 192.168.0.101:80 | HTTP → HTTPS 리다이렉트 + Let's Encrypt | -| 443 | 192.168.0.101:443 | 모든 HTTPS 트래픽 | +| 443 | 192.168.0.101:443 | 모든 HTTPS 트래픽 (Traefik) | | 51820/UDP | (라우터 자체) | WireGuard VPN | -→ 기존 포트포워딩 규칙 **전부 폐쇄** -→ 외부에서는 80/443/51820만 열림 -→ SSH, DB, 관리 포트는 VPN 전용 +→ 외부에서는 **80/443/51820만 열림** +→ SSH, DB, Proxmox, Coolify 관리 UI는 **VPN 전용** -### 서브도메인 → 서비스 매핑 (최종) -| 서브도메인 | 백엔드 | 비고 | +### Coolify가 관리하는 서비스 +| 서브도메인 | 서비스 | 타입 | |------------|--------|------| -| git.0022222.xyz | 192.168.0.102:3000 | Gitea | -| tb.0022222.xyz | 192.168.0.103:10500 | TrainBoard API | -| cm.0022222.xyz | 192.168.0.103:10501 | CultureMakers API | -| cb.0022222.xyz | 192.168.0.103:10590 | CheeseBoard API | -| gw.0022222.xyz | 192.168.0.103:15002 | GroupWare | -| gw-qa.0022222.xyz | 192.168.0.103:15005 | GroupWare QA | -| cc.0022222.xyz | 192.168.0.103:10513 | ChordCourse | +| git.0022222.xyz | Gitea | Coolify 내장 서비스 | +| tb.0022222.xyz | TrainBoard API | Docker (Gitea webhook) | +| cm.0022222.xyz | CultureMakers API | Docker (Gitea webhook) | +| cb.0022222.xyz | CheeseBoard API | Docker (Gitea webhook) | +| gw.0022222.xyz | GroupWare | Docker (Gitea webhook) | +| gw-qa.0022222.xyz | GroupWare QA | Docker (Gitea webhook) | +| cc.0022222.xyz | ChordCourse | Docker (Gitea webhook) | +| *.0022222.xyz | **새 서비스** | Coolify UI에서 추가 → 자동 | + +### 새 마이크로서비스 배포 (개발자 가이드) +``` +1. Gitea에 레포 생성 (Dockerfile 또는 docker-compose.yml 포함) +2. Coolify UI (https://coolify.0022222.xyz) 접속 +3. "New Resource" → Git 소스 선택 → 레포 연결 +4. 서브도메인 입력 (예: myapp.0022222.xyz) +5. Deploy 클릭 + → Coolify가 자동으로: + - Docker 이미지 빌드 + - 컨테이너 배포 + - Traefik 라우팅 규칙 추가 + - Let's Encrypt SSL 발급 +6. 이후 git push 시 자동 재배포 (webhook) +``` ### VPN 전용 접근 | 대상 | 접근 방법 | |------|-----------| | Proxmox 관리 | `https://192.168.0.100:8006` | -| Jenkins | `http://192.168.0.105:8080` | -| DB (MySQL/PG) | `192.168.0.104:3306/5432` | +| Coolify 관리 | `https://coolify.0022222.xyz` 또는 `http://192.168.0.101:8000` | +| DB (PostgreSQL) | `192.168.0.104:5432` | +| DB (MySQL) | `192.168.0.104:3306` | | 라우터 관리 | `https://192.168.0.254` | ### DNS 레코드 (0022222.xyz — Cloudflare) @@ -335,31 +374,33 @@ Gitea (https://git.0022222.xyz) - [ ] lets_encrypt 포트포워딩 수정 (80→10080 → 80→80) ### Phase 1: SSD 도착 전 준비 -- [ ] 전체 백업 실행 (GitLab, DB, Docker 볼륨, 설정파일, 인증서) +- [ ] 전체 백업 (DB 덤프, Docker 볼륨, Gitea 데이터, 설정파일, 인증서) - [ ] 백업 스크립트 작성 -- [ ] docker-compose 정리 -- [ ] GitLab 서비스 중단 (Gitea로 완전 전환 후) -- [ ] CI/CD 파이프라인 Gitea webhook으로 전환 +- [ ] docker-compose.yml 정리 및 문서화 +- [ ] GitLab 서비스 중단 (Gitea 전환 확인 후) +- [ ] 각 서비스 Dockerfile 정리 (Coolify 배포 준비) -### Phase 2: SSD 도착 후 Proxmox 설치 +### Phase 2: SSD 도착 → Proxmox + Coolify 설치 - [ ] SSD에 Proxmox VE 설치 - [ ] 네트워크 브릿지 설정 (vmbr0 → 192.168.0.0/24) -- [ ] CT 생성: 101 (Caddy), 102 (Gitea), 103 (Apps), 104 (DB), 105 (Jenkins) -- [ ] 각 CT에 고정 IP 할당 +- [ ] VM 101 생성: Ubuntu 22.04 (Coolify용, 8C/48GB/400GB) +- [ ] CT 104 생성: DB 전용 (2C/8GB/100GB) +- [ ] Coolify 설치 (`curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash`) +- [ ] Coolify 초기 설정 (관리자 계정, Traefik 도메인) +- [ ] Gitea를 Coolify 서비스로 배포 ### Phase 3: 서비스 이관 -- [ ] DB 복원 (PostgreSQL, MySQL) -- [ ] Gitea 데이터 이관 -- [ ] Docker 앱 배포 -- [ ] Jenkins 복원 -- [ ] Caddy 리버스 프록시 설정 -- [ ] SSL 인증서 발급 확인 (Caddy 자동) +- [ ] DB 복원 (PostgreSQL → CT104, MySQL → CT104) +- [ ] Coolify에 기존 서비스 등록 (TB, CM, CB, GW, CC) +- [ ] Gitea webhook 연결 (각 레포 → Coolify 자동 배포) +- [ ] 서브도메인 + SSL 자동 발급 확인 ### Phase 4: 전환 - [ ] 라우터 포트포워딩 변경 (80/443 → .101) -- [ ] 기존 포트 포워딩 전부 제거 +- [ ] 기존 포트포워딩 전부 제거 - [ ] DNS 최종 확인 -- [ ] 검증 후 기존 HDD Ubuntu 보관 (롤백용) +- [ ] 개발팀에 Coolify 사용 가이드 공유 +- [ ] 기존 HDD Ubuntu 보관 (롤백용) ---