Migration Guide

Rocky Linux 9.7
서버 구축 계획서

RAG 시스템을 Windows 환경에서 Rocky Linux 9.7 (Blue Onyx) 엔터프라이즈 서버로 마이그레이션하기 위한 상세 구축 절차, 환경 설정, 트러블슈팅 가이드입니다.

환경 정보

항목 현재 환경 대상 환경
운영체제 Windows 10 Rocky Linux 9.7 (Blue Onyx)
서버 IP localhost 192.168.2.14
GPU (현재 GPU) NVIDIA RTX PRO 4500 Blackwell
네트워크 - 온라인 환경
데이터 마이그레이션 - ❌ 안 함 (Linux에서 새로 ingest)
소스 전송 방식 - FileZilla FTP

접속 URL 정보

접속자 URL 설명
일반 사용자 http://192.168.2.14:8080/index1.html 사용자 전용 인터페이스
운영 관리자 http://192.168.2.14:8080 관리자 전용 인터페이스

작업 흐름도

flowchart TB subgraph Phase1[1단계: 서버 기본 설정] A1[시스템 업데이트] --> A2[필수 패키지 설치] A2 --> A3[Docker 설치] A3 --> A4[NVIDIA 드라이버 설치] A4 --> A5[NVIDIA Container Toolkit] A5 --> A6[방화벽 Open] end subgraph Phase2[2단계: 코드 전송] B1[FTP 설정] --> B2[소스 전송] B2 --> B3[권한 설정] end subgraph Phase3[3단계: 환경 설정] C1[.env 수정] --> C2[디렉토리 생성] end subgraph Phase4[4단계: 빌드 및 실행] D1[Docker 빌드] --> D2[서비스 시작] D2 --> D3[GPU 확인] end subgraph Phase5[5단계: 검증] E1[헬스체크] --> E2[UI/API 테스트] E2 --> E3[데이터 Ingest] end Phase1 --> Phase2 --> Phase3 --> Phase4 --> Phase5

서버 기본 설정

Rocky Linux 9.7 OS 설정 및 Docker/NVIDIA 드라이버 설치

1.1 시스템 업데이트 및 저장소 설정

# 시스템 업데이트 sudo dnf update -y # CRB(CodeReady Builder) 활성화 (의존성 해결용) sudo dnf config-manager --set-enabled crb # EPEL 저장소 활성화 sudo dnf install -y epel-release # 필수 유틸리티 설치 sudo dnf install -y git curl wget vim tar unzip net-tools

1.2 Docker 설치

# 1. Docker Repository 추가 sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo # 2. 패키지 설치 sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 3. 서비스 시작 sudo systemctl start docker sudo systemctl enable docker # 4. 권한 부여 (재로그인 필요) sudo usermod -aG docker $USER newgrp docker

1.3 NVIDIA 드라이버 설치 (Rocky 9.7 권장 방법)

# ────────────────────────────────────────────── # 사전 준비: 커널 헤더 및 빌드 도구 설치 # ────────────────────────────────────────────── sudo dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r) sudo dnf install -y dkms gcc make elfutils-libelf-devel # ────────────────────────────────────────────── # Nouveau 오픈소스 드라이버 비활성화 (충돌 방지) # ────────────────────────────────────────────── echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf sudo dracut --force sudo grubby --update-kernel=ALL --args="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau" # ────────────────────────────────────────────── # CUDA 저장소 추가 및 드라이버 설치 # ────────────────────────────────────────────── sudo dnf config-manager --add-repo \ https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/cuda-rhel9.repo # ⚠️ 아래 명령은 Rocky 9.7에서 nvidia-smi 인식 실패가 빈번함 (사용 금지) # sudo dnf module install -y nvidia-driver:latest-dkms # ✅ 권장: cuda-drivers 패키지로 설치 sudo dnf install -y cuda-drivers # 설치 후 반드시 재부팅 sudo reboot

재부팅 후 확인: nvidia-smi 명령으로 NVIDIA RTX PRO 4500 Blackwell GPU 정보와 드라이버 버전이 표시되어야 합니다. 만약 표시되지 않으면 아래 트러블슈팅 섹션을 참고하세요.

1.3.1 nvidia-smi 정상 확인

# GPU 인식 확인 (반드시 재부팅 후) nvidia-smi # 정상 출력 예시: # +-----------------------------------------------------------------------------------------+ # | NVIDIA-SMI 570.xx.xx Driver Version: 570.xx.xx CUDA Version: 12.x | # | GPU Name ... Memory-Usage | # | 0 NVIDIA RTX PRO 4500 ... 0MiB / 24576MiB | # +-----------------------------------------------------------------------------------------+ # 드라이버 모듈 로드 확인 lsmod | grep nvidia # 커널 메시지에서 NVIDIA 관련 확인 dmesg | grep -i nvidia

1.3.2 NVIDIA Container Toolkit 설치 (Docker GPU 지원)

# 1. nvidia-smi 정상 출력 확인 후 진행 nvidia-smi # 2. NVIDIA Container Toolkit 저장소 추가 curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \ sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo # 3. Toolkit 설치 sudo dnf install -y nvidia-container-toolkit # 4. Docker 런타임에 NVIDIA 등록 sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker # 5. Docker에서 GPU 테스트 docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi

Docker 컨테이너 내부에서도 nvidia-smi 출력이 나타나면 GPU 패스스루 설정 완료입니다.

1.4 방화벽 설정

# FastAPI(8000), Tomcat(8080) 포트 개방 sudo firewall-cmd --permanent --add-port=8000/tcp sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload

소스 코드 전송

FileZilla FTP를 이용한 파일 업로드

전송 대상 목록

경로 설명
app/ Python 백엔드 소스
docker/ 서브 서비스 Dockerfile
frontend/ Web UI 소스 (html, js, css)
assets/ 어휘 데이터 등
docker-compose.yml 오케스트레이션 설정
requirements.txt 라이브러리 목록
.env 환경 변수 파일
📂

대상 디렉토리

/home/[user]/rag


# 전송 후 권한 설정 cd ~/rag chmod +x docker/tomcat/entrypoint.sh chmod 600 .env chmod -R 755 app/ frontend/ assets/ mkdir -p data/postgres data/models

환경 변수 설정

.env 파일 주요 수정사항

# 온라인 모드 활성화 (모델 다운로드 허용) EMBED_MODEL_ALLOW_DOWNLOADS=1 INGEST_ALLOW_DOWNLOADS=1 # NVIDIA RTX PRO 4500 Blackwell 최적화 (VRAM 24GB 활용) OLLAMA_NUM_CTX=4096 INGEST_BATCH_SIZE=8 # 경로 초기화 (자동 다운로드) EMBED_MODEL_LOCAL_PATH= RERANKER_MODEL=

실행 및 검증

🏗️

빌드 & 시작

docker compose build docker compose up -d
👀

상태 확인

docker compose ps docker compose logs -f

검증 체크리스트

운영 관리 스크립트

편리한 운영을 위한 쉘 스크립트 작성 (~/rag/scripts/)

start.sh

#!/bin/bash cd "$(dirname "$0")/.." echo "Starting RAG System..." docker compose up -d docker compose ps

logs.sh

#!/bin/bash cd "$(dirname "$0")/.." SERVICE=${1:-""} if [ -z "$SERVICE" ]; then docker compose logs -f else docker compose logs -f $SERVICE fi

초기 데이터 적재

새로운 Linux 환경에서는 기존 Windows 데이터를 가져오지 않고, 처음부터 다시 Ingest를 수행합니다.

  • 자동 시작: TOPIK_VOCAB_ENABLED=1 설정 시 구동 후 자동 수행
  • 수동 트리거: API를 통해 특정 소스 적재 요청
  • 확인: DB 조회로 벡터 수 확인
# 수동 Ingest 요청 curl -X POST http://192.168.2.14:8000/ingest/trigger # 적재 데이터 수 확인 docker exec -it rag-postgres psql -U rag_user -d rag \ -c "SELECT source_type, COUNT(*) FROM embeddings GROUP BY source_type;"

트러블슈팅

⚠️ nvidia-smi 명령 실패 / "command not found"

드라이버 설치 후 nvidia-smi가 동작하지 않는 경우

원인 1: Nouveau 드라이버 충돌
lsmod | grep nouveau — 출력이 있으면 Nouveau가 아직 활성 상태입니다.
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo dracut --force && sudo reboot
원인 2: dnf module 방식 설치 실패
Rocky 9.7에서 dnf module install nvidia-driver:latest-dkms는 모듈 스트림 문제로 실패하는 경우가 많습니다.
기존 설치를 제거하고 cuda-drivers로 재설치하세요:
sudo dnf remove -y nvidia-driver* cuda-drivers*
sudo dnf install -y cuda-drivers && sudo reboot
원인 3: 커널 헤더 불일치
커널 업데이트 후 헤더가 맞지 않으면 DKMS 빌드가 실패합니다.
sudo dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
sudo dkms autoinstall && sudo reboot
원인 4: Secure Boot 활성 상태
UEFI Secure Boot가 켜져 있으면 서명되지 않은 커널 모듈이 로드되지 않습니다.
BIOS에서 Secure Boot를 비활성화하거나, MOK(Machine Owner Key) 등록이 필요합니다.
mokutil --sb-state — Secure Boot 상태 확인
⚠️ nvidia-smi는 되지만 Docker GPU 실패

docker run --gpus all ... 에러 발생 시

호스트에서 nvidia-smi가 정상이라면 NVIDIA Container Toolkit 설정을 확인하세요.
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi

위 테스트가 실패하면 /etc/docker/daemon.json에 nvidia 런타임이 등록되었는지 확인:
cat /etc/docker/daemon.json"nvidia" 런타임 항목이 있어야 합니다.
⚠️ 포트 충돌 (Address already in use)

8080, 8000 포트가 이미 사용 중

sudo ss -tulpn | grep 8080 으로 점유 프로세스 확인 후 종료 (kill -9 [PID]).