10分钟搭建个人有声书服务器:Audiobookshelf Docker Compose数据库联动实战
10分钟搭建个人有声书服务器:Audiobookshelf Docker Compose数据库联动实战
【免费下载链接】audiobookshelf Self-hosted audiobook and podcast server 项目地址: https://gitcode.com/gh_mirrors/au/audiobookshelf
还在为有声书管理混乱而烦恼?本文将通过Docker Compose实现Audiobookshelf与数据库的无缝联动,帮助你快速搭建专业级个人有声书服务器。完成后你将获得:多设备同步的播放进度、自动化媒体库管理、跨平台音频流服务,以及完整的数据持久化方案。
项目概述
Audiobookshelf是一款开源的自托管有声书和播客服务器,支持全格式音频流、多用户权限管理、进度同步和自动化备份。其核心优势在于通过文件系统监控实现媒体库自动更新,无需手动扫描,并提供章节编辑、元数据嵌入等专业功能。
官方文档:docs/
项目教程:README.md
核心功能模块:server/controllers/

基础Docker Compose配置解析
项目根目录下的docker-compose.yml提供了基础部署模板,默认使用内置SQLite数据库。关键配置项说明:
services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
ports:
- 13378:80 # 左侧可修改宿主机端口
volumes:
- ./audiobooks:/audiobooks # 有声书存储目录
- ./podcasts:/podcasts # 播客存储目录
- ./metadata:/metadata # 元数据缓存目录
- ./config:/config # 配置文件目录
restart: unless-stopped
# user: 1000:1000 # 取消注释并修改为宿主机用户ID:组ID
目录映射说明
| 宿主机路径 | 容器路径 | 作用 | 建议 |
|---|---|---|---|
| ./audiobooks | /audiobooks | 有声书存储 | 使用独立分区或外部存储 |
| ./metadata | /metadata | 封面和元数据缓存 | SSD存储提升加载速度 |
| ./config | /config | 配置和数据库文件 | 定期备份该目录 |
数据库联动方案
SQLite默认配置
内置SQLite数据库适用于个人使用,数据文件位于./config/db.sqlite。优势是零配置,但在多用户高并发场景下可能存在性能瓶颈。数据库管理模块:server/Database.js
MySQL/MariaDB联动配置
对于多用户场景,推荐使用外部MySQL数据库。修改docker-compose.yml添加数据库服务:
services:
audiobookshelf:
# ... 原有配置 ...
environment:
- DB_TYPE=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_USER=absuser
- DB_PASS=abspassword
- DB_NAME=audiobookshelf
depends_on:
- db
db:
image: mariadb:10.11
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=audiobookshelf
- MYSQL_USER=absuser
- MYSQL_PASSWORD=abspassword
volumes:
- ./mysql-data:/var/lib/mysql
restart: unless-stopped
数据库迁移脚本:server/migrations/
数据库模型定义:server/models/
PostgreSQL配置方案
如需使用PostgreSQL,替换数据库服务配置:
db:
image: postgres:15-alpine
environment:
- POSTGRES_DB=audiobookshelf
- POSTGRES_USER=absuser
- POSTGRES_PASSWORD=abspassword
volumes:
- ./pg-data:/var/lib/postgresql/data
restart: unless-stopped
高级部署优化
性能调优参数
在服务定义中添加环境变量优化性能:
environment:
- NODE_ENV=production
- CACHE_SIZE=200 # MB,元数据缓存大小
- SCAN_INTERVAL=300 # 秒,文件系统扫描间隔
缓存管理模块:server/managers/CacheManager.js
文件系统监控:server/Watcher.js
反向代理配置
为实现HTTPS访问和端口统一,推荐使用Nginx反向代理。示例配置:
server {
listen 443 ssl;
server_name audio.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:13378;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
详细反向代理指南:README.md
数据备份策略
自动化备份配置
通过添加备份服务实现数据库定期备份:
services:
# ... 主服务配置 ...
backup:
image: alpine:latest
volumes:
- ./config:/backup/config
- ./backups:/backups
command: sh -c 'tar -czf /backups/abs-$$(date +%Y%m%d).tar.gz /backup/config'
depends_on:
- audiobookshelf
备份管理模块:server/managers/BackupManager.js
备份恢复流程
- 停止服务:
docker-compose down - 恢复配置目录:
tar -xzf backups/abs-xxxxxx.tar.gz -C ./ - 启动服务:
docker-compose up -d
常见问题解决
权限问题
当媒体文件无法访问时,需确保宿主机目录权限正确:
chown -R 1000:1000 ./audiobooks ./podcasts ./metadata ./config
数据库连接失败
检查数据库服务状态:docker-compose logs db
验证数据库环境变量是否正确配置
数据库连接代码:server/Database.js
媒体库扫描问题
确认目录结构符合规范,推荐格式:
作者名/书名/章节文件.mp3
媒体扫描模块:server/scanner/
部署验证与使用
启动服务后访问http://localhost:13378,使用默认管理员账户登录(首次访问会提示创建)。通过pages/library/页面添加媒体库目录,系统将自动扫描并导入有声书。
核心功能演示:
- 多设备同步:通过server/models/PlaybackSession.js实现
- 元数据获取:server/providers/包含多种元数据提供商
- 音频转码:server/utils/ffmpegHelpers.js
总结与进阶
本文介绍的Docker Compose配置已能满足大多数个人用户需求。进阶方向包括:
- 集成LDAP认证:server/auth/
- 实现CDN加速:修改Nginx配置添加缓存策略
- 自动化媒体获取:结合RSS订阅功能server/controllers/RSSFeedController.js
项目持续活跃开发,定期更新可获得新功能和安全修复:
docker-compose pull
docker-compose up -d
通过这套部署方案,你已拥有专业级的个人有声书服务,享受随时随地的沉浸式聆听体验。
欢迎在项目仓库提交Issue或PR参与贡献:https://gitcode.com/gh_mirrors/au/audiobookshelf
【免费下载链接】audiobookshelf Self-hosted audiobook and podcast server 项目地址: https://gitcode.com/gh_mirrors/au/audiobookshelf









