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

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

Nginx๋ฅผ ์‚ฌ์šฉํ•œ HTTPS

์‚ฌ์šฉ์ž์™€ Open WebUI ๊ฐ„์˜ ์•ˆ์ „ํ•œ ํ†ต์‹ ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. HTTPS(ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ ๋ณด์•ˆ)๋Š” ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๋„์ฒญ ๋ฐ ๋ณ€์กฐ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. Nginx๋ฅผ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ Open WebUI ๋ฐฐํฌ์— HTTPS๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ณด์•ˆ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋ชจ๋‘ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์•ˆ๋‚ด์„œ๋Š” HTTPS๋ฅผ ์„ค์ •ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ: ๊ฐœ๋ฐœ ๋ฐ ๋‚ด๋ถ€ ์‚ฌ์šฉ์— ์ ํ•ฉํ•˜๋ฉฐ Docker๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Lets Encrypt: ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” SSL ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜๋ฉฐ Docker๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Windows+์ž์ฒด ์„œ๋ช…: Windows์—์„œ ๊ฐœ๋ฐœ ๋ฐ ๋‚ด๋ถ€ ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์ง€์นจ์œผ๋กœ Docker๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ์š”๊ตฌ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์„ธ์š”.

Nginx Proxy Managerโ€‹

Nginx Proxy Manager (NPM)์€ Open WebUI์™€ ๊ฐ™์€ ๋กœ์ปฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ ํšจํ•œ Lets Encrypt SSL ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณดํ˜ธํ•˜๊ณ  ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์ • ํฌํŠธ๋ฅผ ์ง์ ‘ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ HTTPS ์•ก์„ธ์Šค๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ๋งŽ์€ ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์Œ์„ฑ ์ž…๋ ฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์กฐ๊ฑดโ€‹

  • Docker ๋ฐ open-webui ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํ™ˆ ์„œ๋ฒ„.
  • ๋„๋ฉ”์ธ ์ด๋ฆ„ (DuckDNS์™€ ๊ฐ™์€ ๋ฌด๋ฃŒ ์˜ต์…˜ ๋˜๋Š” Namecheap/GoDaddy์™€ ๊ฐ™์€ ์œ ๋ฃŒ ์˜ต์…˜).
  • Docker ๋ฐ DNS ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹.

๋‹จ๊ณ„๋ณ„ ์„ค์ •โ€‹

  1. Nginx ํŒŒ์ผ์„ ์œ„ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ:

    mkdir ~/nginx_config
    cd ~/nginx_config
  2. Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Nginx Proxy Manager ์„ค์ •:

    nano docker-compose.yml
services:
app:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- 80:80
- 81:81
- 443:443
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰:

docker-compose up -d
  1. DNS ๋ฐ ๋„๋ฉ”์ธ ๊ตฌ์„ฑ:

    • ๋„๋ฉ”์ธ ์ œ๊ณต์—…์ฒด์— ๋กœ๊ทธ์ธํ•˜์—ฌ (์˜ˆ: DuckDNS) ๋„๋ฉ”์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๋„๋ฉ”์ธ์„ ํ”„๋ก์‹œ์˜ ๋กœ์ปฌ IP(์˜ˆ: 192.168.0.6)๋กœ ํฌ์ธํŠธํ•ฉ๋‹ˆ๋‹ค.
    • DuckDNS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์‹œ๋ณด๋“œ์—์„œ API ํ† ํฐ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
https://www.duckdns.org/domains ์—์„œ ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ:โ€‹
  1. SSL ์ธ์ฆ์„œ ์„ค์ •:
  • Nginx Proxy Manager์— http://server_ip:81๋กœ ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: 192.168.0.6:81
  • ๊ธฐ๋ณธ ์ž๊ฒฉ ์ฆ๋ช…([email protected] / changeme)์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • SSL Certificates โ†’ Add SSL Certificate โ†’ Lets Encrypt๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • DuckDNS์—์„œ ๋ฐ›์€ ์ด๋ฉ”์ผ๊ณผ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ์ด๋ฆ„ ํ•˜๋‚˜์—๋Š” ๋ณ„ํ‘œ๊ฐ€ ํฌํ•จ๋˜๊ณ  ํ•˜๋‚˜์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ: *.hello.duckdns.org ๋ฐ hello.duckdns.org.
  • DNS challenge๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  DuckDNS๋ฅผ ์„ ํƒํ•œ ํ›„ API ํ† ํฐ์„ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. ์˜ˆ: dns_duckdns_token=f4e2a1b9-c78d-e593-b0d7-67f2e1c9a5b8
  • Letโ€™s Encrypt ์ด์šฉ ์•ฝ๊ด€์— ๋™์˜ํ•˜๊ณ  ์ €์žฅํ•˜์‹ญ์‹œ์˜ค. ํ•„์š”์‹œ ์ „ํŒŒ ์‹œ๊ฐ„ ๋ณ€๊ฒฝ(120์ดˆ).
  1. ํ”„๋ก์‹œ ํ˜ธ์ŠคํŠธ ์ƒ์„ฑ:
  • ๊ฐ ์„œ๋น„์Šค(e.g., openwebui, nextcloud)์— ๋Œ€ํ•ด Hosts โ†’ Proxy Hosts โ†’ Add Proxy Host๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„๋ฉ”์ธ ์ด๋ฆ„ ์ž…๋ ฅ(e.g., openwebui.hello.duckdns.org).
  • HTTP ์Šคํ‚ด์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ , Websockets support ํ™œ์„ฑํ™” ํ›„ Docker IP๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(open-webui์™€ NGINX ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฐ™์€ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ, ์ด์ „๊ณผ ๋™์ผํ•œ IP ์˜ˆ์‹œ: 192.168.0.6).
  • ์ด์ „์— ์ƒ์„ฑ๋œ SSL ์ธ์ฆ์„œ๋ฅผ ์„ ํƒํ•˜๊ณ  SSL์„ ๊ฐ•์ œ ํ™œ์„ฑํ™”ํ•˜๋ฉฐ HTTP/2๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  1. open-webui์— URL ์ถ”๊ฐ€ (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด HTTPS ์˜ค๋ฅ˜ ๋ฐœ์ƒ):
  • open-webui โ†’ ๊ด€๋ฆฌ ํŒจ๋„ โ†’ ์„ค์ • โ†’ ์ผ๋ฐ˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • Webhook URL ํ…์ŠคํŠธ ํ•„๋“œ์— Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด open-webui์— ์—ฐ๊ฒฐํ•  URL์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: hello.duckdns.org (ํ•„์ˆ˜ ์•„๋‹˜) ๋˜๋Š” openwebui.hello.duckdns.org (ํ•„์ˆ˜).

WebUI ์•ก์„ธ์Šค:โ€‹

Open WebUI์— HTTPS๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šค ํ•ฉ๋‹ˆ๋‹ค: hello.duckdns.org ๋˜๋Š” openwebui.hello.duckdns.org (์„ค์ •ํ•œ ๋ฐฉ์‹์— ๋”ฐ๋ผ).

๋ฐฉํ™”๋ฒฝ ์ฐธ๊ณ : ๋กœ์ปฌ ๋ฐฉํ™”๋ฒฝ ์†Œํ”„ํŠธ์›จ์–ด(์˜ˆ: Portmaster)๊ฐ€ ๋‚ด๋ถ€ Docker ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋˜๋Š” ํ•„์š”ํ•œ ํฌํŠธ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด ์„ค์ •์— ํ•„์š”ํ•œ ํ†ต์‹ ์ด ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ ๊ฒ€ํ•˜์‹ญ์‹œ์˜ค.โ€‹

๋‹ค์Œ ๋‹จ๊ณ„โ€‹

HTTPS๋ฅผ ์„ค์ •ํ•œ ํ›„ ๋‹ค์Œ์„ ํ†ตํ•ด Open WebUI์— ์•ˆ์ „ํ•˜๊ฒŒ ์•ก์„ธ์Šคํ•˜์‹ญ์‹œ์˜ค:

๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ DNS ๋ ˆ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” SSL ์ธ์ฆ์„œ๋ฅผ ์œ„ํ•ด Lets Encrypt๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.