본문 바로가기
CI|CD Pipeline

Harbor 설치 가이드(CI/CD)

by 세용융용융용 2026. 5. 25.

🐳 Harbor 설치 가이드



Harbor란?

Harbor는 컨테이너 이미지를 저장하고 관리하는 Private Docker Registry이다.


핵심 역할

  • Docker / Kubernetes 이미지 저장소
  • 이미지 버전 관리 (tag)
  • 사용자 인증 (계정 기반 접근)
  • 보안 스캔 (Trivy 연동)
  • 프로젝트 단위 권한 관리

즉, Docker Hub를 사내/내부망에서 직접 운영하는 시스템



0. 설치 단계 요약

  1. Harbor 다운로드
  2. 압축 해제
  3. harbor.yml 설정
  4. prepare 실행 (docker-compose 생성)
  5. docker-compose.yml 수정 (옵션)
  6. Harbor 실행 (docker compose up -d)


1. Harbor 다운로드 및 설치 파일 준비

wget https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-online-installer-v2.11.1.tgz

tar xvf harbor-online-installer-v2.11.1.tgz

rm harbor-online-installer-v2.11.1.tgz


2. harbor.yml 설정

Harbor 전체 설정 파일

# ============================================================
# Harbor 설정 파일 — HTTP 전용 모드
# ============================================================
# - HTTPS 미사용 (내부망 / dsai 네트워크 공유)
# - dsai 외부 네트워크에 join하여 백엔드 컨테이너들이 직접 접근 가능
# ------------------------------------------------------------

#    localhost / 127.0.0.1 은 절대 사용 금지 (외부 클라이언트 접근 불가).
hostname: 192.168.56.201

# ── HTTP 설정 ─────────────────────────────────────────────
http:
  # HTTP 포트. 80 사용 시 docker login/push 시 포트 생략 가능.
  # 기존 서비스와 충돌 회피를 위해 8088 사용.
  port: 8888

# ── HTTPS 설정 (사용 안 함) ────────────────────────────────
# HTTP 전용 모드이므로 https 블록 전체 주석 처리.
# 추후 TLS 적용 시 아래 블록 활성화하고 인증서 경로 지정할 것.
#
# https:
#   port: 443
#   certificate: /your/certificate/path
#   private_key: /your/private/key/path

#    최초 설치 시에만 적용되며, 이후엔 UI에서 변경해야 함.
harbor_admin_password: admin

# ── Harbor 내부 DB(PostgreSQL) 설정 ──────────────────────
database:
  password: root123
  # 유휴 커넥션 풀 최대 개수. 0 이하면 유휴 커넥션 미보유.
  max_idle_conns: 100
  # DB 오픈 커넥션 최대 개수 (Harbor용 postgres 기본값은 1024).
  max_open_conns: 900
  # 커넥션 최대 재사용 시간. 만료 시 lazy하게 닫힘.
  conn_max_lifetime: 5m
  # 커넥션 최대 유휴 시간. 0 이하면 유휴 시간으로 닫지 않음.
  conn_max_idle_time: 0

# ── 데이터 볼륨 ───────────────────────────────────────────
# 호스트의 이 경로에 레지스트리 이미지, DB 데이터, 로그 등이 저장됨.
# 운영 시 충분한 디스크 용량 확보 필요 (수십 GB 이상 권장).
data_volume: /data/harbor

# ── Trivy 취약점 스캐너 설정 ──────────────────────────────
trivy:
  # true 설정 시 fixed 가능한 취약점만 표시.
  ignore_unfixed: false
  # Trivy DB GitHub 다운로드 스킵 여부.
  # CI/CD 환경 등에서 GitHub rate limit 회피용. 에어갭 환경이면 true.
  skip_update: false
  # Java DB 업데이트 스킵 여부.
  skip_java_db_update: false
  # 오프라인 스캔 모드 (외부 의존성 조회 비활성화).
  offline_scan: false
  # 탐지 대상: vuln(취약점), config(설정), secret(시크릿) 콤마 구분.
  security_check: vuln
  # 레지스트리 인증서 검증 스킵 여부.
  insecure: false
  # 스캔 작업 타임아웃 (상한은 30분).
  timeout: 5m0s
  # GitHub 토큰 (rate limit 5000/h 로 상향, 익명은 60/h).
  # github_token: xxx

# ── Job Service 설정 ──────────────────────────────────────
jobservice:
  # 동시 실행 가능한 잡 워커 최대 개수.
  max_job_workers: 10
  # 잡 로거 출력 대상: STD_OUTPUT, FILE, DB.
  job_loggers:
    - STD_OUTPUT
    - FILE
  # 잡 로그 스위퍼 주기 (일 단위).
  logger_sweeper_duration: 1

# ── Webhook 알림 설정 ─────────────────────────────────────
notification:
  # 웹훅 잡 최대 재시도 횟수.
  webhook_job_max_retry: 3
  # 웹훅 HTTP 클라이언트 타임아웃 (초).
  webhook_job_http_client_timeout: 3

# ── 로깅 설정 ─────────────────────────────────────────────
log:
  # 로그 레벨: debug, info, warning, error, fatal.
  level: info
  # 로컬 파일 로깅.
  local:
    # 로그 로테이션 보관 개수. 0이면 회전 없이 삭제.
    rotate_count: 50
    # 로그 회전 임계 크기. k, M, G 접미사 사용 가능.
    rotate_size: 200M
    # 호스트 내 로그 저장 경로.
    location: /var/log/harbor

  # 외부 syslog 엔드포인트 설정 (사용 시 주석 해제).
  # external_endpoint:
  #   protocol: tcp
  #   host: localhost
  #   port: 5140

# 절대 수정 금지: 마이그레이션 도구가 설정 파일 버전을 감지하는 데 사용.
_version: 2.11.0

# ── 외부 프록시 설정 ──────────────────────────────────────
# 컴포넌트가 외부 인터넷 접근 시 사용할 HTTP 프록시.
# 내부망에 프록시가 있다면 http_proxy / https_proxy 지정.
# 컴포넌트 간 통신엔 적용되지 않음.
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy

# ── 업로드 임시 파일 자동 정리 ────────────────────────────
upload_purging:
  # 자동 정리 활성화 여부.
  enabled: true
  # 업로드 디렉토리 내 파일 보존 기간 (기본 1주일).
  age: 168h
  # 정리 작업 실행 주기.
  interval: 24h
  # true면 실제 삭제 없이 로그만 남김.
  dryrun: false

# ── 캐시 레이어 설정 ──────────────────────────────────────
# Redis 기반으로 project/repository/manifest 등을 캐싱.
# 높은 동시 manifest pull 성능 향상에 유용.
# HA 구성 시 모든 인스턴스가 동일하게 설정되어야 함 (데이터 정합성).
cache:
  enabled: false
  expire_hours: 24

2-1. 주요 설정 항목

  • hostname
  • http / https 설정
  • admin password
  • data volume path
  • port 설정


3. prepare 실행 (docker-compose 생성)

harbor.yml 기반으로 docker-compose.yml 생성

./prepare --with-trivy # trivy 플러그인 추가
→ docker-compose.yml 자동 생성됨


4.docker-compose.yml 수정 (필요 시)

선택 작업 (환경 따라 다름)


4-1. 수정하는 경우

  • 포트 충돌
  • 볼륨 경로 변경
  • proxy / TLS 설정 추가
  • 네트워크 구성 변경


5. Harbor 실행 (최종 실행)

cd /Users/test-platform/infra/harbor
docker compose up -d

## 컨테이너 확인 (docker ps)
CONTAINER ID   IMAGE                                   COMMAND                   CREATED         STATUS                   PORTS                       NAMES
65992b3cfb56   goharbor/nginx-photon:v2.11.1           "nginx -g 'daemon of…"   7 minutes ago   Up 7 minutes (healthy)   0.0.0.0:8888->8080/tcp      nginx
96762fd78365   goharbor/harbor-jobservice:v2.11.1      "/harbor/entrypoint.…"   7 minutes ago   Up 7 minutes (healthy)                               harbor-jobservice
d4ddf8dfb7a6   goharbor/harbor-core:v2.11.1            "/harbor/entrypoint.…"   7 minutes ago   Up 7 minutes (healthy)                               harbor-core
bb77676ef049   goharbor/trivy-adapter-photon:v2.11.1   "/home/scanner/entry…"   7 minutes ago   Up 7 minutes (healthy)                               trivy-adapter
ef86c550b1f4   goharbor/harbor-db:v2.11.1              "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes (healthy)                               harbor-db
141aeb3e5aca   goharbor/redis-photon:v2.11.1           "redis-server /etc/r…"   7 minutes ago   Up 7 minutes (healthy)                               redis
1d2161a008cc   goharbor/registry-photon:v2.11.1        "/home/harbor/entryp…"   7 minutes ago   Up 7 minutes (healthy)                               registry
f0b33a387b06   goharbor/harbor-portal:v2.11.1          "nginx -g 'daemon of…"   7 minutes ago   Up 7 minutes (healthy)                               harbor-portal
0b21e06dacaa   goharbor/harbor-registryctl:v2.11.1     "/home/harbor/start.…"   7 minutes ago   Up 7 minutes (healthy)                               registryctl
605b7d88fd22   goharbor/harbor-log:v2.11.1             "/bin/sh -c /usr/loc…"   7 minutes ago   Up 7 minutes (healthy)   127.0.0.1:1514->10514/tcp   harbor-log


6. 프로젝트 trivy 자동 스캔 설정

  • Projects → [ Project Name ] → 상단 Configuration
  • Vulnerability scanning 항목의 Automatically scan images on push 클릭 → SAVE

'CI|CD Pipeline' 카테고리의 다른 글

GitLab CI/CD 트러블슈팅 모음(CI/CD)  (0) 2026.05.31
MinIO 구축 가이드(CI/CD)  (0) 2026.05.31
GitLab CI 시작하기(CI/CD)  (0) 2026.05.24
GitLab Variables 등록(CI/CD)  (0) 2026.05.24