零代码搭建私有AI助手:Open WebUI与DeepSeek API实战指南
想拥有一个属于自己的AI助手网站,但又觉得从零开发太复杂,或者担心API调用成本太高?今天要介绍的这个方案,可能正是你需要的。它让你能在几分钟内,用极低的成本,搭建一个功能完整、界面美观、支持多用户注册和分享的AI对话平台。
这个方案的核心是Open WebUI和DeepSeek。Open WebUI(原名Ollama WebUI)是一个开源的、可自托管的类ChatGPT Web界面,它本身支持连接多种大模型后端。而DeepSeek,作为近期备受瞩目的高性能开源模型,提供了免费且强大的API。将两者结合,你就能获得一个“私人定制版”的ChatGPT,并且完全掌控数据和成本。
很多人误以为搭建这样的服务需要深厚的全栈开发功底或高昂的云服务器费用。实际上,借助成熟的容器化技术和开源生态,这个过程已经变得极其简单。本文将带你从零开始,一步步完成部署、配置、接入模型,并最终拥有一个可对外提供服务的AI网站。无论你是想用于团队内部知识问答、作为个人学习工具,还是探索AI应用开发,这个组合都是一个绝佳的起点。
1. 这篇文章真正要解决的问题
你是否遇到过这些情况?想用最新的AI模型,但觉得官方网页版功能受限或对话历史不便管理;想为小团队提供一个统一的AI工具入口,却不想让每个人都去申请API Key;或者,你单纯想拥有一个完全受自己控制的AI交互环境,数据不留存在第三方。
本文要解决的,正是这些痛点。通过 Open WebUI + DeepSeek 的组合,你可以:
- 零代码搭建:无需编写前端、后端或认证逻辑,通过 Docker 等工具一键部署。
- 完全自主可控:所有对话数据、用户信息都存储在你自己的服务器或电脑上。
- 极低成本运行:DeepSeek API 目前提供免费额度,对于个人或小规模使用完全足够,你只需承担服务器的基础费用。
- 获得完整功能:支持多用户注册登录、对话管理、模型切换、Markdown渲染、代码高亮等现代化聊天界面应有的功能。
- 轻松分享:部署后,你可以将网站地址分享给同事或朋友,他们注册后即可使用。
本文将不仅告诉你“怎么做”,还会解释“为什么这么做”,并指出在部署和配置过程中最容易踩坑的几个地方,确保你能一次成功。
2. 基础概念与核心原理
在开始动手之前,我们先厘清几个关键概念,这有助于你理解整个方案的架构。
Open WebUI (原 Ollama WebUI)这是一个用 Node.js 等语言开发的开源 Web 应用程序。你可以把它理解为一个“壳”或者“前端界面”,它本身不提供AI推理能力。它的核心作用是:
- 提供美观的聊天界面:类似 ChatGPT 的交互体验。
- 管理对话会话:保存、加载、删除历史对话。
- 管理用户与认证:处理用户注册、登录、权限。
- 对接后端模型:通过统一的接口(如 OpenAI API 兼容接口)与真正的AI模型服务通信。
DeepSeek这是深度求索公司开发的大语言模型系列。我们这里主要利用的是其提供的DeepSeek API 服务。这意味着我们不需要在本地消耗巨量显卡资源去运行一个几十GB的模型文件,而是通过网络调用云端部署好的、已经优化过的 DeepSeek 模型实例。这种方式成本低、响应快、无需维护模型本身。
核心工作原理整个系统的工作流如下图所示(概念性描述):
- 用户在浏览器中访问你部署的 Open WebUI 网站。
- 用户输入问题并点击发送。
- Open WebUI 后端接收到请求,将其按照OpenAI API 的格式进行封装。
- Open WebUI 将封装好的请求,发送到你配置的DeepSeek API 端点(一个URL地址)。
- DeepSeek 的云端服务器处理请求,生成回复,并返回给 Open WebUI。
- Open WebUI 将回复呈现给用户。
为什么是 OpenAI API 格式?因为这是目前大模型服务领域事实上的标准接口协议。DeepSeek API 也兼容此协议,这使得 Open WebUI 这类前端能无缝接入。这种设计带来了巨大的灵活性,未来如果你想换用其他同样兼容此协议的模型(如 GPT、Claude 的 API,或其他开源模型服务),只需修改配置中的 API 地址和密钥即可,无需改动 Open WebUI 本身。
3. 环境准备与前置条件
为了顺利完成部署,你需要准备好以下环境。整个过程主要依赖 Docker,这能最大程度避免环境依赖冲突。
3.1 硬件与网络要求
- 一台服务器或电脑:可以是云服务器(如腾讯云、阿里云ECS)、本地PC、甚至是树莓派(需性能足够)。本文以最常见的Linux 云服务器为例进行说明。
- 操作系统:推荐Ubuntu 22.04 LTS或CentOS 8等主流Linux发行版。Windows 和 macOS 也可通过 Docker Desktop 运行,但本文侧重服务器部署。
- 网络:服务器需要能正常访问公网,特别是能稳定连接 DeepSeek 的 API 服务器 (
api.deepseek.com)。
3.2 软件依赖安装
我们需要安装两个核心软件:Docker 和 Docker Compose。
在 Ubuntu/Debian 系统上安装:
# 1. 更新软件包索引 sudo apt-get update # 2. 安装必要的依赖包,以便 apt 可以通过 HTTPS 使用仓库 sudo apt-get install -y ca-certificates curl gnupg lsb-release # 3. 添加 Docker 的官方 GPG 密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 4. 设置 Docker 稳定版仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 5. 再次更新包索引,并安装 Docker Engine 和 Docker Compose Plugin sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 6. 验证安装是否成功 docker --version docker compose version在 CentOS/RHEL 系统上安装:
# 1. 卸载旧版本(如果存在) sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 2. 安装 yum-utils 包并设置稳定版仓库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 3. 安装 Docker Engine 和 Docker Compose Plugin sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 4. 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 5. 验证安装 docker --version docker compose version3.3 获取 DeepSeek API Key
这是连接 DeepSeek 服务的“钥匙”。
- 访问 DeepSeek 开放平台 。
- 注册并登录账号。
- 在控制台中,找到API Keys部分。
- 点击“Create new secret key”创建一个新的密钥。
- 妥善保存这个密钥字符串(如
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx),创建后页面关闭将无法再次查看完整密钥。
4. 核心流程拆解:使用 Docker Compose 部署 Open WebUI
我们将使用 Docker Compose 来定义和运行整个服务,这是最清晰、最易于管理的方式。它通过一个 YAML 文件描述了应用所需的所有服务、网络和卷。
4.1 创建项目目录与配置文件
首先,在你的服务器上创建一个专属目录,并进入该目录。
mkdir openwebui-deepseek && cd openwebui-deepseek接下来,创建 Docker Compose 的配置文件docker-compose.yml。
nano docker-compose.yml将以下配置内容复制并粘贴到文件中。请仔细阅读注释,理解每个配置项的作用。
# docker-compose.yml version: '3.8' services: open-webui: # 使用官方镜像,标签可以是 latest 或具体版本号 image: ghcr.io/open-webui/open-webui:main container_name: open-webui # 设置容器重启策略,确保服务意外停止后能自动重启 restart: unless-stopped ports: # 将容器内部的 8080 端口映射到宿主机的 3000 端口 # 格式:宿主机端口:容器端口 # 你可以将 3000 改为任何未被占用的端口,如 8080 - "3000:8080" volumes: # 将容器内的数据目录挂载到宿主机,实现数据持久化 # 即使容器被删除,你的对话记录、用户数据等也会保留在 ./data 目录下 - ./data:/app/backend/data environment: # 环境变量配置区,这是配置的核心 # 1. 禁用 Ollama 集成(因为我们不使用本地 Ollama 模型) - DISABLE_OLLAMA=true # 2. 设置默认的模型显示名称,这个名字会在UI中展示 - DEFAULT_MODEL_NAME=DeepSeek Chat # 3. 设置默认的模型ID,这个ID需要与后续的模型配置匹配 - DEFAULT_MODEL_ID=deepseek-chat # 4. 设置Open WebUI的管理员邮箱(首次启动后用于登录) - WEBUI_ADMIN_EMAIL=admin@yourdomain.com # 请修改为你的邮箱 # 5. 设置Open WebUI的名称,会显示在网页标题和登录页 - WEBUI_NAME=My AI Assistant # 6. 设置允许用户注册,这是实现“可分享”功能的关键 - WEBUI_REGISTRATION=true # 7. 设置默认的模型提供商为 'openai',因为DeepSeek API兼容此格式 - DEFAULT_MODEL_PROVIDER=openai # 8. 设置默认的模型基础URL,指向DeepSeek API端点 - DEFAULT_MODEL_BASE_URL=https://api.deepseek.com # 9. 设置默认的模型API密钥,这里先留空,我们通过更安全的方式传入 - DEFAULT_MODEL_API_KEY= # 定义容器启动后执行的命令,这里我们覆盖默认命令,传入我们自定义的模型配置 command: > sh -c " # 等待后端服务完全启动 sleep 5; # 启动Open WebUI应用 ./start.sh "关键配置解释:
volumes: - ./data:/app/backend/data:这是数据持久化的关键。所有用户数据、对话历史、设置都保存在宿主机的./data目录下。务必保留此配置。WEBUI_REGISTRATION=true:将此设置为true,网站才会开放注册功能。如果只想自己用,可以设为false。DEFAULT_MODEL_BASE_URL:这里填写的https://api.deepseek.com是 DeepSeek 官方的 API 地址。DEFAULT_MODEL_API_KEY:我们在环境变量中留空,是为了避免将密钥硬编码在配置文件中(有安全风险)。我们将通过另一种更安全的方式传入。
保存并退出编辑器(在 nano 中按Ctrl+X,然后按Y,再按Enter)。
4.2 创建模型配置文件
Open WebUI 允许你通过一个 JSON 文件来定义可用的模型。我们在项目目录下创建这个文件。
nano model_config.json将以下内容粘贴进去:
{ "deepseek-chat": { "name": "DeepSeek Chat", "model": "deepseek-chat", "api_base": "https://api.deepseek.com", "api_key": "${DEEPSEEK_API_KEY}", "provider": "openai", "description": "DeepSeek 最新通用对话模型,强大且免费。", "context_length": 16384, "parameters": { "temperature": 0.7, "top_p": 0.9, "max_tokens": 4096, "stream": true } }, "deepseek-coder": { "name": "DeepSeek Coder", "model": "deepseek-coder", "api_base": "https://api.deepseek.com", "api_key": "${DEEPSEEK_API_KEY}", "provider": "openai", "description": "DeepSeek 代码专用模型,擅长编程任务。", "context_length": 16384, "parameters": { "temperature": 0.2, "top_p": 0.95, "max_tokens": 4096, "stream": true } } }配置解释:
- 我们定义了两个模型配置:
deepseek-chat(通用对话)和deepseek-coder(代码专用)。 model字段的值 (deepseek-chat,deepseek-coder) 必须与 DeepSeek API 支持的模型名称一致。api_key:${DEEPSEEK_API_KEY}这是一个变量占位符。它的值将从我们稍后设置的环境变量中读取。parameters: 这里设置了模型调用的参数,如temperature(创造性,值越高越随机)、stream(是否启用流式输出,建议为 true 以获得打字机效果)。
保存并退出。
4.3 创建环境变量文件(用于安全存储API Key)
我们不希望敏感的 API Key 出现在docker-compose.yml或代码仓库中。最佳实践是使用.env文件,Docker Compose 会自动读取它。
nano .env在文件中输入以下内容,将your_actual_deepseek_api_key_here替换为你之前在 DeepSeek 平台获取的真实 API Key。
# .env 文件 # DeepSeek API 密钥 DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Open WebUI 管理员密码(可选,首次登录后可在UI中修改) # OPEN_WEBUI_ADMIN_PASSWORD=your_strong_password_here重要安全提醒:
- 务必确保
.env文件不被提交到公开的 Git 仓库。你应该将它添加到.gitignore文件中。 - 在服务器上,也要确保该文件的权限设置正确(如
chmod 600 .env),防止其他用户读取。
保存并退出。
4.4 修改 Docker Compose 配置以注入模型配置和密钥
现在我们需要更新docker-compose.yml,让它将model_config.json挂载到容器内,并读取.env文件中的密钥。
重新编辑docker-compose.yml:
nano docker-compose.yml找到volumes部分,在下面添加一行,将本地的模型配置文件挂载进去:
volumes: - ./data:/app/backend/data # 新增:挂载模型配置文件到容器内的指定路径 - ./model_config.json:/app/backend/model_config.json找到environment部分,我们需要修改DEFAULT_MODEL_API_KEY的值,并添加一个引用.env文件的指令。实际上,更优雅的方式是让 Open WebUI 直接读取我们挂载的model_config.json,而该文件中的${DEEPSEEK_API_KEY}会被 Docker Compose 自动替换。为此,我们需要确保 Compose 能读取.env。
Docker Compose 默认会自动在当前目录寻找名为.env的文件并加载其中的变量。所以,我们只需要在model_config.json中使用${DEEPSEEK_API_KEY},并在运行命令时确保环境变量已设置。
更简单的做法是:我们不在docker-compose.yml的environment里设置DEFAULT_MODEL_API_KEY,而是通过env_file指令让整个服务加载.env文件,这样容器内所有进程都能访问DEEPSEEK_API_KEY这个变量。
在open-webui服务的配置中,environment同层级添加env_file:
services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui restart: unless-stopped ports: - "3000:8080" volumes: - ./data:/app/backend/data - ./model_config.json:/app/backend/model_config.json # 确保这行已添加 # 新增:指定环境变量文件 env_file: - .env environment: - DISABLE_OLLAMA=true - DEFAULT_MODEL_NAME=DeepSeek Chat - DEFAULT_MODEL_ID=deepseek-chat - WEBUI_ADMIN_EMAIL=admin@yourdomain.com - WEBUI_NAME=My AI Assistant - WEBUI_REGISTRATION=true - DEFAULT_MODEL_PROVIDER=openai - DEFAULT_MODEL_BASE_URL=https://api.deepseek.com # 注意:这里不再设置 DEFAULT_MODEL_API_KEY,因为密钥通过.env文件和模型配置注入 command: > sh -c " sleep 5; ./start.sh "现在,完整的docker-compose.yml文件应该类似这样(注意注释和格式):
version: '3.8' services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui restart: unless-stopped ports: - "3000:8080" volumes: - ./data:/app/backend/data - ./model_config.json:/app/backend/model_config.json env_file: - .env environment: - DISABLE_OLLAMA=true - DEFAULT_MODEL_NAME=DeepSeek Chat - DEFAULT_MODEL_ID=deepseek-chat - WEBUI_ADMIN_EMAIL=admin@yourdomain.com - WEBUI_NAME=My AI Assistant - WEBUI_REGISTRATION=true - DEFAULT_MODEL_PROVIDER=openai - DEFAULT_MODEL_BASE_URL=https://api.deepseek.com command: > sh -c " sleep 5; ./start.sh "保存并退出。
5. 启动服务与验证
所有配置文件已就绪,现在可以启动我们的 AI 网站了。
5.1 启动容器
在openwebui-deepseek目录下,运行以下命令:
# 使用 docker compose up 在后台启动服务 docker compose up -d-d参数代表“detached”,让服务在后台运行。命令执行后,Docker 会拉取 Open WebUI 镜像(如果本地没有),然后创建并启动容器。
你可以使用以下命令查看容器状态和日志:
# 查看容器运行状态 docker compose ps # 查看实时日志(用于排查启动问题) docker compose logs -f open-webui如果看到日志中出现类似Application startup complete.或Uvicorn running on http://0.0.0.0:8080的信息,说明服务已成功启动。
5.2 访问并初始化 Open WebUI
- 打开你的浏览器。
- 在地址栏输入你的服务器 IP 地址和映射的端口。例如,如果你的服务器 IP 是
123.123.123.123,配置中映射的是3000端口,那么就访问:
如果是在本地电脑(localhost)上部署,则访问http://123.123.123.123:3000http://localhost:3000。 - 首次访问,你会看到 Open WebUI 的登录/注册界面。
- 使用管理员账号登录:点击“Login”,使用你在
docker-compose.yml中设置的WEBUI_ADMIN_EMAIL(例如admin@yourdomain.com)作为邮箱。密码是什么?首次登录时,系统会在后台日志中生成一个随机密码。你需要查看日志获取它。
在日志输出中寻找包含“password”的行,你会看到一串随机生成的密码。复制它,回到登录页面输入。docker compose logs open-webui | grep -i "password" - 登录成功后,系统会强制要求你修改这个随机密码。请设置一个强密码。
5.3 配置模型并测试对话
登录进入主界面后,你可能需要手动添加或确认模型配置。
- 点击界面左下角的设置图标(通常是一个齿轮⚙️)。
- 找到“模型”或“Model Settings”相关选项。
- 你应该能看到我们在
model_config.json中定义的两个模型(DeepSeek Chat 和 DeepSeek Coder)已经出现在可用模型列表中。这是因为 Open WebUI 会自动读取挂载的model_config.json文件。 - 如果模型列表为空,请检查:
docker-compose.yml中volumes挂载路径是否正确。- 容器日志是否有读取配置文件的错误。
- 可以尝试在设置中手动添加模型,填写的信息与
model_config.json一致,API Key 则填入DEEPSEEK_API_KEY环境变量的值(即你的真实密钥)。
- 选择一个模型(如 DeepSeek Chat),然后在主聊天窗口输入一个问题,例如:“用Python写一个快速排序函数。” 点击发送。
- 如果一切配置正确,你应该能很快收到 DeepSeek 模型的流式回复。
恭喜!至此,你的个人AI网站已经搭建成功并可以正常使用了。
6. 实现可注册与可分享
我们的配置已经实现了“可注册”和“可分享”的核心功能。
- 可注册:这由
WEBUI_REGISTRATION=true环境变量控制。任何访问你网站的人,都可以点击“Register”并填写邮箱、用户名、密码来创建自己的账号。创建后,他们可以登录并使用你配置的 DeepSeek 模型。所有用户的对话数据都隔离存储在你服务器的./data目录下。 - 可分享:你只需要将网站的访问地址(
http://你的服务器IP:端口)分享给他人即可。他们无需拥有 DeepSeek API Key,因为你的服务器已经配置了统一的密钥。这意味着你需要管理好你的 API 使用量和成本(虽然DeepSeek目前有免费额度)。
重要提醒:开放注册的安全考量
- 监控使用量:定期检查 DeepSeek 平台控制台,查看 API 调用量和费用情况。
- 设置使用限制:Open WebUI 本身支持一些简单的用户管理和限制功能,你可以在管理员设置中探索。
- 使用强密码:为你自己的管理员账号设置强密码。
- 考虑防火墙:如果仅限内部或特定人群使用,可以在服务器防火墙或云安全组设置中,限制只允许特定IP地址访问
3000端口。
7. 常见问题与排查思路
在部署和使用过程中,你可能会遇到一些问题。下表列出了常见问题及其解决方法。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
访问http://IP:3000无法连接 | 1. 容器未成功启动。 2. 防火墙/安全组未开放端口。 3. 端口被占用。 | 1.docker compose ps查看状态。2. docker compose logs查看错误日志。3. 服务器执行 sudo ufw status或检查云平台安全组。4. netstat -tlnp | grep :3000查看端口占用。 | 1. 根据日志修复配置错误。 2. 开放防火墙端口: sudo ufw allow 3000。3. 修改 docker-compose.yml中的宿主机端口,如- "8080:8080"。 |
| 登录时提示“Invalid email or password” | 1. 管理员邮箱输入错误。 2. 密码错误(首次登录需用日志中的随机密码)。 | 1. 确认WEBUI_ADMIN_EMAIL环境变量值。2. 重新从日志中获取密码: docker compose logs open-webui | grep -i password。 | 使用正确的邮箱和从日志中获取的初始密码登录。 |
| 模型列表为空或无法选择 | 1.model_config.json文件未正确挂载或格式错误。2. 环境变量 DEEPSEEK_API_KEY未生效。3. Open WebUI 未正确读取配置。 | 1. 进入容器检查文件:docker exec -it open-webui cat /app/backend/model_config.json。2. 检查容器内环境变量: docker exec -it open-webui env | grep DEEPSEEK。3. 查看Open WebUI设置界面是否有手动添加模型的选项。 | 1. 确保docker-compose.yml挂载路径正确,且model_config.json格式为合法 JSON。2. 确保 .env文件存在且密钥正确,重启服务:docker compose down && docker compose up -d。3. 尝试在WebUI设置中手动添加模型,填写API Key。 |
| 发送消息后长时间无响应或报错 | 1. API Key 无效或过期。 2. 服务器网络无法访问 api.deepseek.com。3. DeepSeek API 服务暂时故障或达到速率限制。 | 1. 在 DeepSeek 平台验证 API Key 状态。 2. 在服务器上测试网络连通性: curl -v https://api.deepseek.com。3. 查看容器日志获取详细错误: docker compose logs open-webui --tail=50。 | 1. 在 DeepSeek 平台重新生成 Key 并更新.env文件,重启服务。2. 检查服务器DNS和网络出口。 3. 等待一段时间再试,或查看 DeepSeek 官方状态。 |
| 用户注册功能不显示 | WEBUI_REGISTRATION环境变量未设置为true。 | 检查docker-compose.yml中environment部分是否有- WEBUI_REGISTRATION=true。 | 确保配置正确,并重启服务:docker compose restart open-webui。 |
| 数据(对话记录)重启后丢失 | 容器卷(volume)未正确挂载或挂载路径错误。 | 检查宿主机./data目录下是否有文件生成。docker-compose.yml中 volumes 配置是否正确。 | 确保volumes: - ./data:/app/backend/data配置存在且路径无误。数据应持久化在./data目录。 |
8. 最佳实践与进阶配置
为了让你的 AI 网站更稳定、安全、好用,可以考虑以下进阶配置。
8.1 使用 Nginx 反向代理与 HTTPS
直接通过 IP 和端口访问既不美观也不安全。建议使用 Nginx 作为反向代理,并配置 HTTPS(SSL证书)。
安装 Nginx:
sudo apt update && sudo apt install nginx -y配置反向代理:创建一个新的 Nginx 站点配置,例如
/etc/nginx/sites-available/openwebui。sudo nano /etc/nginx/sites-available/openwebui输入以下配置,将
your_domain.com替换为你的域名,3000替换为 Open WebUI 容器映射的宿主机端口。server { listen 80; server_name your_domain.com; # 你的域名 location / { proxy_pass http://localhost:3000; # 指向Open WebUI服务 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }保存并退出。然后创建符号链接启用该配置,并测试 Nginx 配置。
sudo ln -s /etc/nginx/sites-available/openwebui /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置语法 sudo systemctl reload nginx # 重载配置配置 HTTPS(使用 Let‘s Encrypt):这需要你拥有一个域名并正确解析到服务器IP。
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your_domain.com按照 Certbot 的提示操作,即可自动获取并配置 SSL 证书。Nginx 配置会自动更新,将 HTTP 流量重定向到 HTTPS。
8.2 配置系统服务与自动启动
确保 Docker Compose 服务在服务器重启后能自动运行。
创建一个 systemd 服务文件:
sudo nano /etc/systemd/system/openwebui.service添加以下内容(注意修改WorkingDirectory和User):
[Unit] Description=Open WebUI with DeepSeek Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/home/your_username/openwebui-deepseek # 修改为你的项目绝对路径 ExecStart=/usr/bin/docker compose up -d ExecStop=/usr/bin/docker compose down User=your_username # 修改为你的用户名 Group=docker # 确保用户属于docker组 [Install] WantedBy=multi-user.target保存后,启用并启动该服务:
sudo systemctl daemon-reload sudo systemctl enable openwebui.service sudo systemctl start openwebui.service8.3 模型配置进阶
你可以在model_config.json中定义更多模型或调整参数。
- 添加更多模型:参考 DeepSeek API 文档,添加其他可用模型(如
deepseek-reasoner)。 - 调整参数:根据需求调整
temperature、max_tokens等,以控制回复的创造性和长度。 - 设置模型默认参数:在 Open WebUI 的 Web 界面中,每个模型都可以设置用户级的默认参数,这比修改配置文件更灵活。
8.4 备份与恢复
你的核心数据在./data目录。定期备份这个目录即可。
# 简单备份示例(假设在项目上级目录操作) tar -czf openwebui-backup-$(date +%Y%m%d).tar.gz openwebui-deepseek/data/恢复时,只需将备份文件解压到相同路径,然后重启服务。
9. 总结与后续探索方向
通过本文的步骤,你已经成功搭建了一个私有化、可定制、支持多用户的 AI 对话网站。这个方案的优势在于快速部署、成本可控和数据自主。它非常适合个人学习、小型团队协作或作为特定场景下的AI工具入口。
回顾整个流程,几个关键点决定了部署的成败:正确的 Docker Compose 配置、安全的 API Key 管理、模型配置文件的正确挂载,以及网络端口的通畅。
后续你可以继续探索的方向:
- 接入更多模型:Open WebUI 支持同时配置多个后端。你可以除了 DeepSeek,还可以接入 OpenAI GPT、Anthropic Claude(如果拥有API)、或本地部署的 Ollama 模型,让用户在一个界面中自由切换。
- 权限精细化管理:研究 Open WebUI 的用户组、角色和模型访问权限设置,实现不同用户只能使用特定模型或拥有不同的使用配额。
- 界面深度定制:Open WebUI 支持自定义主题、Logo 和文案,你可以将其打造成完全属于自己品牌的产品界面。
- 集成与扩展:探索 Open WebUI 的插件系统或 API,考虑将其与你现有的知识库、工作流系统进行集成。
这个由 Open WebUI 和 DeepSeek 构建的“迷你AI平台”,为你打开了一扇门。它证明,拥有一个功能完备的AI应用,不再是大公司的专利。随着开源模型和工具的日益成熟,每个开发者都有能力成为AI价值的创造者和传递者。现在,你的网站已经上线,下一步就是思考如何用它去解决真实世界的问题了。
