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

๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๐Ÿ—๏ธ

๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์œผ์…จ๋”๋ผ๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”! ์•„๋ž˜์—์„œ Docker ๐Ÿณ ๋ฐฐํฌ ๋ฐ Open WebUI์˜ ๋กœ์ปฌ ์„ค์น˜๋ฅผ ์œ„ํ•œ ๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ฐ€์ด๋“œ ๐Ÿณโ€‹

Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋œ Open WebUI์˜ ๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

๋‹จ๊ณ„ 1: ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ ์ƒ์„ฑ ๐Ÿ”โ€‹

๋จผ์ € ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ bcrypt ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ your-new-password๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ฐ”๊พธ์„ธ์š”:

htpasswd -bnBC 10 "" your-new-password | tr -d :\n

์ฐธ๊ณ : ์ถœ๋ ฅ์—๋Š” ์‹ ์ค‘ํžˆ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ bcrypt ํ•ด์‹œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ์˜ $ ๋ฌธ์ž๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŠธ๋ฆฌํ”Œ ์ด์Šค์ผ€์ดํ”„( \\\ ๋กœ ๋ณ€๊ฒฝ)๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 2: Docker์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์—…๋ฐ์ดํŠธ ๐Ÿ”„โ€‹

์ด์ œ Docker ๋ฐฐํฌ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์—์„œ HASH๋ฅผ 1๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ bcrypt ํ•ด์‹œ๋กœ ๋ฐ”๊พธ๊ณ  $ ๋ฌธ์ž๋ฅผ ํŠธ๋ฆฌํ”Œ ์ด์Šค์ผ€์ดํ”„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋˜ํ•œ, [email protected]์„ ๊ด€๋ฆฌ์ž ๊ณ„์ •๊ณผ ์—ฐ๊ฒฐ๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ๊ต์ฒดํ•˜์„ธ์š”.

์ค‘์š”: ์•„๋ž˜ ๋ช…๋ น์ด ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์•„๋ž˜ ์ œ์‹œ๋œ ๋Œ€์ฒด ๋ช…๋ น์„ ์‹œ๋„ํ•˜์„ธ์š”.

docker run --rm -v open-webui:/data alpine/socat EXEC:"bash -c apk add sqlite && echo UPDATE auth SET password=\HASH\ WHERE email=\[email protected]\; | sqlite3 /data/webui.db", STDIO

๋กœ์ปฌ ์„ค์น˜๋ฅผ ์œ„ํ•œ ๊ฐ€์ด๋“œ ๐Ÿ’ปโ€‹

Open WebUI์˜ ๋กœ์ปฌ ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์‹œ์Šคํ…œ์—์„œ ์ง์ ‘ ๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 1: ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ ์ƒ์„ฑ ๐Ÿ”โ€‹

Docker ๋ฐฉ๋ฒ•๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ bcrypt ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”. your-new-password๋ฅผ ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”:

htpasswd -bnBC 10 "" your-new-password | tr -d :\n

๋‹จ๊ณ„ 2: ๋กœ์ปฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์—…๋ฐ์ดํŠธ ๐Ÿ”„โ€‹

์ด์ œ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ open-webui ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ 1๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ bcrypt ํ•ด์‹œ๋ฅผ HASH๋กœ, ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ด๋ฉ”์ผ์„ [email protected]๋กœ ๋ฐ”๊พผ ํ›„ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”:

sqlite3 backend/data/webui.db "UPDATE auth SET password=HASH WHERE [email protected];"

๋Œ€์ฒด Docker ๋ฐฉ๋ฒ•โ€‹

์œ„์˜ ๋ฐฉ๋ฒ•์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด. alpine/socat์—์„œ bash ๋ช…๋ น์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. bash๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  1. open-webui ๋ณผ๋ฅจ์— ์—ฐ๊ฒฐ๋œ alpine Linux๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    docker run -it --rm -v open-webui:/path/to/data alpine

    /path/to/data๋Š” ๋‹น์‹ ์˜ ๋ณผ๋ฅจ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

    1. apache2-utils์™€ sqlite๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

      apk add apache2-utils sqlite
    2. bcrypt ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

      htpasswd -bnBC 10 "" your-new-password | tr -d :
    3. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค:

      sqlite3 /path/to/data/webui.db
      UPDATE auth SET password=HASH WHERE email=admin@example.com;
      -- sqlite ์ข…๋ฃŒ: [Ctrl + d]

๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”โ€‹

Open WebUI๋ฅผ ์™„์ „ํžˆ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ, ์„ค์ •, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด webui.db ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

๋‹จ๊ณ„ 1: Python ํ™˜๊ฒฝ์—์„œ webui.db ์ฐพ๊ธฐโ€‹

ํŠนํžˆ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ webui.db๊ฐ€ ์–ด๋””์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅผ ๊ฒฝ์šฐ, ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค(์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ).

  2. Python ์…ธ์„ ์—ฝ๋‹ˆ๋‹ค: python

  3. Python ์…ธ ๋‚ด๋ถ€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

   import os
import open_webui

# Open WebUI ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ ์œ„์น˜๋ฅผ ํ‘œ์‹œ
print("Open WebUI๊ฐ€ ์„ค์น˜๋œ ์œ„์น˜:", open_webui.__file__)

# `webui.db`์˜ ์ž ์žฌ์  ๊ฒฝ๋กœ ๊ตฌ์„ฑ(`data/webui.db`์— ์ผ๋ฐ˜์ ์œผ๋กœ ์œ„์น˜ํ•จ)
db_path = os.path.join(os.path.dirname(open_webui.__file__), "data", "webui.db")
print("webui.db์˜ ์ž ์žฌ์  ๊ฒฝ๋กœ:", db_path)

# ํ•ด๋‹น ๊ฒฝ๋กœ์— `webui.db`๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
if os.path.exists(db_path):
print("webui.db ๋ฐœ๊ฒฌ๋จ:", db_path)
else:
print("webui.db ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์Œ:", db_path)
  1. ์ถœ๋ ฅ ํ™•์ธ:
    • ํŒŒ์ผ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์ •ํ™•ํ•œ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด, Linux์—์„œ find๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Windows/Mac์—์„œ ์ „์—ญ ํŒŒ์ผ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 2: webui.db ์‚ญ์ œโ€‹

ํŒŒ์ผ์„ ์ฐพ์€ ํ›„, ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค:

   rm -rf /path/to/your/python/environment/lib/pythonX.X/site-packages/open_webui/data/webui.db

๊ฒฝ๊ณ : webui.db๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ณ„์ •, ์„ค์ • ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”!