GitLab Generic Package Registry¶
0. 전제¶
다음 환경 기준으로 작성:
- 규모: 프로젝트 5~20개 / 서버 소수
- 인력: 1~2명 (소수 정예)
- 멀티 스택 환경: Node.js, Express, Next.js, Nuxt.js, PHP, Laravel, C++ 등
- 운영 서버: Linux / Windows 혼합 가능
- Docker 사용 범위: Runner 빌드 환경 및 Release Storage 서버의 AIStor 실행 용도
- 배포 방식: 운영 서버가 Release Storage에서 빌드 결과물을 직접 가져가는 pull 배포
인프라 전제:
- GitLab 서버, Runner 서버, Release Storage 서버, 운영 서버는 논리적, 물리적으로 분리 가능한 구성으로 보며, 분리 운영을 전제로 작성함.
- GitLab 서버는 외부 비공개로 유지하며, 운영 서버는 GitLab 서버에 직접 접근하지 않음.
- Release Storage 서버는 운영 서버가 접근 가능한 별도 서버로 구성함.
운영 원칙:
- build -> publish -> operation server pull deploy 구조 유지
{YYYYMMDD-HHMMSS}-{declared_version}-{CI_COMMIT_SHORT_SHA}기반 immutable package version 운영- 인증은 목적별 계정 및 Access Key로 분리
- 빌드: Runner 서버
- CI 내부 산출물 보관: GitLab Generic Package Registry
- 운영 배포 기준 저장소: Release Storage (S3-compatible Object Storage)
- 운영: download, verify, extract, activate, report 수행
금지 사항:
- 운영 서버에 write 권한 Access Key 배치 금지
.env및 서버 고유 설정 파일을 패키지에 포함 금지- 운영 서버에서 배포 파일을 수동 수정한 뒤 재사용 금지
- Generic Package Registry에 업로드된 package version/file overwrite 금지
- Release Storage 의 releases 경로 Release Object overwrite 금지
- Release Storage 의
current/{RELEASE_ENV}.json외 object overwrite 금지 - 운영 서버가 GitLab 서버에 직접 접근하도록 구성 금지
위 전제를 기반으로 아래 내용을 정의함. - Generic Package Registry를 실제로 사용할 수 있는 상태까지 준비하는 단계 - GitLab Generic Package Registry를 CI 내부 산출물 보관용 Registry로 준비하는 절차
운영 서버는 GitLab Generic Package Registry 를 직접 사용하지 않으며, 운영 배포 기준은 Release Storage 로 분리함.
1. GitLab Package Registry 사전 구축 및 검증¶
Registry는 별도 설치 대상이 아니라 GitLab 기능.
1.1 GitLab 설정 (gitlab.rb)¶
GitLab 서버에서 Package Registry 기능이 활성화되어 있는지 확인.
sudo vi /etc/gitlab/gitlab.rb
확인 또는 추가:
gitlab_rails['packages_enabled'] = true
(선택) Storage 문서 기준 bind mount 구조를 사용하는 경우 기본 경로 유지:
gitlab_rails['packages_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/packages"
반영:
sudo gitlab-ctl reconfigure
1.2 GitLab UI¶
프로젝트에서 Package Registry 관련 메뉴가 노출되는지 확인.
경로:
Project → Deploy → Package registry
1.3 프로젝트 Feature 활성¶
프로젝트에서 Package registry 가 활성화 되어 있는지 확인.
경로:
Project → Settings → General → Visibility, project features, permissions