保姆级教程:群晖NAS搭建SillyTavern酒馆(SillyTavern+Gemini)
用群晖NAS搭建你自己的AI聊天酒馆(Gemini Balance、GCLI2API)
大家好,我是浅栖之地。今天给大家带来一篇硬核又好玩的教程,教你如何利用家里的群晖NAS,搭建一个完全私人的AI聊天应用——SillyTavern(俗称“酒馆”),并且接入强大的Google Gemini模型。
本教程将提供两种接入Gemini的方案,你可以根据自己的情况二选一。最终实现一个7x24小时在线、响应迅速、完全由你掌控的AI伙伴。
话不多说,让我们开始吧!
一、准备工作
在开始之前,请确保你已经准备好以下几样东西:
公网IP:虽然不是必须,但有了公网IP,你就可以随时随地访问你的AI酒馆。可以联系你的网络运营商获取。
域名:配合公网IP使用,方便记忆和访问。群晖自带的DDNS功能或者自己购买一个都可以。
Gemini API 密钥或有权限的谷歌账号:根据你选择的方案,需要准备对应的凭证。
魔法上网工具:由于需要访问Google的服务,一个稳定可靠的“梯子”是必不可少的。
一台安装了Docker的群晖NAS:本教程所有操作都基于Docker完成,请确保你的群晖已经安装并启动了Docker套件。
二、方案一:使用 Gemini Balance 搭建API反代
优点:可以统一管理多个Gemini API密钥,实现负载均衡,并提供一个标准的OpenAI格式接口,兼容性好。
参考资料:
步骤1:准备 .env 配置文件
从Gemini Balance的官方GitHub下载 env.example 文件,并将其重命名为 .env。
用文本编辑器打开 .env 文件,进行如下修改:
数据库:群晖自带 sqlite,所以我们把 DATABASE_TYPE 改为 sqlite,然后把所有 MYSQL 相关的行前面加上 # 注释掉。
API密钥:在 API_KEYS 中填入你自己的Gemini API密钥。
登录令牌:自定义 ALLOWED_TOKENS 和 AUTH_TOKEN。这个令牌既是登录后台的密码,也是后续提供给SillyTavern的API Key。
下面是一个配置示例:
# 数据库配置 DATABASE_TYPE=sqlite SQLITE_DATABASE=default_db #MYSQL_HOST=gemini-balance-mysql #MYSQL_SOCKET=/run/mysqld/mysqld.sock #MYSQL_PORT=3306 #MYSQL_USER=gemini #MYSQL_PASSWORD=change_me #MYSQL_DATABASE=default_db # 你的 Gemini API 密钥列表 API_KEYS=["AIzaSyxxxxxxxxxxxxxxxxxxx","AIzaSyxxxxxxxxxxxxxxxxxxx"] # 你的登录令牌 ALLOWED_TOKENS=["sk-123456"] AUTH_TOKEN=sk-123456

步骤2:准备文件夹及权限
在群晖的 File Station 中,进入 docker 共享文件夹,创建一个名为 GeminiBalance 的新文件夹。
进入 GeminiBalance 文件夹,在里面再创建一个 data 文件夹。
将上一步编辑好的 .env 文件上传到 GeminiBalance 文件夹中。
完成后的文件夹结构应如下图所示:

返回 docker 文件夹,右键点击 GeminiBalance 文件夹,选择 属性 -> 权限。
为 Everyone 用户组勾选“读取”和“写入”权限,确保Docker容器有权限访问这个文件夹。

步骤3:部署 Docker 容器
使用SSH工具(Windows推荐 FinalShell);macOS可直接使用终端.app 登录到你的群晖NAS。
ssh root@你的群晖IP
输入你的 root 用户密码。
复制下面的Docker运行命令。注意: 一定要将命令中的路径 /volume1/docker/GeminiBalance/... 替换为你自己群晖上的实际路径!
sudo docker run -d -p 8000:8000 --name gemini-balance --env-file /volume1/docker/GeminiBalance/.env -v /volume1/docker/GeminiBalance/data:/app/data --restart unless-stopped ghcr.io/snailyp/gemini-balance:latest

在SSH终端中执行该命令。成功后,回到群晖的Docker套件,你应该能看到一个名为 gemini-balance 的容器正在运行。

步骤4:配置并获取反代信息
在浏览器中访问 http://你的群晖IP:8000,输入你在 .env 文件中设置的 AUTH_TOKEN(例如 sk-123456)进行登录。

登录后,拉到页面最下方,找到 代理设置,输入你的魔法上网代理地址(例如 http://:),然后点击 保存配置。

在群晖 控制面板 -> 外部访问 -> 路由器配置 中,为 gemini-balance 容器的 8000 端口设置一个公网端口转发。

4. 记下你的反代信息,这是我们方案一的成果:
公网 URL: http://你的域名:你映射的公网端口/v1
API 密钥: sk-123456 (就是你在 .env 中设置的 AUTH_TOKEN)
三、方案二:使用 GCLI2API 搭建API服务
优点:无需申请Gemini API密钥,直接通过登录你的Google账号来获取调用权限。
参考资料:
步骤1:准备 docker-compose.yml 文件
在群晖 docker 文件夹中创建一个 gcli2api 文件夹。
在 gcli2api 文件夹中,创建一个名为 docker-compose.yml 的文件,将以下内容复制进去。你可以修改 PASSWORD=pwd 中的 pwd 为你自己的登录密码。
version: '3.8' services: gcli2api: image: ghcr.io/cetaceang/gcli2api:latest container_name: gcli2api restart: unless-stopped network_mode: host environment: # 设置登录密码 - PASSWORD=pwd ports: - "7861:7861" volumes: - ./data/creds:/app/creds healthcheck: test: ["CMD-SHELL", "python -c "import sys, urllib.request, os; port = os.environ.get('PORT', '7861'); req = urllib.request.Request(f'http://localhost:{port}/v1/models', headers={'Authorization': 'Bearer ' + os.environ.get('PASSWORD', 'pwd')}); sys.exit(0 if urllib.request.urlopen(req, timeout=5).getcode() == 200 else 1)""] interval: 30s timeout: 10s retries: 3 start_period: 40s
同样,记得为 gcli2api 文件夹分配 Everyone 的读写权限。
步骤2:部署 Docker 容器
打开群晖 Docker 套件,切换到 项目 标签页,点击 新增。
项目名称 填写 gcli2api,路径 选择 gcli2api 文件夹,来源 选择 docker-compose.yml。
点击 下一步,确认信息后点击 构建。

步骤3:配置并获取API信息
在浏览器访问 http://你的群晖IP:7861,输入你在 docker-compose.yml 中设置的 PASSWORD 登录。

点击 获取认证链接,复制生成的 URL,在新标签页中打开并登录你的 Google 账号。
注意:如果页面提示错误且地址栏中的域名是 localhost,请手动将其替换为你的 群晖IP 后再访问。
授权成功后,返回 GCLI2API 页面,点击 获取认证文件。稍等片刻,页面上会显示已加载的凭证信息。

4. 记下你的API信息,这是我们方案二的成果:
API URL: http://你的群晖IP:7861/v1 (如果配置了公网,建议用公网地址)
API 密钥: pwd (就是你在 docker-compose.yml 中设置的 PASSWORD)
四、搭建 SillyTavern(酒馆本体)
现在我们有了API接口,是时候搭建酒馆本体了。
参考资料:
步骤1:部署 Docker 容器
从 SillyTavern 的 GitHub 仓库下载 docker-compose.yml 文件。
用文本编辑器打开它,将 ports 部分的 - "8000:8000" 修改为 - "8001:8000"。这是为了避免与我们方案一的 8000 端口冲突。

在群晖 docker 目录下创建一个 SillyTavern 文件夹,并将修改后的 docker-compose.yml 文件放进去。同样,记得给这个文件夹分配 Everyone 的读写权限。

参照方案二的部署方法,在 Docker 的 项目 中,使用这个 docker-compose.yml 创建并启动 SillyTavern 项目。
部署成功后,你就可以通过 http://你的群晖IP:8001 在内网访问你的酒馆了。
步骤2:连接 API 后端
打开你的 SillyTavern 界面,点击右上角的 API 连接设置 图标(像一个插头)。
在 AI 模型 的下拉菜单中选择 OpenAI。
将你选择的方案所获取到的信息填入相应位置:
如果你使用方案一 (Gemini Balance):
OpenAI API Base URL: http://你的域名:映射端口/v1
OpenAI API Key: sk-123456 (你在 .env 中设置的 AUTH_TOKEN)
如果你使用方案二 (GCLI2API):
OpenAI API Base URL: http://你的群晖IP:7861/v1
OpenAI API Key: pwd (你在 docker-compose.yml 中设置的 PASSWORD)
在 OpenAI 模型 列表中,选择或手动填入你想使用的模型名称(例如 gemini-pro)。
点击 连接 按钮进行测试,如果右侧显示一个绿色的对勾,那么恭喜你,大功告成!

五、总结
到这里,你就拥有了一个完全由自己掌控、基于强大Gemini模型的AI聊天机器人了!你可以在SillyTavern里创建角色、导入人物卡,开启各种有趣的对话。整个过程虽然步骤稍多,但跟着教程一步步来,还是很容易实现的。
希望这篇教程对你有帮助!如果你喜欢这篇文章,别忘了点赞、收藏、评论三连哦!我们下次再见!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
