
{"id":5305,"date":"2025-04-09T00:31:25","date_gmt":"2025-04-08T16:31:25","guid":{"rendered":"https:\/\/infernews.com\/?page_id=5305"},"modified":"2025-04-09T00:31:55","modified_gmt":"2025-04-08T16:31:55","slug":"openwebui-%e7%84%a1%e9%9c%80-docker","status":"publish","type":"page","link":"https:\/\/infernews.com\/blog\/openwebui-%e7%84%a1%e9%9c%80-docker\/","title":{"rendered":"OpenWebUI (\u7121\u9700 Docker)"},"content":{"rendered":"\n<p><strong>\u4ee5\u4e0b\u662f\u5728 Mac M1 (8GB RAM) \u4ee5\u4e0a\u5b89\u88dd Open WebUI \u5728 Mac \u4e0a\u7684\u5b89\u88dd\u8207\u81ea\u52d5\u5316\u6559\u5b78<\/strong><\/p>\n\n\n\n<p><strong>1. \u524d\u63d0\u689d\u4ef6<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5efa\u8b70 Mac M1 (8GB RAM) \u4ee5\u4e0a<\/li>\n\n\n\n<li>\u5b89\u88dd\u4e86 Homebrew (\u5982\u679c\u6c92\u6709\uff0c\u8acb\u5148\u5b89\u88dd\uff1a<a href=\"https:\/\/brew.sh\/\">https:\/\/brew.sh\/<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><strong>2. \u5b89\u88dd\u6b65\u9a5f<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b89\u88dd <code>uv<\/code><\/strong>: \u4f7f\u7528 Homebrew \u5b89\u88dd <code>uv<\/code>\uff1a <\/li>\n\n\n\n<li><code>brew install uv<\/code><\/li>\n\n\n\n<li><strong>\u5efa\u7acb\u74b0\u5883<\/strong>: \u5efa\u7acb\u4e00\u500b\u5c08\u6848\u76ee\u9304\uff0c\u4e26\u521d\u59cb\u5316\u4e00\u500b Python \u865b\u64ec\u74b0\u5883\uff1a<\/li>\n<\/ul>\n\n\n\n<div class=\"codecopy-container\">\n                <div class=\"codecopy-header\">\n                    \n                    <button class=\"codecopy-btn\" data-target=\"codecopy-69f8c2acc47df\" title=\"Copy code to clipboard\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                <\/svg>\n                <span class=\"codecopy-text\">Copy<\/span>\n            <\/button>\n                <\/div>\n                <pre class=\"line-numbers\" id=\"codecopy-69f8c2acc47df\"><code class=\"language-text\"><span style=\"background-color: initial; font-family: inherit; font-size: inherit;\">mkdir openwebui &amp;&amp; cd openwebui uv init --python=3.11 . uv venv source .venv\/bin\/activate<\/span><\/code><\/pre>\n            <\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b89\u88dd Open WebUI<\/strong>: \u4f7f\u7528 <code>uv<\/code> \u5b89\u88dd Open WebUI\uff1a <\/li>\n<\/ul>\n\n\n\n<div class=\"codecopy-container\">\n                <div class=\"codecopy-header\">\n                    \n                    <button class=\"codecopy-btn\" data-target=\"codecopy-69f8c2acc4889\" title=\"Copy code to clipboard\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                <\/svg>\n                <span class=\"codecopy-text\">Copy<\/span>\n            <\/button>\n                <\/div>\n                <pre class=\"line-numbers\" id=\"codecopy-69f8c2acc4889\"><code class=\"language-text\"><code>uv pip install open-webui<\/code><\/code><\/pre>\n            <\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u904b\u884c Open WebUI<\/strong>: \u555f\u52d5 Open WebUI \u670d\u52d9\uff1a <\/li>\n<\/ul>\n\n\n\n<div class=\"codecopy-container\">\n                <div class=\"codecopy-header\">\n                    \n                    <button class=\"codecopy-btn\" data-target=\"codecopy-69f8c2acc488c\" title=\"Copy code to clipboard\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                <\/svg>\n                <span class=\"codecopy-text\">Copy<\/span>\n            <\/button>\n                <\/div>\n                <pre class=\"line-numbers\" id=\"codecopy-69f8c2acc488c\"><code class=\"language-text\"><code>open-webui serve<\/code><\/code><\/pre>\n            <\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open WebUI \u5c07\u53ef\u8a2a\u554f\u65bc\uff1a <code>http:\/\/0.0.0.0:8080\/<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>3. \u81ea\u52d5\u5316\u555f\u52d5\u8173\u672c<\/strong><\/p>\n\n\n\n<p>\u70ba\u4e86\u65b9\u4fbf\u555f\u52d5 Open WebUI\uff0c\u53ef\u4ee5\u8a2d\u7f6e\u81ea\u52d5\u5316\u8173\u672c\u3002\u9019\u500b\u8173\u672c\u6703\u6aa2\u67e5 Open WebUI \u662f\u5426\u5df2\u7d93\u5728\u904b\u884c\uff0c\u4e26\u5c07\u8f38\u51fa\u8a18\u9304\u5230\u6587\u4ef6\u3002<\/p>\n\n\n\n<div class=\"codecopy-container\">\n                <div class=\"codecopy-header\">\n                    \n                    <button class=\"codecopy-btn\" data-target=\"codecopy-69f8c2acc4891\" title=\"Copy code to clipboard\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                <\/svg>\n                <span class=\"codecopy-text\">Copy<\/span>\n            <\/button>\n                <\/div>\n                <pre class=\"line-numbers\" id=\"codecopy-69f8c2acc4891\"><code class=\"language-text\">#!\/bin\/bash\n# Function to start OpenWebUI\nstartwebui() {\n    if pgrep -f \"open-webui serve\" &gt; \/dev\/null; then\n        echo \"OpenWebUI is already running\"\n        return 1\n    fi\n    (source \"$HOME\/openwebui\/.venv\/bin\/activate\" &amp;&amp;\n     open-webui serve &gt; \"$HOME\/logs\/webui.log\" 2&gt;&amp;1 &amp;)\n    echo \"OpenWebUI started. Logs at ~\/logs\/webui.log\"\n}\n# Function to stop OpenWebUI\nstopwebui() {\n    pkill -f \"open-webui serve\"\n    echo \"OpenWebUI stopped\"\n}<\/code><\/pre>\n            <\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5be6\u73fe\u6b65\u9a5f<\/strong>:\n<ol class=\"wp-block-list\">\n<li>\u5c07\u8173\u672c\u5132\u5b58\u70ba\u53ef\u57f7\u884c\u7684\u6587\u4ef6 (\u4f8b\u5982\uff1a<code>~\/scripts\/webui-control.sh<\/code>)\uff1a <\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<div class=\"codecopy-container\">\n                <div class=\"codecopy-header\">\n                    \n                    <button class=\"codecopy-btn\" data-target=\"codecopy-69f8c2acc4893\" title=\"Copy code to clipboard\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                <\/svg>\n                <span class=\"codecopy-text\">Copy<\/span>\n            <\/button>\n                <\/div>\n                <pre class=\"line-numbers\" id=\"codecopy-69f8c2acc4893\"><code class=\"language-text\"><code>chmod +x ~\/scripts\/webui-control.sh<\/code><\/code><\/pre>\n            <\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c07\u8173\u672c\u6dfb\u52a0\u5230\u60a8\u7684 shell \u914d\u7f6e\u6a94\u6848 (\u4f8b\u5982 <code>~\/.zshrc<\/code>)\uff1a <\/li>\n<\/ul>\n\n\n\n<div class=\"codecopy-container\">\n                <div class=\"codecopy-header\">\n                    \n                    <button class=\"codecopy-btn\" data-target=\"codecopy-69f8c2acc4895\" title=\"Copy code to clipboard\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                <\/svg>\n                <span class=\"codecopy-text\">Copy<\/span>\n            <\/button>\n                <\/div>\n                <pre class=\"line-numbers\" id=\"codecopy-69f8c2acc4895\"><code class=\"language-text\"><code>source ~\/scripts\/webui-control.sh<\/code><\/code><\/pre>\n            <\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u65b9\u6cd5<\/strong>: \u5728\u7d42\u7aef\u4e2d\u8f38\u5165 <code>startwebui<\/code> \u5373\u53ef\u555f\u52d5 Open WebUI\uff0c\u4f7f\u7528 <code>stopwebui<\/code> \u505c\u6b62\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>4. \u6a21\u578b\u9078\u64c7<\/strong><\/p>\n\n\n\n<p>\u60a8\u53ef\u4ee5\u9078\u64c7\u4f7f\u7528 OpenAI API \u6216\u672c\u5730\u904b\u884c\u6a21\u578b (\u4f8b\u5982 Ollama) \u8207 Open WebUI \u914d\u5408\u4f7f\u7528\u3002<a href=\"https:\/\/platform.openai.com\/settings\/organization\/api-keys\">OpenAI API Settings<\/a> \u53ef\u4ee5\u7533\u8acb OpenAI API Key\u3002 \u6b64\u5916\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528 <a href=\"https:\/\/github.com\/ollama\/ollama\">Ollama<\/a> \u5728\u672c\u5730\u904b\u884c\u6a21\u578b\u3002<\/p>\n\n\n\n<p><strong>\u91cd\u8981\u63d0\u793a<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a73\u7d30\u7684\u5b89\u88dd\u548c\u4f7f\u7528\u8aaa\u660e\uff0c\u8acb\u53c3\u8003\u539f\u59cb\u7db2\u9801\uff1a<a href=\"https:\/\/www.jjude.com\/tech-notes\/run-owui-on-mac\/\">https:\/\/www.jjude.com\/tech-notes\/run-owui-on-mac\/<\/a>\u3002<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u4e0b\u662f\u5728 Mac M1 (8GB RAM) \u4ee5\u4e0a\u5b89\u88dd Open WebUI \u5728 Mac \u4e0a\u7684\u5b89\u88dd\u8207\u81ea\u52d5\u5316\u6559\u5b78 1. \u524d\u63d0\u689d\u4ef6 2. \u5b89\u88dd\u6b65\u9a5f 3. \u81ea\u52d5\u5316\u555f\u52d5\u8173\u672c \u70ba\u4e86\u65b9\u4fbf\u555f\u52d5 Open WebUI\uff0c\u53ef\u4ee5\u8a2d\u7f6e\u81ea\u52d5\u5316\u8173\u672c\u3002\u9019\u500b\u8173\u672c\u6703\u6aa2\u67e5 Open WebUI \u662f\u5426\u5df2\u7d93\u5728\u904b\u884c\uff0c\u4e26\u5c07\u8f38\u51fa\u8a18\u9304\u5230\u6587\u4ef6\u3002 4. \u6a21\u578b\u9078\u64c7 \u60a8\u53ef\u4ee5\u9078\u64c7\u4f7f\u7528 OpenAI API \u6216\u672c\u5730\u904b\u884c\u6a21\u578b (\u4f8b\u5982 Ollama) \u8207 Open WebUI \u914d\u5408\u4f7f\u7528\u3002OpenAI API Settings \u53ef\u4ee5\u7533\u8acb OpenAI API Key\u3002 \u6b64\u5916\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528 Ollama \u5728\u672c\u5730\u904b\u884c\u6a21\u578b\u3002 \u91cd\u8981\u63d0\u793a:<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"googlesitekit_rrm_CAowvqSiDA:productID":"","footnotes":""},"class_list":["post-5305","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/pages\/5305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/comments?post=5305"}],"version-history":[{"count":0,"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/pages\/5305\/revisions"}],"wp:attachment":[{"href":"https:\/\/infernews.com\/blog\/wp-json\/wp\/v2\/media?parent=5305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}