mxivideo/README-postgres.md

227 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PostgreSQL Docker Compose 配置
这个配置提供了一个完整的 PostgreSQL 开发环境,包括数据库服务和可选的管理界面。
## 🚀 快速启动
### 1. 启动服务
```bash
# 启动 PostgreSQL 服务
docker-compose up -d postgres
# 或者启动所有服务(包括 pgAdmin
docker-compose up -d
```
### 2. 停止服务
```bash
# 停止所有服务
docker-compose down
# 停止并删除数据卷(⚠️ 会删除所有数据)
docker-compose down -v
```
## 📋 服务配置
### PostgreSQL 数据库
- **镜像**: `postgres:15-alpine`
- **容器名**: `mixvideo_postgres`
- **端口**: `5432:5432`
- **数据库名**: `mixvideo`
- **用户名**: `mixvideo_user`
- **密码**: `mixvideo_password`
### pgAdmin 管理界面(可选)
- **镜像**: `dpage/pgadmin4:latest`
- **容器名**: `mixvideo_pgadmin`
- **端口**: `8080:80`
- **访问地址**: http://localhost:8080
- **邮箱**: `admin@mixvideo.com`
- **密码**: `admin123`
## 🔧 连接配置
### 应用程序连接
```python
# Python 连接示例
DATABASE_CONFIG = {
'host': 'localhost',
'port': 5432,
'database': 'mixvideo',
'user': 'mixvideo_user',
'password': 'mixvideo_password'
}
```
```javascript
// Node.js 连接示例
const connectionString = 'postgresql://mixvideo_user:mixvideo_password@localhost:5432/mixvideo'
```
### 命令行连接
```bash
# 使用 psql 连接
psql -h localhost -p 5432 -U mixvideo_user -d mixvideo
# 或者进入容器内部
docker exec -it mixvideo_postgres psql -U mixvideo_user -d mixvideo
```
## 📁 目录结构
```
.
├── docker-compose.yaml # Docker Compose 配置文件
├── init-scripts/ # 数据库初始化脚本目录
│ └── 01-init-database.sql # 初始化脚本
└── README-postgres.md # 使用说明
```
## 🗄️ 数据库结构
初始化脚本会自动创建以下表:
### 1. users用户表
- `id` - 用户ID (UUID)
- `username` - 用户名
- `email` - 邮箱
- `password_hash` - 密码哈希
- `access_token` - 访问令牌
- `token_expires_at` - 令牌过期时间
- `created_at` - 创建时间
- `updated_at` - 更新时间
- `is_active` - 是否激活
### 2. templates模板表
- `id` - 模板ID (UUID)
- `name` - 模板名称
- `description` - 模板描述
- `thumbnail_path` - 缩略图路径
- `draft_content_path` - 草稿内容路径
- `resources_path` - 资源路径
- `canvas_config` - 画布配置 (JSONB)
- `duration` - 时长
- `material_count` - 素材数量
- `track_count` - 轨道数量
- `tags` - 标签数组
- `is_cloud` - 是否云端
- `user_id` - 用户ID
- `draft_content` - 草稿内容 (JSONB)
- `created_at` - 创建时间
- `updated_at` - 更新时间
### 3. resource_categories资源分类表
- `id` - 分类ID (UUID)
- `title` - 分类标题
- `ai_prompt` - AI 提示词
- `color` - 分类颜色
- `is_active` - 是否激活
- `is_cloud` - 是否云端
- `user_id` - 用户ID
- `created_at` - 创建时间
- `updated_at` - 更新时间
### 4. projects项目表
- `id` - 项目ID (UUID)
- `name` - 项目名称
- `description` - 项目描述
- `project_directory` - 项目目录
- `thumbnail_path` - 缩略图路径
- `canvas_config` - 画布配置 (JSONB)
- `user_id` - 用户ID
- `created_at` - 创建时间
- `updated_at` - 更新时间
## 🔍 常用操作
### 查看服务状态
```bash
# 查看运行中的容器
docker-compose ps
# 查看服务日志
docker-compose logs postgres
docker-compose logs pgadmin
```
### 数据库操作
```bash
# 备份数据库
docker exec mixvideo_postgres pg_dump -U mixvideo_user mixvideo > backup.sql
# 恢复数据库
docker exec -i mixvideo_postgres psql -U mixvideo_user mixvideo < backup.sql
# 查看数据库大小
docker exec mixvideo_postgres psql -U mixvideo_user -d mixvideo -c "SELECT pg_size_pretty(pg_database_size('mixvideo'));"
```
### 性能监控
```bash
# 查看活跃连接
docker exec mixvideo_postgres psql -U mixvideo_user -d mixvideo -c "SELECT * FROM pg_stat_activity;"
# 查看表大小
docker exec mixvideo_postgres psql -U mixvideo_user -d mixvideo -c "SELECT schemaname,tablename,pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;"
```
## 🛠️ 自定义配置
### 修改数据库配置
编辑 `docker-compose.yaml` 文件中的环境变量:
```yaml
environment:
POSTGRES_DB: your_database_name
POSTGRES_USER: your_username
POSTGRES_PASSWORD: your_password
```
### 添加初始化脚本
`init-scripts/` 目录下添加 `.sql``.sh` 文件,它们会在容器首次启动时按字母顺序执行。
### 持久化数据
数据会自动持久化到 Docker 卷中:
- `postgres_data` - PostgreSQL 数据
- `pgadmin_data` - pgAdmin 配置
## ⚠️ 注意事项
1. **生产环境**: 请修改默认密码和配置
2. **防火墙**: 确保端口 5432 和 8080 可访问
3. **数据备份**: 定期备份重要数据
4. **资源限制**: 根据需要调整内存和CPU限制
## 🔧 故障排除
### 常见问题
1. **端口冲突**: 如果端口被占用,修改 `docker-compose.yaml` 中的端口映射
2. **权限问题**: 确保 Docker 有足够权限访问数据卷
3. **连接失败**: 检查防火墙设置和网络配置
### 重置数据库
```bash
# 停止服务并删除数据
docker-compose down -v
# 重新启动
docker-compose up -d
```
这样就可以获得一个全新的数据库环境。