hello

Setup VM 구성

Share

VM 설계 목표

  1. 완전 오프라인 운영: 외부 네트워크 차단 환경에서 모든 GitOps 작업 수행 가능
  2. 자체 인증서 관리: Self-Signed 인증서 생성/관리 자동화
  3. 종속성 미러링: 모든 패키지/이미지/차트의 로컬 저장소 보유
  4. 30분 내 클러스터 재구성: 재해 복구 시 빠른 환경 복원

VM 구성 상세 설계

핵심 컴포넌트 구성

도구 역할 라이선스 오프라인 대응 방안
Gitea 로컬 Git 저장소 MIT 모든 코드/설정 파일 보유, 웹훅 트리거 내부 네트워크 연동
Harbor 컨테이너 이미지 & Helm 차트 저장소 Apache 2.0 필수 이미지 미리 패키징, air-gapped 배포 지원
ArgoCD GitOps 배포 관리자 Apache 2.0 Gitea와 직접 연동, 배포 현황 로컬 모니터링
Nexus3 바이너리 미러 저장소 Eclipse Public License RKE2 패키지, Helm 차트, OS 패키지 미러링

하드웨어 요구사항

VM Specifications:
  CPU: 4 Core (최소) / 8 Core (권장)
  Memory: 16GB (최소) / 32GB (권장)
  Storage:
    - OS 볼륨: 50GB (ext4)
    - Docker 볼륨: 100GB (xfs)
    - 데이터 볼륨: 200GB (미러 저장용, lvm)
  Network: 
    - 내부 관리망: 1Gbps
    - 클러스터 통신망: 10Gbps (권장)

구성 방식

1. 오프라인 환경 준비

Nexus3 미러링 구성

# RKE2 패키지 미러링
nexus3 repository create rke2-rpm --type=apt
nexus3 mirror add https://releases.rancher.com/rke2/

# Helm 차트 미러링
helm repo add local http://nexus3:8081/repository/helm-charts/
helm repo mirror https://charts.bitnami.com/bitnami local

2. Docker Compose 기반 서비스 배포

version: '3'
services:
  gitea:
    image: gitea/gitea:1.21
    volumes:
      - ./gitea:/data
    networks:
      - gitops-net

  harbor:
    image: goharbor/harbor:v2.10
    depends_on:
      - postgresql
    environment:
      - HARBOR_ADMIN_PASSWORD=admin123
    networks:
      - gitops-net

  nexus3:
    image: sonatype/nexus3:3.58.1
    ports:
      - "8081:8081"
    volumes:
      - ./nexus-data:/nexus-data

GitOps 워크플로우

  1. 개발자 → Gitea (코드 커밋)
  2. ArgoCD → Gitea 변경 감지
  3. ArgoCD → Harbor (이미지 풀)
  4. ArgoCD → Kubernetes (매니페스트 배포)
  5. Nexus3 ↔ 모든 외부 패키지 요청 처리

주기적 미러 업데이트

nexus3 mirror update --repo=rke2-rpm --url=https://releases.rancher.com

이 구성을 통해 인터넷 연결 없이도 완전한 GitOps 사이클을 구현할 수 있으며, AI 기반 자동화를 통해 단일 운영자가 효율적으로 관리할 수 있는 환경이 조성됩니다. 모든 구성 요소의 라이선스는 상용 사용이 가능한 오픈소스로 선정되어 법적 리스크 없이 운영 가능합니다.

Vagrant + VirtualBox 기반 IaC 구축 가이드

Vagrant 소개 및 사용법
Vagrant는 개발 환경을 코드로 관리할 수 있도록 도와주는 오픈 소스 도구
Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2404"
  config.vm.hostname = "gitops-server"
  
  # 리소스 할당
  config.vm.provider "virtualbox" do |vb|
    vb.cpus = 4
    vb.memory = 16384 # 16GB
    vb.customize ["modifyvm", :id, "--ioapic", "on"]
  end

  # 포트 포워딩
  config.vm.network "forwarded_port", guest: 8081, host: 8081 # Nexus3
  config.vm.network "forwarded_port", guest: 80, host: 8080 # Harbor
  config.vm.network "forwarded_port", guest: 3000, host: 3000 # Gitea

  # 프로비저닝 스크립트
  config.vm.provision "shell", inline: <<-SHELL
    #!/bin/bash

    # Docker 설치
    apt-get update
    apt-get install -y docker.io
    systemctl enable --now docker
    usermod -aG docker vagrant

    # Docker Compose 설치
    curl -L "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    # Nexus3 설치
    apt-get install -y openjdk-17-jdk
    useradd -m nexus
    cd /opt
    wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
    tar -xzf latest-unix.tar.gz
    ln -s nexus-3* nexus
    chown -R nexus:nexus /opt/nexus /opt/sonatype-work
    cat <<EOF > /etc/systemd/system/nexus.service
    [Unit]
    Description=Nexus Service
    After=network.target

    [Service]
    Type=forking
    User=nexus
    ExecStart=/opt/nexus/bin/nexus start
    ExecStop=/opt/nexus/bin/nexus stop
    Restart=on-abort

    [Install]
    WantedBy=multi-user.target
    EOF
    systemctl enable --now nexus.service

    # Harbor 설치
    curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '\\.tgz$' | wget -i -
    tar -xzvf harbor-offline-installer-*.tgz
    cd harbor
    cp harbor.yml.tmpl harbor.yml
    sed -i 's/hostname:.*/hostname: localhost/' harbor.yml
    sed -i 's/port: 80/port: 8080/' harbor.yml
    ./install.sh --with-trivy --with-chartmuseum

    # Gitea 설치
    apt-get install -y git sqlite3
    adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git
    wget -O /usr/local/bin/gitea https://dl.gitea.com/gitea/1.21.5/gitea-1.21.5-linux-amd64
    chmod +x /usr/local/bin/gitea
    mkdir -p /var/lib/gitea/{custom,data,log}
    chown -R git:git /var/lib/gitea
    cat <<EOF > /etc/systemd/system/gitea.service
    [Unit]
    Description=Gitea
    After=network.target

    [Service]
    User=git
    WorkingDirectory=/var/lib/gitea/
    ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
    Restart=always

    [Install]
    WantedBy=multi-user.target
    EOF
    systemctl enable --now gitea.service
  SHELL
end

초기 접속 방법

Read more

AI 에이전트 시대의 코드 호스팅: Cursor ‘Origin’은 왜 등장했나

AI 코딩 도구로 빠르게 성장한 Cursor가 이제 코드 에디터를 넘어 코드 호스팅 영역까지 확장하고 있습니다. 2026년 8월 17일 Cursor는 Origin이라는 새로운 코드 호스팅 서비스를 early beta로 공개했습니다. 쉽게 말하면 GitHub처럼 Git 저장소를 만들고, 코드를 올리고, Pull Request(PR)를 만들고 리뷰할 수 있는 서비스입니다. 그런데 단순히 "Cursor가 GitHub 비슷한

By JHL

코딩 에이전트에 1,000억 토큰을 써보니, 병목은 모델 밖에 있었다

Codex 화면에 집계된 누적 사용량은 약 866억 토큰이었다. Claude는 내가 확인할 수 있었던 로컬 머신의 집계값만 합쳐도 약 127억 토큰이었다. 다만 Claude는 여러 워크스테이션과 서버에서 사용했고, 중간에 사용량 데이터를 한 번 날려버리기도 했다. 누락된 머신과 기간을 감안하면 실제 사용량은 300억 토큰을 넘었을 가능성이 높다. 여기에 Ollama Cloud로 사용한 GLM, Qwen

By JHL

AI가 짜준 코드가 배포 속도를 높였다면, 이제는 '신뢰성 가드레일'을 세울 때입니다

최근 많은 팀이 AI 코딩 어시스턴트나 에이전트를 도입하면서 코드 생산 속도가 비약적으로 상승했습니다. 하지만 속도가 빨라졌다는 것은 그만큼 잠재적인 결함이 프로덕션 환경으로 유입되는 속도 또한 빨라졌음을 의미합니다. DevOps.com의 이번 글은 AI가 생성한 코드의 특성과 그로 인해 발생하는 새로운 유형의 리스크, 그리고 이를 제어하기 위한 '신뢰성 가드레일(Reliability Guardrails)

By JHL

LLM 시대, 프롬프트 엔지니어링보다 '도메인 전문성'이 더 강력한 무기인 이유

최근 AI 도구들이 비약적으로 발전하면서 '프롬프트 엔지니어링'이라는 기술적 기법에 많은 관심이 쏠렸습니다. 하지만 실제 현업에서 LLM을 극한으로 활용해 고도의 결과물을 만들어내는 사람들의 공통점은 정교한 프롬프트 템플릿을 쓰는 능력이 아니라, 해당 분야에 대한 깊은 '도메인 전문성'을 갖추고 있다는 점입니다. 많은 이들이 LLM이 지식의 격차를 줄여준다고

By JHL