Update TO-BE: Proxmox + Coolify architecture

This commit is contained in:
2026-03-30 16:30:28 +09:00
parent 56c165dc36
commit cbbcfef400

View File

@@ -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브로드밴드) │ │ ISP (SK브로드밴드) │
│ WAN: 동적 IP (DDNS 권장) │
└──────────────┬──────────────────────┘ └──────────────┬──────────────────────┘
┌──────────────┴──────────────────────┐ ┌──────────────┴──────────────────────┐
│ TP-Link Archer AXE75 │ │ TP-Link Archer AXE75 │
│ LAN: 192.168.0.254 │
│ 포트포워딩: 80, 443 → .101 │ │ 포트포워딩: 80, 443 → .101 │
│ WireGuard VPN: 51820/UDP │ │ WireGuard VPN: 51820/UDP │
└──────────────┬──────────────────────┘ └──────────────┬──────────────────────┘
┌────────────────────────────┴────────────────────────────┐ ┌────────────────────────────┴────────────────────────────┐
│ Proxmox 호스트 (192.168.0.100) │ │ Proxmox VE (192.168.0.100)
│ SSD / i9-10900K / 64GB │ │ SSD / i9-10900K / 64GB │
│ 관리: https://.100:8006 (VPN 전용) │
│ │ │ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ──────┐ ┌─────┐ │ │ ┌──────────────────────────────────┐ ┌────────────┐ │
│ │CT101 │ │CT102 │ │CT103 │ │CT104 │ │CT105│ │ │ │ VM 101: Coolify (192.168.0.101) │CT 104: DB │ │
│ │Caddy │ │Gitea │ │Apps │DB │ │CI │ │ │ │ Ubuntu 22.04 / 8C / 48GB .104 │ │
│ │.101 │ │.102 │ │.103 │ │.104 │ │.105 │ │ │ │ │ │PostgreSQL │ │
│ │:80/:443 │ │:3000 │ │Docker │ │PG │ │Jenk │ │ │ │ ┌─ Traefik (리버스 프록시) ────┐ │ │MySQL │ │
│ │ │→│ │ │TB,CM,CB │ │MySQL │ │Gitea│ │ │ │ │ :80/:443 ← 외부 유일 진입점 │ │ │(내부만 접근) │ │
│ │ │→│ │ │GW,CC │ │ │ │Runr │ │ │ │ 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 할당
| IP | 역할 | 비고 | | IP | 역할 | 리소스 | 비고 |
|----|------|------| |----|------|--------|------|
| 192.168.0.254 | TP-Link 라우터 | 관리 웹UI | | 192.168.0.254 | TP-Link 라우터 | - | 관리 웹UI (VPN 전용) |
| 192.168.0.100 | Proxmox 호스트 | 관리 웹UI (8006) | | 192.168.0.100 | Proxmox 호스트 | - | 관리 웹UI :8006 (VPN 전용) |
| 192.168.0.101 | CT: Reverse Proxy | Caddy — 외부 유일 진입점 | | 192.168.0.101 | VM: Coolify | 8C / 48GB / 400GB | PaaS + 리버스 프록시 + 앱 전체 |
| 192.168.0.102 | CT: Gitea | GitLab 대체 | | 192.168.0.104 | CT: DB | 2C / 8GB / 100GB | PostgreSQL + MySQL (내부만) |
| 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 |
### 라우터 포트포워딩 (최종) ### 라우터 포트포워딩 (최종)
| 외부 포트 | 내부 대상 | 용도 | | 외부 포트 | 내부 대상 | 용도 |
|-----------|-----------|------| |-----------|-----------|------|
| 80 | 192.168.0.101:80 | HTTP → HTTPS 리다이렉트 + Let's Encrypt | | 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 | | 51820/UDP | (라우터 자체) | WireGuard VPN |
기존 포트포워딩 규칙 **전부 폐쇄** 외부에서는 **80/443/51820만 열림**
외부에서는 80/443/51820만 열림 SSH, DB, Proxmox, Coolify 관리 UI는 **VPN 전용**
→ SSH, DB, 관리 포트는 VPN 전용
### 서브도메인 → 서비스 매핑 (최종) ### Coolify가 관리하는 서비스
| 서브도메인 | 백엔드 | 비고 | | 서브도메인 | 서비스 | 타입 |
|------------|--------|------| |------------|--------|------|
| git.0022222.xyz | 192.168.0.102:3000 | Gitea | | git.0022222.xyz | Gitea | Coolify 내장 서비스 |
| tb.0022222.xyz | 192.168.0.103:10500 | TrainBoard API | | tb.0022222.xyz | TrainBoard API | Docker (Gitea webhook) |
| cm.0022222.xyz | 192.168.0.103:10501 | CultureMakers API | | cm.0022222.xyz | CultureMakers API | Docker (Gitea webhook) |
| cb.0022222.xyz | 192.168.0.103:10590 | CheeseBoard API | | cb.0022222.xyz | CheeseBoard API | Docker (Gitea webhook) |
| gw.0022222.xyz | 192.168.0.103:15002 | GroupWare | | gw.0022222.xyz | GroupWare | Docker (Gitea webhook) |
| gw-qa.0022222.xyz | 192.168.0.103:15005 | GroupWare QA | | gw-qa.0022222.xyz | GroupWare QA | Docker (Gitea webhook) |
| cc.0022222.xyz | 192.168.0.103:10513 | ChordCourse | | 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 전용 접근 ### VPN 전용 접근
| 대상 | 접근 방법 | | 대상 | 접근 방법 |
|------|-----------| |------|-----------|
| Proxmox 관리 | `https://192.168.0.100:8006` | | Proxmox 관리 | `https://192.168.0.100:8006` |
| Jenkins | `http://192.168.0.105:8080` | | Coolify 관리 | `https://coolify.0022222.xyz` 또는 `http://192.168.0.101:8000` |
| DB (MySQL/PG) | `192.168.0.104:3306/5432` | | DB (PostgreSQL) | `192.168.0.104:5432` |
| DB (MySQL) | `192.168.0.104:3306` |
| 라우터 관리 | `https://192.168.0.254` | | 라우터 관리 | `https://192.168.0.254` |
### DNS 레코드 (0022222.xyz — Cloudflare) ### DNS 레코드 (0022222.xyz — Cloudflare)
@@ -335,31 +374,33 @@ Gitea (https://git.0022222.xyz)
- [ ] lets_encrypt 포트포워딩 수정 (80→10080 → 80→80) - [ ] lets_encrypt 포트포워딩 수정 (80→10080 → 80→80)
### Phase 1: SSD 도착 전 준비 ### Phase 1: SSD 도착 전 준비
- [ ] 전체 백업 실행 (GitLab, DB, Docker 볼륨, 설정파일, 인증서) - [ ] 전체 백업 (DB 덤프, Docker 볼륨, Gitea 데이터, 설정파일, 인증서)
- [ ] 백업 스크립트 작성 - [ ] 백업 스크립트 작성
- [ ] docker-compose 정리 - [ ] docker-compose.yml 정리 및 문서화
- [ ] GitLab 서비스 중단 (Gitea로 완전 전환 후) - [ ] GitLab 서비스 중단 (Gitea 전환 확인 후)
- [ ] CI/CD 파이프라인 Gitea webhook으로 전환 - [ ] 각 서비스 Dockerfile 정리 (Coolify 배포 준비)
### Phase 2: SSD 도착 Proxmox 설치 ### Phase 2: SSD 도착 Proxmox + Coolify 설치
- [ ] SSD에 Proxmox VE 설치 - [ ] SSD에 Proxmox VE 설치
- [ ] 네트워크 브릿지 설정 (vmbr0 → 192.168.0.0/24) - [ ] 네트워크 브릿지 설정 (vmbr0 → 192.168.0.0/24)
- [ ] CT 생성: 101 (Caddy), 102 (Gitea), 103 (Apps), 104 (DB), 105 (Jenkins) - [ ] VM 101 생성: Ubuntu 22.04 (Coolify용, 8C/48GB/400GB)
- [ ] 각 CT에 고정 IP 할당 - [ ] CT 104 생성: DB 전용 (2C/8GB/100GB)
- [ ] Coolify 설치 (`curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash`)
- [ ] Coolify 초기 설정 (관리자 계정, Traefik 도메인)
- [ ] Gitea를 Coolify 서비스로 배포
### Phase 3: 서비스 이관 ### Phase 3: 서비스 이관
- [ ] DB 복원 (PostgreSQL, MySQL) - [ ] DB 복원 (PostgreSQL → CT104, MySQL → CT104)
- [ ] Gitea 데이터 이관 - [ ] Coolify에 기존 서비스 등록 (TB, CM, CB, GW, CC)
- [ ] Docker 앱 배포 - [ ] Gitea webhook 연결 (각 레포 → Coolify 자동 배포)
- [ ] Jenkins 복원 - [ ] 서브도메인 + SSL 자동 발급 확인
- [ ] Caddy 리버스 프록시 설정
- [ ] SSL 인증서 발급 확인 (Caddy 자동)
### Phase 4: 전환 ### Phase 4: 전환
- [ ] 라우터 포트포워딩 변경 (80/443 → .101) - [ ] 라우터 포트포워딩 변경 (80/443 → .101)
- [ ] 기존 포트 포워딩 전부 제거 - [ ] 기존 포트포워딩 전부 제거
- [ ] DNS 최종 확인 - [ ] DNS 최종 확인
- [ ] 검증 후 기존 HDD Ubuntu 보관 (롤백용) - [ ] 개발팀에 Coolify 사용 가이드 공유
- [ ] 기존 HDD Ubuntu 보관 (롤백용)
--- ---