moodist/docker-database-mount.md
walle a3c95ec19b feat: 升级到 v3.0.0 - 独立音乐播放系统与 Docker 数据持久化
🎉 版本升级: 2.5.0 → 3.0.0

🎵 音乐播放系统重构:
- 独立的音乐播放系统,不影响当前选中声音
- 修复 React Hooks 调用错误
- 使用直接 Howl API 实现音频控制
- 添加播放/停止状态视觉反馈
- 组件显示逻辑完全分离

🐳 Docker 部署优化:
- 所有 compose 文件添加 SQLite 数据库挂载
- 支持 WAL 模式和并发写入
- 数据持久化,容器重启不丢失数据
- 创建详细的 Docker 数据库挂载文档

🎨 UI/UX 改进:
- 修复当前选中声音与音乐列表显示互斥问题
- 播放按钮状态动态显示
- 组件模块完全独立展示

🗄️ 数据库性能优化:
- 启用 WAL 模式提高并发性能
- 优化 SQLite 配置参数
- 添加详细日志和错误处理

📦 新增文件:
- docker-database-mount.md: Docker 数据库挂载说明文档
2025-11-19 15:21:49 +08:00

2.4 KiB

Docker 数据库挂载说明

概述

本项目已配置 SQLite 数据库文件挂载,确保数据在容器重启后不会丢失。

数据库文件位置

SQLite 数据库文件位于项目的 ./data 目录中:

  • ./data/users.db - 主数据库文件
  • ./data/users.db-wal - Write-Ahead Log 文件
  • ./data/users.db-shm - 共享内存文件

Docker Compose 配置

1. 基础配置 (docker-compose.yml)

services:
  moodist:
    volumes:
      # 挂载 SQLite 数据库文件和 WAL 文件
      - ./data:/app/data:rw
    environment:
      - NODE_ENV=production

2. 优化配置 (docker-compose.optimized.yml)

services:
  moodist:
    volumes:
      # 挂载 SQLite 数据库文件目录(需要读写权限)
      - ./data:/app/data:rw
      # 挂载临时目录用于 SQLite WAL 文件
      - moodist-temp:/tmp:rw

volumes:
  moodist-temp:
    driver: local

3. 开发配置 (docker-compose.dev.yml)

services:
  moodist-dev:
    volumes:
      # 挂载 SQLite 数据库文件目录
      - ./data:/app/data:rw

使用方法

启动服务

# 生产环境
docker-compose up -d

# 优化环境
docker-compose -f docker-compose.optimized.yml up -d

# 开发环境
docker-compose -f docker-compose.dev.yml up -d

数据持久化

  • 数据库文件会自动创建在 ./data 目录中
  • 容器重启或重新创建后数据不会丢失
  • 支持数据库备份和迁移

备份数据库

# 备份数据库
cp ./data/users.db ./data/users.db.backup.$(date +%Y%m%d_%H%M%S)

# 查看数据库文件
ls -la ./data/

注意事项

  1. 权限问题: 确保 ./data 目录有正确的读写权限
  2. WAL 模式: SQLite 使用 WAL (Write-Ahead Logging) 模式,会产生额外的 WAL 和 SHM 文件
  3. 并发访问: Docker 挂载确保文件系统的一致性
  4. 备份策略: 建议定期备份数据库文件

故障排除

数据库锁定问题

如果遇到数据库锁定错误:

  1. 停止容器:docker-compose down
  2. 删除 WAL 文件:rm ./data/users.db-wal ./data/users.db-shm
  3. 重新启动容器:docker-compose up -d

权限问题

如果遇到权限错误:

# 设置正确的目录权限
sudo chown -R 1000:1000 ./data
chmod 755 ./data

开发环境注意事项

开发环境中,数据库文件会被实时同步到本地文件系统,便于:

  • 调试和测试
  • 数据分析
  • 快速重置测试数据