当前,人工智能领域发展迅速,各类应用层出不穷。其中,开源项目Open-WebUI因其提供了调用大模型的灵活平台而备受关注。开发者可以基于Open-WebUI进行定制化改造,以满足特定应用场景的需求。然而,尽管Open-WebUI功能强大且灵活,目前网络上却缺乏关于如何在本地环境中进行调试启动,特别是使用MySQL作为数据源的相关文档和教程。这给那些希望深入了解并优化其本地部署方案的开发者带来了挑战。
针对这一现状,在实际项目落地过程中,我尝试整理了一份详细的本地调试与启动指南,特别涵盖了以MySQL为数据源的配置过程。这份指南旨在填补现有资料的空白,为有类似需求的开发者提供参考和支持。通过这份指南,开发者可以更方便地在本地环境中对Open-WebUI进行调试和定制化修改,从而更好地利用这个强大的工具来实现自己的项目目标。
一、open-webui Python 环境配置
确保您的Python版本符合以下要求:
- Python 版本:
>=3.10,<3.13
二、安装 Python 依赖
1、以管理员身份启动 Anaconda Prompt
为了确保权限足够,建议以管理员身份启动 Anaconda Prompt。
2、切换到open-webui运行环境,并安装依赖
(base) D:\>conda activate open-webui
(open-webui) D:\>cd D:\WorkSpace\ForAi\pythod\open-webui\backend
(open-webui) D:\WorkSpace\ForAi\pythod\open-webui\backend>pip install -r requirements.txt
三、前端启动
1、前端项目build
我使用的nodejs版本是 20.15.0 如果你本地有多个nodejs版本可以使用nvm管理切换
# 进入目录根目录
D:\WorkSpace\ForAi\pythod\open-webui
# 安装前端依赖
npm install
# build项目
npm run build
四、数据库改为mysql
1、配置环境变量
DATABASE_URL=mysql+pymysql://账号:密码@127.0.0.1:3306/open-webui
2、修改源码支持mysql
修改文件db.py
修改handle_peewee_migration函数支持mysql
from peewee import MySQLDatabase
from peewee_migrate import Router
from urllib.parse import urlparse
def handle_peewee_migration(database_url):
try:
# Parse the database URL
parsed_url = urlparse(database_url)
if parsed_url.scheme == "mysql+pymysql":
db = MySQLDatabase(
parsed_url.path.lstrip('/'),
user=parsed_url.username,
password=parsed_url.password,
host=parsed_url.hostname,
port=parsed_url.port or 3306,
charset='utf8mb4'
)
else:
# For other databases, use the existing logic
db = register_connection(database_url.replace("postgresql://", "postgres://"))
migrate_dir = OPEN_WEBUI_DIR / "internal" / "migrations"
router = Router(db, logger=log, migrate_dir=migrate_dir)
router.run()
db.close()
except Exception as e:
log.error(f"Failed to initialize the database connection: {e}")
raise
finally:
if 'db' in locals() and db and not db.is_closed():
db.close()
if 'db' in locals():
assert db.is_closed(), "Database connection is still open."
由于open-webui不支持mysql,源代码支持的是sqlite,postgresql,其中有方法需要改为mysql支持的方法,目前找到了一个文件
groups.py
def get_groups_by_member_id(self, user_id: str) -> list[GroupModel]:
with get_db() as db:
return [
GroupModel.model_validate(group)
for group in db.query(Group)
.filter(
# 原代码为func.json_array_length(Group.user_ids) > 0
func.JSON_LENGTH(Group.user_ids) > 0
) # Ensure array exists
.filter(
Group.user_ids.cast(String).like(f'%"{user_id}"%')
) # String-based check
.order_by(Group.updated_at.desc())
.all()
]
3、mysql数据库
通过网盘分享的文件:open-webui.sql
链接: https://pan.baidu.com/s/1_gofAFb6tsd10dLQOTXnvA?pwd=k1fi 提取码: k1fi
五、IDEA DEBUG模式启动 项目
1、项目导入时代码报错找不到open_webui
解决办法:
强制标记源码根目录
2、自建启动文件
open-webui默认启动文件为start_windows.bat,这种方式启动,不能DEBUG,十分不方便
解决办法:
在open-webui/backend/open_webui创建启动文件start_run.py
import uvicorn
from open_webui.main import app
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8080)