{"id":10196,"date":"2025-03-19T13:50:36","date_gmt":"2025-03-19T04:50:36","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=10196"},"modified":"2025-04-01T11:51:29","modified_gmt":"2025-04-01T02:51:29","slug":"openwebui-ollama","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=10196","title":{"rendered":"OpenWebUI + Ollama"},"content":{"rendered":"<h1>OpenWebUI + Ollama<\/h1>\n<p>\ubaa8\ub378\uc758 \uc885\ub958\ubcf4\ub2e4\ub294 CPU\/GPU \ucc28\uc774, GPU \uc885\ub958\uc758 \ucc28\uc774\ub85c \uc131\ub2a5\uc774 \uacb0\uc815\ub418\ub294 \ub4ef \ud558\ub2e4.<br \/>\n\ubb3c\ub860 \ucd5c\uc18c 1B \uc774\uc0c1\uc740 \ub418\uc5b4\uc57c \ud558\uace0&#8230;<\/p>\n<h2>ollama \uc124\uce58<\/h2>\n<pre><code class=\"language-bash\">curl -fsSL https:\/\/ollama.com\/install.sh | sh<\/code><\/pre>\n<p>\uae30\ud0c0 \uc124\uc815 \ubcc0\uacbd<\/p>\n<pre><code class=\"language-bash\">sudo vi \/etc\/systemd\/system\/ollama.service\n-------------\n[Unit]\nDescription=Ollama Service\nAfter=network-online.target\n\n[Service]\nExecStart=\/usr\/local\/bin\/ollama serve\nUser=ollama\nGroup=ollama\nRestart=always\nRestartSec=3\n\n# \uc678\ubd80 \uc5f0\uacb0 \uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815\nEnvironment=&quot;OLLAMA_HOST=0.0.0.0&quot;\n# \ubaa8\ub378 \ud30c\uc77c \uacbd\ub85c\nEnvironment=&quot;OLLAMA_MODELS=\/data\/ollama\/models&quot;\n# \ubaa8\ub378 \uba54\ubaa8\ub9ac\uc5d0 \uc720\uc9c0\nOLLAMA_KEEP_ALIIVE=-1\n\n[Install]\nWantedBy=default.target\n-------------\n\nsudo mkdir -p \/data\/ollama\/models\nsudo chown -R ollama:ollama \/data\/\n\n# \uc11c\ube44\uc2a4 \ud65c\uc131\ud654\nsudo systemctl daemon-reload\nsudo systemctl enable ollama\n\n# \uc11c\ube44\uc2a4 \uad6c\ub3d9\nsudo systemctl restart ollama\n\nsudo systemctl status ollama<\/code><\/pre>\n<h2>Open WebUI \uc124\uce58<\/h2>\n<pre><code class=\"language-bash\">mkdir open-webui\n\n# CPU\ndocker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:\/app\/backend\/data --name open-webui --restart always ghcr.io\/open-webui\/open-webui:main\n\n# GPU\n# docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:\/app\/backend\/data --name open-webui --restart always ghcr.io\/open-webui\/open-webui:cuda<\/code><\/pre>\n<h2>\ubaa8\ub378 \ubd88\ub7ec\uc624\uae30<\/h2>\n<p>\ud5c8\uae45 \ud398\uc774\uc2a4\uc5d0 \uc788\ub294 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ubc1b\uc544 \uc790\uc2e0\ub9cc\uc758 \ubaa8\ub378\ud30c\uc77c\uc744 \ub9cc\ub4e4\uace0 \ubaa8\ub378\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\"># \ub2e4\uc6b4\ub85c\ub4dc\nwget https:\/\/huggingface.co\/bartowski\/llama-3.2-Korean-Bllossom-3B-GGUF\/resolve\/main\/llama-3.2-Korean-Bllossom-3B-Q5_K_L.gguf\n\nvi Modelfile\n-------------------\nFROM llama-3.2-Korean-Bllossom-3B-Q5_K_L.gguf\n\nSYSTEM &quot;&quot;&quot;\ub2f9\uc2e0\uc740 \uc720\uc6a9\ud55c AI \uc5b4\uc2dc\uc2a4\ud134\ud2b8\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uc758 \uc9c8\uc758\uc5d0 \ub300\ud574 \uce5c\uc808\ud558\uace0 \uc815\ud655\ud558\uac8c \ub2f5\ubcc0\ud574\uc57c \ud569\ub2c8\ub2e4. You are a helpful AI assistant, you&#039;ll need to answer users&#039; queries in a friendly and accurate manner. \ubaa8\ub4e0 \ub300\ub2f5\uc740 \ud55c\uad6d\uc5b4(Korean)\uc73c\ub85c \ub300\ub2f5\ud574\uc8fc\uc138\uc694.&quot;&quot;&quot;\n\nTEMPLATE &quot;&quot;&quot;{{- if .System }}\n&lt;s&gt;{{ .System }}&lt;\/s&gt;\n{{- end }}\n&lt;s&gt;Human:\n{{ .Prompt }}&lt;\/s&gt;\n&lt;s&gt;Assistant:\n&quot;&quot;&quot;\n\nPARAMETER temperature 0.6\nPARAMETER num_predict 3000\nPARAMETER num_ctx 4096\nPARAMETER stop &lt;s&gt;\nPARAMETER stop &lt;\/s&gt;\nPARAMETER stop &lt;|eot_id|&gt;\n-------------------\n\nollama create llama-3.2-Korean-Bllossom-3B-Q5_K_L-GGUF -f .\/Modelfile<\/code><\/pre>\n<p>\ud5c8\uae45\ud398\uc774\uc2a4\uc5d0\uc11c \uc81c\uacf5\uc911\uc778 \ubaa8\ub378\uc5d0 <code>hf.co<\/code> \uc744 \ubd99\uc5ec \uadf8\ub300\ub85c \uc124\uce58\uac00 \uac00\ub2a5\ud569\ub2c8\ub2e4.<br \/>\n(GGUF \ud3ec\uba67\uc778 \uacbd\uc6b0)<\/p>\n<pre><code class=\"language-bash\"># ollama pull hf.co\/QuantFactory\/llama-3.2-Korean-Bllossom-3B-GGUF\n\nollama list\nNAME                                               ID              SIZE      MODIFIED\nllama-3.2-Korean-Bllossom-3B-Q5_K_L-GGUF:latest    073041344f01    2.4 GB    47 hours ago<\/code><\/pre>\n<p>qwen2.5-coder:14b-instruct-q4_K_M<\/p>\n<p>ollama \uc5d0\uc11c \uc81c\uacf5\uc911\uc778 \ubaa8\ub378\ub3c4 \ub2f9\uc5f0\ud788 \uc124\uce58 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\">ollama pull qwen2.5-coder:14b-instruct-q4_K_M<\/code><\/pre>\n<h2>\uc2e4\ud589<\/h2>\n<p>Open WebUI\uc5d0 \uc811\uc18d (\uae30\ubcf8 URL: <a href=\"http:\/\/localhost:3000\">http:\/\/localhost:3000<\/a>)<\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-02.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-02.png\" alt=\"\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-03.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-03.png\" alt=\"\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-06.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-06.png\" alt=\"\" \/><\/a><\/p>\n<h2>\uc624\ub958 \ub300\uc751<\/h2>\n<h3>\ud604\uc0c1<\/h3>\n<pre><code class=\"language-bash\"># \ud638\uc2a4\ud2b8\ncurl http:\/\/localhost:11434\nOllama is running\n\n# \ucee8\ud14c\uc774\ub108\ndocker exec -it open-webui \/bin\/bash\ncurl http:\/\/host.docker.internal:11434\ncurl: (7) Failed to connect to host.docker.internal port 11434 after 4 ms: Couldn&#039;t connect to server<\/code><\/pre>\n<h3>\uc6d0\uc778<\/h3>\n<p>\uc544\uc774\ud53c\uac00 \ubd88\uc77c\uce58\ud558\uace0 \uc788\ub2e4.<\/p>\n<pre><code class=\"language-bash\"># \ud638\uc2a4\ud2b8\nifconfig\neth0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500\n        inet 172.31.94.137  netmask 255.255.240.0  broadcast 172.31.95.255\n......\n\n# \ucee8\ud14c\uc774\ub108\ndocker exec -it open-webui \/bin\/bash\n\ncurl http:\/\/host.docker.internal:11434\ncurl: (7) Failed to connect to host.docker.internal port 11434 after 4 ms: Couldn&#039;t connect to server\n\ncurl http:\/\/172.31.94.137:11434\nOllama is running\n\ncat \/etc\/hosts\n127.0.0.1       localhost\n......\n192.168.65.254  host.docker.internal<\/code><\/pre>\n<h3>\ud574\uacb0\ucc45<\/h3>\n<h4>\ubc29\ubc951: \ub3c4\ucee4 \ub370\uc2a4\ud06c\ud0d1 \uc124\uc815<\/h4>\n<p>\ub3c4\ucee4 \ub370\uc2a4\ud06c\ud0d1\uc5d0 \uc544\ub798 \uc124\uc815\uc744 \ud574\uc900\ub2e4.<br \/>\n\uc544\uc774\ud53c\uac00 \ubc14\ub00c\uc5c8\uc744 \ub54c \ub3c4\ucee4 \ub370\uc2a4\ud06c\ud0d1\uc744 \uc7ac\uc2dc\uc791\ud574\uc57c \ud55c\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-01.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2025\/03\/2025-03-27-01.png\" alt=\"\" \/><\/a><\/p>\n<h4>\ubc29\ubc952: \ud638\uc2a4\ud2b8 \uc544\uc774\ud53c \uc804\ub2ec<\/h4>\n<p>\ud638\uc2a4\ud2b8\uc758 \uc544\uc774\ud53c\ub97c \ub118\uaca8\uc8fc\uba74 \ub41c\ub2e4.<\/p>\n<pre><code class=\"language-bash\">HOST=$(ip addr show eth0 | grep &#039;inet\\b&#039; | awk &#039;{print $2}&#039; | cut -d\/ -f1)\ndocker run -d -p 3000:8080 --gpus all \\\n    --add-host=&quot;host.docker.internal:$HOST&quot; \\\n    -v open-webui:\/app\/backend\/data \\\n    --name open-webui \\\n    --restart always ghcr.io\/open-webui\/open-webui:cuda<\/code><\/pre>\n<h4>\ubc29\ubc953: hosts \ud30c\uc77c \uc218\uc815<\/h4>\n<p>\uc544\ub798 \ubc29\ubc95\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc7ac\uc2dc\uc791\ud558\uba74 \ub2e4\uc2dc \uc5d0\ub7ec\uac00 \ub09c\ub2e4.<br \/>\n(\ud558\uc9c0\ub9cc \uc774 \ubc29\ubc95\uc774 \uac00\uc7a5 \ud655\uc2e4\ud558\ub2e4&#8230;)<\/p>\n<pre><code class=\"language-bash\"># \ucee8\ud14c\uc774\ub108\ndocker exec -it open-webui \/bin\/bash\n\ncp \/etc\/hosts ~\/hosts.new\nsed -i &#039;s\/192.168.65.254\/172.31.94.137\/g&#039; ~\/hosts.new\ncp -f ~\/hosts.new \/etc\/hosts\n\ncurl http:\/\/host.docker.internal:11434\nOllama is running<\/code><\/pre>\n<h2>\ubc84\uc804\uc5c5<\/h2>\n<pre><code class=\"language-bash\">docker ps\ndocker stop open-webui\ndocker rm open-webui\n\n# CPU\ndocker pull ghcr.io\/open-webui\/open-webui:main\ndocker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:\/app\/backend\/data --name open-webui --restart always ghcr.io\/open-webui\/open-webui:main\n\n# GPU\n# docker pull ghcr.io\/open-webui\/open-webui:cuda\n# docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:\/app\/backend\/data --name open-webui --restart always ghcr.io\/open-webui\/open-webui:cuda<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>OpenWebUI + Ollama \ubaa8\ub378\uc758 \uc885\ub958\ubcf4\ub2e4\ub294 CPU\/GPU \ucc28\uc774, GPU \uc885\ub958\uc758 \ucc28\uc774\ub85c \uc131\ub2a5\uc774 \uacb0\uc815\ub418\ub294 \ub4ef \ud558\ub2e4. \ubb3c\ub860 \ucd5c\uc18c 1B \uc774\uc0c1\uc740 \ub418\uc5b4\uc57c \ud558\uace0&#8230; ollama \uc124\uce58 curl -fsSL https:\/\/ollama.com\/install.sh | sh \uae30\ud0c0 \uc124\uc815 \ubcc0\uacbd sudo vi \/etc\/systemd\/system\/ollama.service &#8212;&#8212;&#8212;&#8212;- [Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=\/usr\/local\/bin\/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 # \uc678\ubd80 \uc5f0\uacb0 \uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815 Environment=&quot;OLLAMA_HOST=0.0.0.0&quot; # \ubaa8\ub378 \ud30c\uc77c \uacbd\ub85c\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=10196\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-10196","post","type-post","status-publish","format-standard","hentry","category-machine-learning"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/10196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10196"}],"version-history":[{"count":22,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/10196\/revisions"}],"predecessor-version":[{"id":10304,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/10196\/revisions\/10304"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}