- SQLite 纯 Go 驱动(modernc.org/sqlite),支持 CGO_ENABLED=0 跨平台编译

- 优化并发性能(WAL 模式),解决 "database is locked" 错误
- Docker 跨平台支持 `host.docker.internal` 访问宿主机服务
- 精简文档和部署指南
This commit is contained in:
Connor
2026-01-16 10:30:59 +08:00
parent edba3388fb
commit 249ba3d4aa
7 changed files with 203 additions and 261 deletions

256
README.md
View File

@@ -230,25 +230,10 @@ go run main.go
### 🐳 Docker 部署(推荐)
使用 Docker 部署是最简单快捷的方式,已内置默认配置,开箱即用。
#### 快速体验(推荐新手)
#### 方式一Docker Compose推荐
```bash
# 从 Docker Hub 拉取并运行
docker run -d \
--name huobao-drama \
-p 5678:5678 \
--restart unless-stopped \
huobao/huobao-drama:latest
```
访问: `http://localhost:5678` 即可开始使用!
#### 方式一:使用 Docker Compose
```bash
# 启动服务(使用内置配置)
# 启动服务
docker-compose up -d
# 查看日志
@@ -258,66 +243,27 @@ docker-compose logs -f
docker-compose down
```
**自定义配置**(可选):
```bash
# 1. 取消 docker-compose.yml 中配置文件挂载的注释
# 2. 复制并修改配置文件
cp configs/config.example.yaml configs/config.yaml
vim configs/config.yaml
# 3. 重启服务
docker-compose up -d
```
#### 方式二:使用 Docker 命令
**基础启动**(使用内置配置):
#### 方式二Docker 命令
> **注意**Linux 用户需添加 `--add-host=host.docker.internal:host-gateway` 以访问宿主机服务
```bash
# 从 Docker Hub 运行
docker run -d \
--name huobao-drama \
-p 5678:5678 \
-v $(pwd)/data:/app/data \
--restart unless-stopped \
huobao/huobao-drama:latest
```
**自定义配置启动**
```bash
# 挂载自定义配置文件
docker run -d \
--name huobao-drama \
-p 5678:5678 \
-v $(pwd)/data:/app/data \
-v $(pwd)/configs/config.yaml:/app/configs/config.yaml:ro \
--restart unless-stopped \
huobao/huobao-drama:latest
```
**查看日志**
```bash
# 查看日志
docker logs -f huobao-drama
```
#### 方式三:本地构建镜像
**本地构建**(可选):
```bash
# 1. 构建镜像
docker build -t huobao-drama:latest .
# 2. 运行容器
docker run -d \
--name huobao-drama \
-p 5678:5678 \
-v $(pwd)/data:/app/data \
--restart unless-stopped \
huobao-drama:latest
```
#### 镜像仓库
**Docker Hub**(国际):
```bash
docker pull huobao/huobao-drama:latest
docker run -d --name huobao-drama -p 5678:5678 -v $(pwd)/data:/app/data huobao-drama:latest
```
**Docker 部署优势:**
@@ -328,24 +274,21 @@ docker pull huobao/huobao-drama:latest
- ✅ 自动健康检查和重启
- ✅ 自动处理文件权限,无需手动配置
**📝 数据持久化说明:**
#### 🔗 访问宿主机服务Ollama/本地模型)
Docker 部署使用命名卷 `huobao-data` 存储数据库和上传文件:
- 数据会自动持久化,重启容器不会丢失
- 容器内 `app` 用户自动拥有完整读写权限
- 无需担心传统部署中的权限问题
容器已配置支持访问宿主机服务,直接使用 `http://host.docker.internal:端口号` 即可。
如需备份数据:
```bash
# 查看卷位置
docker volume inspect huobao-drama_huobao-data
**配置步骤:**
# 备份数据
docker run --rm -v huobao-drama_huobao-data:/data -v $(pwd):/backup alpine tar czf /backup/huobao-data-backup.tar.gz -C /data .
1. **宿主机启动服务(监听所有接口)**
```bash
export OLLAMA_HOST=0.0.0.0:11434 && ollama serve
```
# 恢复数据
docker run --rm -v huobao-drama_huobao-data:/data -v $(pwd):/backup alpine tar xzf /backup/huobao-data-backup.tar.gz -C /data
```
2. **前端 AI 服务配置**
- Base URL: `http://host.docker.internal:11434/v1`
- Provider: `openai`
- Model: `qwen2.5:latest`
---
@@ -491,130 +434,6 @@ server {
---
## 🔧 开发指南
### 添加新功能
#### 1. 添加API接口
```bash
# 创建Handler
vim api/handlers/your_handler.go
# 注册路由
vim api/routes/routes.go
```
示例:
```go
// api/handlers/your_handler.go
func (h *YourHandler) YourMethod(c *gin.Context) {
// 处理逻辑
response.Success(c, data)
}
// api/routes/routes.go
your := api.Group("/your")
{
your.GET("", yourHandler.List)
your.POST("", yourHandler.Create)
}
```
#### 2. 添加业务服务
```go
// application/services/your_service.go
type YourService struct {
db *gorm.DB
log *logger.Logger
}
func NewYourService(db *gorm.DB, log *logger.Logger) *YourService {
return &YourService{db: db, log: log}
}
func (s *YourService) YourMethod() error {
// 业务逻辑
return nil
}
```
#### 3. 添加前端页面
```bash
# 创建页面组件
vim web/src/views/YourPage.vue
# 注册路由
vim web/src/router/index.ts
# 添加API调用
vim web/src/api/your-api.ts
```
### 调试技巧
**后端调试:**
```bash
# 启用详细日志
export LOG_LEVEL=debug
go run main.go
# 使用dlv调试器
dlv debug main.go
```
**前端调试:**
```bash
cd web
npm run dev
# 打开浏览器 DevTools
```
**数据库查询:**
```bash
sqlite3 data/drama_generator.db
.tables
.schema dramas
SELECT * FROM dramas;
```
---
## 🛠️ 常用命令
```bash
# 开发模式
go run main.go # 启动后端服务
cd web && npm run dev # 启动前端开发服务器
# 编译构建
cd web && npm run build && cd .. # 构建前端
go build -o huobao-drama . # 编译后端
# 依赖管理
go mod download # 下载Go依赖
go mod tidy # 清理Go依赖
cd web && npm install && cd .. # 安装前端依赖
# 代码检查
go fmt ./... # 格式化代码
go vet ./... # 代码检查
cd web && npm run lint && cd .. # 前端代码检查
# 清理
go clean # 清理Go构建缓存
rm -rf web/dist # 清理前端构建产物
rm -f huobao-drama # 删除可执行文件
# 测试
go test ./... # 运行Go测试
cd web && npm run test && cd .. # 运行前端测试
```
---
## 🎨 技术栈
### 后端技术
@@ -624,7 +443,7 @@ cd web && npm run test && cd .. # 运行前端测试
- **数据库**: SQLite
- **日志**: Zap
- **视频处理**: FFmpeg
- **AI服务**: 豆包 Doubao API
- **AI服务**: OpenAI、Gemini、火山等
### 前端技术
- **框架**: Vue 3.4+
@@ -644,6 +463,13 @@ cd web && npm run test && cd .. # 运行前端测试
## 📝 常见问题
### Q: Docker 容器如何访问宿主机的 Ollama
A: 使用 `http://host.docker.internal:11434/v1` 作为 Base URL。注意两点
1. 宿主机 Ollama 需监听 `0.0.0.0``export OLLAMA_HOST=0.0.0.0:11434 && ollama serve`
2. Linux 用户使用 `docker run` 需添加:`--add-host=host.docker.internal:host-gateway`
详见:[DOCKER_HOST_ACCESS.md](docs/DOCKER_HOST_ACCESS.md)
### Q: FFmpeg未安装或找不到
A: 确保FFmpeg已安装并在PATH环境变量中。运行 `ffmpeg -version` 验证。
@@ -657,20 +483,20 @@ A: GORM会在首次启动时自动创建表检查日志确认迁移是否成
## <20> 更新日志 / Changelog
### v1.0.2 (2026-01-16)
#### 🚀 重大更新
- SQLite 纯 Go 驱动(`modernc.org/sqlite`),支持 `CGO_ENABLED=0` 跨平台编译
- 优化并发性能WAL 模式),解决 "database is locked" 错误
- Docker 跨平台支持 `host.docker.internal` 访问宿主机服务
- 精简文档和部署指南
### v1.0.1 (2026-01-14)
#### 🐛 Bug Fixes / 问题修复
- 修复 视频生成 API 响应解析问题
- 修复视频生成客户端选择逻辑
#### ✨ Features / 新增功能
- 添加 OpenAI Sora 视频端点配置(/videos 和 /videos/{taskId}
- 优化错误处理,支持 JSON 对象和字符串格式的错误响应
#### 🔧 Improvements / 改进
- 完善视频生成服务的 provider 识别
- 优化客户端请求格式(支持 Sora/Doubao 模型)
- 改进日志输出,便于调试
#### 🐛 Bug Fixes / 🔧 Improvements
- 修复视频生成 API 响应解析问题
- 添加 OpenAI Sora 视频端点配置
- 优化错误处理和日志输出
---