로컬 LLM을 집 서버에 올리는 이유
로컬 AI를 한 번 구성해두면 생각보다 자주 쓰게 됩니다. 외부 API 키를 넣지 않아도 되고, 테스트하다가 토큰 비용이 쌓일 걱정도 없습니다. 홈서버에 붙여두기 좋은 서비스였습니다.

제가 로컬 LLM에 관심을 둔 가장 큰 이유는 프라이버시와 API 비용이었습니다.
ChatGPT나 Claude 같은 서비스를 쓰면 편하지만, 개인 메모나 내부 문서 내용을 넣을 때는 한 번 더 생각하게 됩니다. 반대로 Ollama는 모델을 서버 안에 내려받아 실행하는 방식이라, 기본적인 질의응답은 외부 API 없이 처리할 수 있습니다.
물론 성능은 하드웨어를 많이 탑니다. 그래도 간단한 요약, 코드 초안, 개인용 질의응답 정도라면 Rocky Linux 9 + Docker + Ollama + Open WebUI 조합이 꽤 깔끔합니다.
공식 문서는 아래를 기준으로 확인하면 됩니다.
| 구분 | 링크 | 확인할 내용 |
|---|---|---|
| Rocky Linux | Rocky Linux 공식 사이트 | Rocky Linux 9 ISO, 릴리즈 정보 |
| Docker | Docker Engine 설치 문서 | Docker 및 Compose v2 설치 |
| Ollama | Ollama Linux 설치 | Linux 설치 명령과 모델 실행 |
| Open WebUI | Open WebUI Quick Start | Docker 실행, Compose 예시 |
사전 준비는 Rocky 9와 Docker부터
이 글은 Rocky Linux 9.x에 Docker와 Compose v2가 설치된 상태를 기준으로 정리했습니다. Docker Compose는 예전의 docker-compose가 아니라 docker compose처럼 띄어 쓰는 v2 방식으로 진행합니다.
먼저 서버에서 Docker가 정상 동작하는지 확인합니다.
방화벽을 사용 중이라면 나중에 Open WebUI 접속용으로 3000번 포트를 열어야 합니다. Ollama의 기본 포트는 11434인데, 외부에 직접 열기보다는 Docker 네트워크 내부에서만 쓰는 편이 낫습니다.

Ollama 설치와 모델 Pull
Ollama는 호스트에 직접 설치할 수도 있고, Docker 컨테이너로 띄울 수도 있습니다. 홈서버에서 관리하기에는 Docker Compose로 함께 묶는 방식이 편했습니다.
먼저 감을 보고 싶다면 호스트에 설치한 뒤 모델을 받아 테스트해도 됩니다.
모델 이름은 시점에 따라 바뀔 수 있으니, 실제 사용 전에는 Ollama 공식 라이브러리에서 한 번 확인하는 편이 좋습니다. 입문용으로는 llama3.2, 가벼운 서버라면 더 작은 모델부터 시작하는 것이 부담이 적습니다.
모델 목록은 이렇게 확인합니다.
Open WebUI Docker Compose 작성
Open WebUI는 브라우저에서 ChatGPT처럼 사용할 수 있게 해주는 웹 UI입니다. 공식 문서에서도 Docker 방식을 안내하고 있고, 데이터는 볼륨에 남기는 구조가 기본입니다.
저는 Ollama와 Open WebUI를 같은 compose 파일에 두는 구성이 가장 단순했습니다.
여기서 중요한 부분은 OLLAMA_BASE_URL=http://ollama:11434 입니다. 컨테이너 안에서 localhost:11434를 바라보면 Open WebUI 자기 자신을 가리키게 되어 연결이 되지 않습니다.
실행은 compose 파일이 있는 디렉터리에서 합니다.

firewalld와 SELinux에서 막히는 지점
Rocky Linux 9에서 Ubuntu 기준 글과 차이가 나는 부분은 이 지점이었습니다. 컨테이너는 떠 있는데 브라우저 접속이 안 되거나, 볼륨을 바인드 마운트했을 때 권한 에러가 나는 경우가 있습니다.
외부 브라우저에서 접속할 예정이라면 firewalld에 3000번 포트를 열어줍니다.
SELinux는 named volume을 쓰면 대체로 조용합니다. 하지만 아래처럼 호스트 디렉터리를 직접 붙이면 에러가 날 수 있습니다.
이때 로그에는 이런 식으로 남는 경우가 있습니다.
또는 audit 로그에서 AVC deny가 확인됩니다.
바인드 마운트를 꼭 써야 한다면 :Z 옵션을 붙여 SELinux 컨텍스트를 컨테이너에 맞춰줍니다.
이미 만들어둔 디렉터리라면 권한도 같이 확인합니다.
Rocky 계열에서는 이 부분을 빼먹으면 원인 찾는 데 시간이 꽤 걸립니다. 방화벽은 접속 문제, SELinux는 파일 접근 문제로 나눠서 보면 훨씬 빨리 좁힐 수 있습니다.
접속 테스트와 첫 모델 확인
브라우저에서 아래 주소로 접속합니다.
처음 접속하면 계정을 만들고, 관리자 화면에서 Ollama 연결 상태를 확인합니다. compose에서 OLLAMA_BASE_URL을 제대로 넣었다면 별도 설정 없이 모델 목록이 잡히는 편입니다.

모델이 보이지 않으면 먼저 Ollama 컨테이너 안에서 pull을 실행합니다.
Open WebUI 로그에서 연결 실패가 보이면 URL 설정을 다시 확인합니다.
자주 만나는 메시지는 대략 이런 형태입니다.
이 경우 대부분 Open WebUI가 Ollama를 localhost로 찾고 있거나, 두 컨테이너가 같은 Docker 네트워크에 있지 않은 상황이었습니다.
사양별 체감 속도와 선택 기준
로컬 LLM은 설치보다 사양 선택에서 기대치를 맞추는 일이 더 중요합니다. 특히 CPU만 있는 서버와 GPU가 있는 서버는 체감 차이가 큽니다.
| 제품명 | 가격대 | 주요 특징 | 추천 대상 |
|---|---|---|---|
| Oracle Cloud ARM Free Tier | 무료 가능 | 비용 부담은 거의 없지만 LLM 추론은 느린 편 | 테스트용, 가벼운 모델 실험 |
| Intel N100 미니 PC | 10만~20만원대 | 전력 소모가 낮고 24시간 운영 부담이 적음 | 홈서버 입문, 문서 요약 위주 |
| Ryzen 5급 미니 PC | 30만~50만원대 | CPU 추론 기준으로 N100보다 여유 있음 | 개인용 AI 서버, 여러 서비스 병행 |
| RTX 3060 12GB 데스크톱 | 중고가 변동 | VRAM 12GB로 7B급 모델 운용이 수월함 | 응답 속도 중시, 로컬 AI 주사용 |
| RTX 4060 Ti 16GB 데스크톱 | 가격 변동 큼 | VRAM 여유가 있어 모델 선택 폭이 넓음 | 장기적으로 로컬 LLM을 자주 쓸 사람 |
제휴 링크를 넣는다면 표의 제품명이나 가격대 옆에 붙이는 방식이 자연스럽습니다. 다만 서버 부품은 가격 변동이 심하므로, 글을 발행할 때 실제 판매가와 재고를 한 번 더 확인하는 편이 좋습니다.

마무리 운영 포인트
Rocky Linux 9에서 Ollama와 Open WebUI를 Docker로 묶으면 관리 자체는 단순합니다. 핵심은 Ollama 주소를 컨테이너 네트워크 기준으로 잡는 것, 그리고 firewalld와 SELinux를 Rocky 방식대로 처리하는 것입니다.
처음부터 큰 모델을 올리기보다 llama3.2 같은 모델로 접속과 응답 흐름을 먼저 확인하고, 그다음 하드웨어에 맞춰 모델을 바꾸는 순서가 덜 피곤했습니다. 로컬 AI는 한 번에 완성하는 서비스라기보다, 홈서버에 하나 얹어두고 천천히 손에 맞게 조정하는 쪽에 가깝습니다.
답글 남기기