๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
๊ฒฝ๊ณ 

์ด ํŠœํ† ๋ฆฌ์–ผ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Open WebUI ํŒ€์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž์ถฐ Open WebUI๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”? ๊ธฐ์—ฌ ํŠœํ† ๋ฆฌ์–ผ์„ ํ™•์ธํ•˜์„ธ์š”.

๐Ÿชฃ S3 Storage๋กœ ์ „ํ™˜ํ•˜๊ธฐ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Open WebUI ๊ตฌ์„ฑ์˜ ๊ธฐ๋ณธ local ์ €์žฅ์†Œ๋ฅผ Amazon S3๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญโ€‹

์ด ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • ํ™œ์„ฑ AWS ๊ณ„์ •
  • ํ™œ์„ฑ AWS ์•ก์„ธ์Šค ํ‚ค์™€ ๋น„๋ฐ€ ํ‚ค
  • AWS IAM ๊ถŒํ•œ (S3์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋ฐฐ์น˜)
  • ์‹œ์Šคํ…œ์— Docker ์„ค์น˜

Amazon S3๋ž€?โ€‹

AWS ์›น์‚ฌ์ดํŠธ์—์„œ ์ง์ ‘ ์ œ๊ณตํ•œ ์ •๋ณด:

"Amazon S3๋Š” ์—…๊ณ„ ์ตœ๊ณ ์˜ ํ™•์žฅ์„ฑ, ๋ฐ์ดํ„ฐ ๊ฐ€์šฉ์„ฑ, ๋ณด์•ˆ, ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด ์ €์žฅ์†Œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ, ์›น์‚ฌ์ดํŠธ, ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ฐฑ์—…, ์•„์นด์ด๋ธŒ, ๋จธ์‹  ๋Ÿฌ๋‹, ๋ถ„์„ ๋“ฑ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณดํ˜ธํ•˜์„ธ์š”. Amazon S3๋Š” 99.999999999% (11 9's)์˜ ๋‚ด๊ตฌ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ „ ์„ธ๊ณ„ ์ˆ˜๋ฐฑ๋งŒ ๊ณ ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค."

S3์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด: Amazon S3 ๊ณต์‹ ํŽ˜์ด์ง€

์„ค์ • ๋ฐฉ๋ฒ•

1. ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜โ€‹

์ด ์˜ต์…˜์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

Open-WebUI ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ˆ์‹œ ๊ฐ’
S3_ACCESS_KEY_IDABC123
S3_SECRET_ACCESS_KEYSuperSecret
S3_ENDPOINT_URLhttps://s3.us-east-1.amazonaws.com
S3_REGION_NAMEus-east-1
S3_BUCKET_NAMEmy-awesome-bucket-name
  • S3_ACCESS_KEY_ID: AWS ๊ณ„์ •์˜ ์•ก์„ธ์Šค ํ‚ค ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ‚ค ์ƒ์„ฑ ์‹œ AWS ๊ด€๋ฆฌ ์ฝ˜์†” ๋˜๋Š” AWS CLI์—์„œ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • S3_SECRET_ACCESS_KEY: AWS ์•ก์„ธ์Šค ํ‚ค ์Œ์˜ ๋น„๋ฐ€ ํ‚ค์ž…๋‹ˆ๋‹ค. AWS์—์„œ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ œ๊ณต๋˜๋ฉฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • S3_ENDPOINT_URL: S3 ์„œ๋น„์Šค ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” URL๋กœ AWS ์„œ๋น„์Šค ๋ฌธ์„œ ๋˜๋Š” ๊ณ„์ • ์„ค์ •์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • S3_REGION_NAME: S3 ๋ฒ„ํ‚ท์ด ์œ„์น˜ํ•œ AWS ์ง€์—ญ์œผ๋กœ, ์˜ˆ: "us-east-1"์ž…๋‹ˆ๋‹ค. ์ด๋Š” AWS ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ S3 ๋ฒ„ํ‚ท ์„ธ๋ถ€ ์ •๋ณด์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • S3_BUCKET_NAME: AWS์—์„œ ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•  ๋•Œ ์ง€์ •ํ•œ ๊ณ ์œ ํ•œ S3 ๋ฒ„ํ‚ท ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ S3 ์—”๋“œํฌ์ธํŠธ URL์˜ ์ „์ฒด ๋ชฉ๋ก์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•˜์„ธ์š”: Amazon S3 Regular Endpoints

๋ชจ๋“  ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ ๊ตฌ์„ฑ ์˜ต์…˜์„ ํ™•์ธํ•˜์„ธ์š”: Open-WebUI Cloud Storage Config

2. Open-WebUI ์‹คํ–‰ํ•˜๊ธฐโ€‹

Open-WebUI ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— STORAGE_PROVIDER๋ผ๋Š” ๋งˆ์ง€๋ง‰ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” Open-WebUI์—๊ฒŒ ์‚ฌ์šฉํ•  ๊ณต๊ธ‰์ž๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ STORAGE_PROVIDER๋Š” ๋น„์–ด์žˆ์–ด Open-WebUI๊ฐ€ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ๊ณต๊ธ‰์ž์œ ํ˜•์„ค๋ช…๊ธฐ๋ณธ๊ฐ’
localstr๋นˆ ๋ฌธ์ž์—ด (' ')์ด ์ œ๊ณต๋  ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค์˜ˆ
s3strAmazon S3 ์ €์žฅ์†Œ์—์„œ ์–ธ๊ธ‰๋œ ๊ด€๋ จ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ S3 ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค์•„๋‹ˆ์š”
gcsstrGoogle Cloud Storage์—์„œ ์–ธ๊ธ‰๋œ ๊ด€๋ จ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ GCS ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค์•„๋‹ˆ์š”

Amazon S3๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด STORAGE_PROVIDER๋ฅผ "S3"๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ 1๋‹จ๊ณ„์—์„œ ์ˆ˜์ง‘ํ•œ ๋ชจ๋“  ํ™˜๊ฒฝ ๋ณ€์ˆ˜(S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_ENDPOINT_URL, S3_REGION_NAME, S3_BUCKET_NAME)๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ENV๋ฅผ "dev"๋กœ ์„ค์ •ํ•˜์—ฌ Open-WebUI Swagger ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ  S3 ์ €์žฅ์†Œ ์„ค์ •์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

docker run -d \
-p 3000:8080 \
-v open-webui:/app/backend/data \
-e STORAGE_PROVIDER="s3" \
-e S3_ACCESS_KEY_ID="ABC123" \
-e S3_SECRET_ACCESS_KEY="SuperSecret" \
-e S3_ENDPOINT_URL="https://s3.us-east-1.amazonaws.com" \
-e S3_REGION_NAME="us-east-1" \
-e S3_BUCKET_NAME="my-awesome-bucket-name" \
-e ENV="dev" \
--name open-webui \
ghcr.io/open-webui/open-webui:main

3. ์„ค์ • ํ…Œ์ŠคํŠธํ•˜๊ธฐโ€‹

Open-WebUI๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ ๊ฐ„๋‹จํ•œ Hello, World ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์—ฌ ์„ค์ •์„ ํ…Œ์ŠคํŠธํ•ด๋ด…์‹œ๋‹ค.

Open-WebUI์—์„œ ํŒŒ์ผ ์—…๋กœ๋“œํ•˜๊ธฐ

์„ ํƒํ•œ LLM์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š”์ง€ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

Open-WebUI์—์„œ ์‘๋‹ต ํ™•์ธํ•˜๊ธฐ

์ข‹์•„์š”! ๋ชจ๋“  ๊ฒƒ์ด Open-WebUI์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด์ œ ํ•ด๋‹น ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ๊ณ  ์ง€์ •ํ•œ S3 ๋ฒ„ํ‚ท์— ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค. AWS Management Console์„ ์‚ฌ์šฉํ•˜๋ฉด S3 ๋ฒ„ํ‚ท์— ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์—…๋กœ๋“œํ•œ ํŒŒ์ผ ์ด๋ฆ„(hello.txt) ์™ธ์—๋„ ๊ฐ์ฒด ์ด๋ฆ„์— ๊ณ ์œ  ID๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Open-WebUI๊ฐ€ ์—…๋กœ๋“œ๋œ ๋ชจ๋“  ํŒŒ์ผ์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Open-WebUI์—์„œ ์‘๋‹ต ํ™•์ธํ•˜๊ธฐ

Open-WebUI์˜ swagger ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ /api/v1/files/{id} ์—”๋“œํฌ์ธํŠธ์™€ ๊ณ ์œ  ID (4405fabb-603e-4919-972b-2b39d6ad7f5b)๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ด ํŒŒ์ผ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ID๋กœ ํŒŒ์ผ ํƒ์ƒ‰ํ•˜๊ธฐ