4. 로컬 서비스 설정 및 실행

OpenWebUI 와 LiteLLM 을 설정하고 실행하는 법

서비스 설정

Docker Compose 준비

docker 설치 후 docker-compose 의 파일을 저장할 디렉터리 설치

mkdir -p /opt/chat
cd /opt/chat

docker-compose.yml

WEBUI_NAME 은 적당한 것으로 변경

docker-compose.yml
services:

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: always
    init: true
    ports:
      - 3000:8080
    volumes:
      - owebui:/app/backend/data
    environment:
        WEBUI_NAME: ${WEBUI_NAME}

  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: litellm
    restart: always
    init: true
    ports:
      - 4000:4000
    volumes:
      - ./litellm_config.yml:/app/config.yml
    environment:
        DATABASE_URL: "postgresql://llmproxy:${LITELLM_DB_PASSWORD}@litellm_db:5432/litellm"
        STORE_MODEL_IN_DB: "True"
    env_file:
      - .env
    command: ["--config", "/app/config.yml"]

  litellm_db:
    image: postgres
    container_name: litellm_db
    restart: always
    volumes:
      - litellm_db:/var/lib/postgresql/data
    environment:
      TZ: Asia/Seoul
      POSTGRES_DB: litellm
      POSTGRES_USER: llmproxy
      POSTGRES_PASSWORD: ${LITELLM_DB_PASSWORD}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d litellm -U llmproxy"]
      interval: 1s
      timeout: 5s
      retries: 10

  litellm_prom:
    image: prom/prometheus
    container_name: litellm_prom
    restart: always
    ports:
      - 9090:9090
    volumes:
      - litellm_prom:/prometheus
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=15d'

volumes:
  owebui:
  litellm_db:
  litellm_prom:

.env

환경변수 파일

API 키와 같은 중요한 정보를 담아두는 용도

남들에게 공유할 때 본 파일만 제외하고 전달하면 민감한 정보를 제외하고 전달할 수 있음

RANDOM 으로 표시된 것은 https://passwordsgenerator.net 을 통해 랜덤한 문자열로 생성

.env
WEBUI_NAME=YOUR_SITE_NAME

LITELLM_MASTER_KEY=YOUR_RANDOM_KEY_1

LITELLM_DB_PASSWORD=YOUR_RANDOM_PASSWORD

OPENAI_API_BASE_URL=http://litellm:4000/v1
OPENAI_API_KEY=YOUR_RANDOM_KEY_2

AZURE_OPENAI_ENDPOINT=https://your_endpoint.openai.azure.com
AZURE_OPENAI_API_KEY=YOUR_KEY_FROM_AZURE_PORTAL

AWS_ACCESS_KEY_ID=YOUR_ID_FROM_AWS_IAM_CONSOLE
AWS_SECRET_ACCESS_KEY=YOUR_KEY_FROM_AWS_IAM_CONSOLE

litellm_config.yml - LLM API 설정

LLM Provider 또는 CSP 사업자의 LLM API 설정에 따라 작성하는 파일

litellm_config.yml
model_list:
  # 추후 사용할 API 에 따라 다르게 작성

litellm_settings:
  num_retries: 5
  request_timeout: 10
  allowed_fails: 3
  cooldown_time: 30
  callbacks: ["prometheus"]

prometheus.yml

LiteLLM 사용량을 모니터링 하기 위한 DB 설정

prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'litellm'
    static_configs:
      - targets: ['litellm:4000']

서비스 실행

.env 와 litellm_config.yml 을 올바르게 설정한 후 실행

# docker compose up -d
 
# docker ps -a
IMAGE                                 PORTS                    NAMES
postgres                              5432/tcp                 litellm_db
ghcr.io/open-webui/open-webui:main    0.0.0.0:3000->8080/tcp   open-webui
ghcr.io/berriai/litellm:main-latest   0.0.0.0:4000->4000/tcp   litellm
prom/prometheus                       0.0.0.0:9090->9090/tcp   litellm_prom