Files
server-migration/network-plan.md

22 KiB

Network & Migration Plan

현재 구조 (AS-IS) — 2026-03-30 기준

                        ┌─────────────────────────────────────┐
                        │         ISP (SK브로드밴드)            │
                        │         WAN: 39.122.244.108 (동적)   │
                        └──────────────┬──────────────────────┘
                                       │
                        ┌──────────────┴──────────────────────┐
                        │    TP-Link Archer AXE75 (라우터)      │
                        │    LAN: 192.168.0.254                │
                        │    WireGuard VPN: 51820/UDP          │
                        │    DHCP: .200 ~ .253                 │
                        │                                      │
                        │    포트포워딩:                         │
                        │      :80  → .100:10080 (Let's Encrypt)│
                        │      :443 → .100:443  (Caddy HTTPS)  │
                        │      :24242 → .100:22 (SSH)          │
                        │      + 레거시 포트 다수 (정리 예정)     │
                        └──────────────┬──────────────────────┘
                                       │
                  ┌────────────────────┴────────────────────────┐
                  │        서버 (192.168.0.100, coala)            │
                  │        Ubuntu 20.04 / i9-10900K / 64GB       │
                  │        HDD 2TB (191GB 사용)                   │
                  │                                              │
                  │   ┌─── Caddy v2.11.2 (리버스 프록시) ───┐    │
                  │   │  :443 ← 외부 HTTPS 진입점            │    │
                  │   │  auto Let's Encrypt SSL              │    │
                  │   │                                      │    │
                  │   │  git.0022222.xyz    → localhost:3000  │    │
                  │   │  gitlab.0022222.xyz → localhost:8443  │    │
                  │   │  tb.0022222.xyz     → localhost:10500 │    │
                  │   │  cm.0022222.xyz     → localhost:10501 │    │
                  │   │  cb.0022222.xyz     → localhost:10590 │    │
                  │   │  gw.0022222.xyz     → localhost:15002 │    │
                  │   │  gw-qa.0022222.xyz  → localhost:15005 │    │
                  │   │  cc.0022222.xyz     → localhost:10513 │    │
                  │   │  jenkins.0022222.xyz→ localhost:8080  │    │
                  │   │  pve.0022222.xyz    → localhost:8006  │    │
                  │   └──────────────────────────────────────┘    │
                  │                                              │
                  │   ┌─── Docker 컨테이너 ──────────────────┐    │
                  │   │  gitea        :3000  (Git 호스팅)     │    │
                  │   │  tb-api       :10500 (TrainBoard)     │    │
                  │   │  cm-api       :10501 (CultureMakers)  │    │
                  │   │  cheeseboard  :10590 (CheeseBoard)    │    │
                  │   │  tb-db        :33306 (MySQL)          │    │
                  │   │  cm-db        :33308 (MySQL)          │    │
                  │   │  cheeseboard-db:33309 (MySQL)         │    │
                  │   │  gitlab-runner                        │    │
                  │   └──────────────────────────────────────┘    │
                  │                                              │
                  │   ┌─── 네이티브 서비스 ──────────────────┐    │
                  │   │  GitLab Omnibus  :8443 (레거시, HTTP) │    │
                  │   │  Jenkins         :8080                │    │
                  │   │  PostgreSQL      :5432                │    │
                  │   │  GroupWare       :15002 / :15005 (QA) │    │
                  │   │  ChordCourse     :10513               │    │
                  │   └──────────────────────────────────────┘    │
                  └──────────────────────────────────────────────┘

  ┌─── VPN 클라이언트 (외부) ──────────┐
  │  brandon: 10.5.5.2/32              │
  │  → 192.168.0.0/24 접근 가능        │
  │  → Endpoint: 39.122.244.108:51820  │
  └────────────────────────────────────┘

WAN 정보

항목
ISP SK브로드밴드
연결 유형 동적 IP (DHCP)
WAN IP 39.122.244.108 (변경될 수 있음)
WAN Gateway 39.122.244.1
DNS 210.220.163.82 / 219.250.36.130
항목
LAN IP 192.168.0.254
서브넷 255.255.255.0
DHCP 범위 192.168.0.200 ~ .253
관리자 비밀번호 (설정됨)
WireGuard VPN 활성 (51820/UDP)
MAC BC-07-1D-3C-CF-D8
서비스 외부포트 내부포트 대상 상태 비고
gitlab 443 443 .100 활성 Caddy HTTPS
gitlab_hook 5050 5050 .100 활성
lets_encrypt 80 10080 .100 활성 ⚠️ 80→80으로 변경 필요
ssh 24242 22 .100 활성
TB_mvp_back 10600 10600 .100 활성 레거시
CM-back 10601 10601 .100 활성 레거시
bjsrtest_back 10501 10501 .100 활성 레거시
CheeseBoard 10503 10503 .100 활성 레거시
CC_frontend 10510 10510 .100 활성 레거시
CC_backend 10511 10511 .100 활성 레거시
CC_mysql 10512 10512 .100 활성 ⚠️ DB 노출
Groupware_Dev 15001 15001 .100 활성 레거시
Groupware_swagger 15003 15003 .100 활성 레거시
Groupware_qa 15004 15004 .100 활성 레거시
Groupware_mysql 33307 33307 .100 활성 ⚠️ DB 노출
TB_mysql 33306 33306 .100 활성 ⚠️ DB 노출
bjsrtest_mysql 33308 33308 .100 활성 ⚠️ DB 노출
jenkins 8889 28080 .100 활성 ⚠️ 관리 노출
kisa_test 9797 9797 .100 활성 ⚠️ 삭제 대상
bjsrtest_frt1 13000 13000 .100 활성 ⚠️ 삭제 대상
bjsrtest_frt2 13001 13001 .100 활성 ⚠️ 삭제 대상
BM_rdp 2765 2765 .15 활성 ⚠️ 삭제 대상
flask_test 5000 5000 .48 활성 ⚠️ 삭제 대상
rdp 2588 3389 .48 활성 ⚠️ 삭제 대상

DHCP 예약

장치 MAC IP
서버 (coala) B4-2E-99-F6-D0-65 192.168.0.100
DESKTOP-N2D0NAM D4-5D-64-B0-6B-7F 192.168.0.48
DESKTOP-8NDJGE9 0C-7A-15-8B-AE-E3 192.168.0.2

WireGuard VPN

항목
터널 IP 10.5.5.1/32
수신 포트 51820/UDP
클라이언트 액세스 인터넷 & 홈네트워크
계정: brandon 10.5.5.2/32

서브도메인 (Cloudflare DNS — 0022222.xyz)

서브도메인 대상 서비스
git.0022222.xyz → Caddy → :3000 Gitea
gitlab.0022222.xyz → Caddy → :8443 GitLab (레거시)
tb.0022222.xyz → Caddy → :10500 TrainBoard API
cm.0022222.xyz → Caddy → :10501 CultureMakers API
cb.0022222.xyz → Caddy → :10590 CheeseBoard API
gw.0022222.xyz → Caddy → :15002 GroupWare
gw-qa.0022222.xyz → Caddy → :15005 GroupWare QA
cc.0022222.xyz → Caddy → :10513 ChordCourse
jenkins.0022222.xyz → Caddy → :8080 Jenkins
pve.0022222.xyz → Caddy → :8006 Proxmox (미설치)

외부 접속 방법

대상 방법
서버 SSH ssh -p 24242 brandon@39.122.244.108
Gitea https://git.0022222.xyz
모든 웹 서비스 https://{서브도메인}.0022222.xyz
공유기 관리 VPN 접속 후 https://192.168.0.254

Gitea 레포지토리 (GitLab에서 마이그레이션 완료 — 33개)

Gitea (https://git.0022222.xyz)
│
├── cheeserush (15)
│   ├── at-thermo          ├── cm               ├── cm-back
│   ├── cm-monorepo        ├── cheeseboard      ├── be-template
│   ├── fobl_landingpage   ├── homepage         ├── jenkins_test
│   ├── medigo-poc         ├── onboarding       ├── schindler-sso
│   ├── suneeds-homepage   ├── tb_mvp_back      └── tb_mvp_front
│
├── bjsl (7)
│   ├── bjsl-admin-app     ├── bjsl-admin-web   ├── bjsl-back
│   ├── bjsl-forus-web     ├── bjsl-monorepo    ├── bjsl-user-app
│   └── bjsl-user-app-android
│
├── chordcourse (3)
│   ├── back               ├── deploy           └── front
│
├── groupware (3)
│   ├── back-end           ├── cheeseoffice-landing └── front-end
│
├── okmoneyletter (3)
│   ├── admin-front        ├── back             └── front
│
├── mini-apps (1)
│   └── seoul-metro-time
│
└── rush (1)
    └── signal_arena

보안 긴급 조치 (Phase 0.5)

즉시 삭제할 포트포워딩

규칙 이유
TB_mysql (33306) DB 외부 노출
Groupware_mysql (33307) DB 외부 노출
bjsrtest_mysql (33308) DB 외부 노출
CC_mysql (10512) DB 외부 노출
jenkins (8889) 관리 페이지 노출
BM_rdp (2765) 미사용 장비 RDP
flask_test (5000) 미사용 장비
rdp (2588) 미사용 장비 RDP
kisa_test (9797) 테스트용
bjsrtest_frt1 (13000) 테스트용
bjsrtest_frt2 (13001) 테스트용

서버 보안 조치

  • PostgreSQL: listen_addresses → localhost
  • SSH: PasswordAuthentication → no
  • MySQL Docker: 0.0.0.0 바인딩 → 127.0.0.1 (tb-db, cm-db, cheeseboard-db)
  • 불필요 사용자 계정 정리

Caddy 전환 후 추가 삭제 가능 (레거시 포트포워딩)

규칙 조건
모든 개별 서비스 포트 (10500~15005) Caddy 서브도메인으로 대체 완료 시
ssh (24242) VPN으로만 접속 시
gitlab_hook (5050) Gitea webhook 전환 후
lets_encrypt (80→10080) 80→80 변경 또는 Caddy 직접 수신

목표 구조 (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 VE (192.168.0.100)                  │
          │              SSD / i9-10900K / 64GB                     │
          │              관리: https://.100:8006 (VPN 전용)          │
          │                                                        │
          │  ┌──────────────────────────────────┐  ┌─────────────┐ │
          │  │  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)    │  │ │                  │
          │  │  │ │ + 새 서비스 자동 추가    │  │ │                  │
          │  │  │ └─────────────────────────┘  │ │                  │
          │  │  └─────────────────────────────┘ │                  │
          │  └──────────────────────────────────┘                  │
          └────────────────────────────────────────────────────────┘

  개발자 워크플로우:
    Gitea push → Coolify webhook → 자동 빌드 → Docker 배포 → 서브도메인+SSL 자동

IP 할당

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 트래픽 (Traefik)
51820/UDP (라우터 자체) WireGuard VPN

→ 외부에서는 80/443/51820만 열림 → SSH, DB, Proxmox, Coolify 관리 UI는 VPN 전용

Coolify가 관리하는 서비스

서브도메인 서비스 타입
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
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)

*.0022222.xyz    A    39.122.244.108
0022222.xyz      A    39.122.244.108

참고: WAN IP가 동적이므로 DDNS 설정 또는 고정 IP 전환 권장


마이그레이션 순서

Phase 0: 기본 인프라 완료

  • 서버 상태 파악 (server-audit.md)
  • SSH 키 설정 (coala@192.168.0.100, brandon 계정 추가)
  • 라우터 교체 (FortiGate → TP-Link, FortiGate 제거)
  • TP-Link LAN IP 변경 (.1 → .254)
  • TP-Link DHCP 범위 설정 (.200~.253)
  • 서버 게이트웨이 변경 (.1 → .254)
  • WireGuard VPN 설정 (brandon: 10.5.5.2)
  • 외부 접속 확인 (SSH, GitLab, 서비스들)

Phase 0.7: Caddy + Gitea + 마이그레이션 완료

  • Caddy v2.11.2 설치 (리버스 프록시, auto SSL)
  • Cloudflare DNS 서브도메인 10개 설정 (0022222.xyz)
  • Gitea 설치 (Docker, :3000)
  • GitLab → Gitea 전체 마이그레이션 (33개 레포, 7개 org)
  • GitLab HTTP 전환 (:8443, Caddy 뒤로)
  • 외부 HTTPS 접속 확인 (git/tb/cm/cb 등)

Phase 0.5: 보안 긴급 조치 ← 다음

  • DB 포트포워딩 삭제 (33306, 33307, 33308, 10512)
  • Jenkins 포트포워딩 삭제 (8889)
  • 미사용 포트포워딩 삭제 (RDP, flask_test, kisa_test, bjsrtest)
  • PostgreSQL listen_addresses → localhost
  • MySQL Docker 바인딩 → 127.0.0.1
  • SSH 비밀번호 로그인 비활성화
  • 레거시 포트포워딩 정리 (Caddy 서브도메인으로 대체된 것들)
  • lets_encrypt 포트포워딩 수정 (80→10080 → 80→80)

Phase 1: SSD 도착 전 준비

  • 전체 백업 (DB 덤프, Docker 볼륨, Gitea 데이터, 설정파일, 인증서)
  • 백업 스크립트 작성
  • docker-compose.yml 정리 및 문서화
  • GitLab 서비스 중단 (Gitea 전환 확인 후)
  • 각 서비스 Dockerfile 정리 (Coolify 배포 준비)

Phase 2: SSD 도착 → Proxmox + Coolify 설치

  • SSD에 Proxmox VE 설치
  • 네트워크 브릿지 설정 (vmbr0 → 192.168.0.0/24)
  • 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 → CT104, MySQL → CT104)
  • Coolify에 기존 서비스 등록 (TB, CM, CB, GW, CC)
  • Gitea webhook 연결 (각 레포 → Coolify 자동 배포)
  • 서브도메인 + SSL 자동 발급 확인

Phase 4: 전환

  • 라우터 포트포워딩 변경 (80/443 → .101)
  • 기존 포트포워딩 전부 제거
  • DNS 최종 확인
  • 개발팀에 Coolify 사용 가이드 공유
  • 기존 HDD Ubuntu 보관 (롤백용)

참고

도메인

도메인 레지스트라 용도 만료일
0022222.xyz Cloudflare 현재 서브도메인 (임시) 2027-02-22
softk.io - 주 도메인 (추후 전환) -
cheeserush.co - 이전 도메인 (비활성) -

서버 하드웨어

  • CPU: Intel i9-10900K (10C/20T)
  • RAM: 64GB
  • Disk: HDD 2TB (191GB 사용) → SSD 마이그레이션 예정
  • VT-x: 지원 (Proxmox 가능)

계정

대상 계정 비고
서버 SSH brandon (NOPASSWD sudo) ssh -p 24242 brandon@39.122.244.108
서버 SSH coala (기존) 키 인증 설정됨
Gitea 관리자 brandon https://git.0022222.xyz