266 lines
8.6 KiB
Markdown
266 lines
8.6 KiB
Markdown
# AI多语言资讯系统 - 部署指南
|
||
|
||

|
||

|
||

|
||
|
||
## 📋 项目概述
|
||
|
||
AI多语言资讯系统是一个基于PostgreSQL的现代化新闻资讯管理平台,支持多语言内容管理、AI智能翻译、用户行为分析、社交功能等特性。
|
||
|
||
## ✨ 主要功能
|
||
|
||
- 🌍 **多语言支持**: 支持多种语言的内容管理和AI翻译
|
||
- 📰 **内容管理**: 完整的新闻内容管理系统
|
||
- 🏷️ **专题系统**: 专题创建、订阅、内容聚合
|
||
- 💬 **评论系统**: 多层级评论、点赞、举报、审核
|
||
- ⭐ **收藏功能**: 个人收藏夹、内容收藏管理
|
||
- 🔄 **转发分享**: 内容转发和社交分享
|
||
- 🤖 **AI智能**: 智能翻译、内容分析、聊天机器人
|
||
- 👥 **用户系统**: 用户行为分析、个性化推荐
|
||
- 🔒 **安全控制**: 基于RLS的行级安全策略
|
||
- 📊 **性能优化**: 全文搜索、复合索引、查询优化
|
||
|
||
## 🏗️ 系统架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ AI多语言资讯系统 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ 内容层 │ 专题管理 │ 评论系统 │ 收藏转发 │ 用户行为 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ AI层 │ 智能翻译 │ 内容分析 │ 聊天机器人 │ 推荐系统 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ 数据层 │ PostgreSQL 数据库 (21+ 张表) │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ 安全层 │ RLS策略 + 索引优化 + 触发器 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 📦 文件结构
|
||
|
||
```
|
||
doc_news/
|
||
├── 🗄️ 数据库文件
|
||
│ ├── ai_multilingual_news_database.sql # 主数据库结构
|
||
│ └── topics_comments_init_data.sql # 演示数据
|
||
├── 🚀 部署脚本
|
||
│ ├── deploy.sh # Linux/MacOS 部署脚本
|
||
│ └── deploy.ps1 # Windows PowerShell 部署脚本
|
||
├── 📖 文档
|
||
│ ├── README.md # 项目说明 (本文件)
|
||
│ ├── SQL_DEPLOYMENT_GUIDE.md # 详细部署指南
|
||
│ ├── FINAL_DEPLOYMENT_VALIDATION.md # 验证报告
|
||
│ └── INDEX_ERROR_SOLUTION.md # 错误解决方案
|
||
└── 🔧 工具脚本
|
||
├── fix_indexes.sql # 索引修复脚本
|
||
└── clean_policies.sql # 策略清理脚本
|
||
```
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 方式一:自动部署 (推荐)
|
||
|
||
#### Linux/MacOS:
|
||
```bash
|
||
# 1. 确保PostgreSQL客户端已安装
|
||
sudo apt-get install postgresql-client # Ubuntu/Debian
|
||
# 或
|
||
brew install postgresql # MacOS
|
||
|
||
# 2. 执行部署脚本
|
||
chmod +x deploy.sh
|
||
./deploy.sh --host localhost --database ai_news --username postgres
|
||
```
|
||
|
||
#### Windows:
|
||
```powershell
|
||
# 1. 在PowerShell中执行
|
||
.\deploy.ps1 -DBHost "localhost" -DBName "ai_news" -DBUser "postgres"
|
||
|
||
# 2. 或者使用默认参数
|
||
.\deploy.ps1
|
||
```
|
||
|
||
### 方式二:手动部署
|
||
|
||
#### 1. 创建数据库结构
|
||
```sql
|
||
-- 在PostgreSQL或Supabase SQL编辑器中执行
|
||
\i ai_multilingual_news_database.sql
|
||
```
|
||
|
||
#### 2. 插入演示数据 (可选)
|
||
```sql
|
||
-- 在SQL编辑器中执行
|
||
\i topics_comments_init_data.sql
|
||
```
|
||
|
||
### 方式三:Supabase 部署
|
||
|
||
1. 登录 [Supabase Dashboard](https://app.supabase.com/)
|
||
2. 创建新项目或选择现有项目
|
||
3. 进入 `SQL Editor`
|
||
4. 复制 `ai_multilingual_news_database.sql` 内容并执行
|
||
5. 复制 `topics_comments_init_data.sql` 内容并执行 (可选)
|
||
|
||
## 🔧 配置参数
|
||
|
||
### 数据库连接参数
|
||
|
||
| 参数 | 默认值 | 说明 |
|
||
|------|--------|------|
|
||
| DB_HOST | localhost | 数据库主机地址 |
|
||
| DB_PORT | 5432 | 数据库端口 |
|
||
| DB_NAME | ai_news | 数据库名称 |
|
||
| DB_USER | postgres | 数据库用户名 |
|
||
|
||
### 环境变量配置
|
||
|
||
```bash
|
||
# 设置数据库连接
|
||
export DB_HOST="your-db-host"
|
||
export DB_PORT="5432"
|
||
export DB_NAME="your-database"
|
||
export DB_USER="your-username"
|
||
export PGPASSWORD="your-password"
|
||
```
|
||
|
||
## ✅ 部署验证
|
||
|
||
部署完成后,可以通过以下SQL命令验证:
|
||
|
||
```sql
|
||
-- 检查表创建
|
||
SELECT table_name FROM information_schema.tables
|
||
WHERE table_schema = 'public' AND table_name LIKE 'ak_%';
|
||
|
||
-- 检查RLS策略
|
||
SELECT schemaname, tablename, policyname
|
||
FROM pg_policies WHERE schemaname = 'public';
|
||
|
||
-- 检查索引
|
||
SELECT indexname FROM pg_indexes
|
||
WHERE schemaname = 'public' AND indexname LIKE 'idx_%';
|
||
|
||
-- 检查演示数据
|
||
SELECT COUNT(*) as topic_count FROM ak_topics;
|
||
SELECT COUNT(*) as comment_count FROM ak_comments;
|
||
```
|
||
|
||
预期结果:
|
||
- ✅ 21+ 个数据表
|
||
- ✅ 9+ 个RLS安全策略
|
||
- ✅ 21+ 个性能索引
|
||
- ✅ 演示数据 (如果选择插入)
|
||
|
||
## 🗃️ 数据库表结构
|
||
|
||
### 核心表
|
||
- `ak_contents` - 内容管理
|
||
- `ak_content_translations` - 内容翻译
|
||
- `ak_topics` - 专题管理
|
||
- `ak_comments` - 评论系统
|
||
- `ak_content_favorites` - 收藏功能
|
||
- `ak_content_shares` - 转发分享
|
||
|
||
### AI功能表
|
||
- `ak_ai_translation_logs` - AI翻译记录
|
||
- `ak_ai_usage_stats` - AI使用统计
|
||
- `ak_chat_sessions` - 聊天会话
|
||
- `ak_chat_messages` - 聊天消息
|
||
|
||
### 用户分析表
|
||
- `ak_user_behaviors` - 用户行为
|
||
- `ak_user_profiles` - 用户画像
|
||
- `ak_recommendations` - 推荐记录
|
||
|
||
## 🔒 安全特性
|
||
|
||
- **RLS行级安全**: 用户只能访问自己的数据
|
||
- **策略隔离**: 不同功能模块的策略分离
|
||
- **数据加密**: 敏感信息加密存储
|
||
- **访问控制**: 基于角色的访问控制
|
||
|
||
## 🚨 故障排除
|
||
|
||
### 常见问题
|
||
|
||
#### 1. 策略重复创建错误
|
||
```
|
||
ERROR: 42710: policy "xxx" for table "xxx" already exists
|
||
```
|
||
**解决方案**: 所有策略已添加 `DROP POLICY IF EXISTS`,可安全重复执行。
|
||
|
||
#### 2. 索引重复创建错误
|
||
```
|
||
ERROR: 42P07: relation "idx_xxx" already exists
|
||
```
|
||
**解决方案**: 所有索引使用 `CREATE INDEX IF NOT EXISTS`,支持幂等执行。
|
||
|
||
#### 3. 扩展不存在错误
|
||
```
|
||
ERROR: extension "uuid-ossp" does not exist
|
||
```
|
||
**解决方案**:
|
||
```sql
|
||
-- 手动安装所需扩展
|
||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
|
||
CREATE EXTENSION IF NOT EXISTS "btree_gin";
|
||
```
|
||
|
||
#### 4. 全文搜索IMMUTABLE函数错误
|
||
```
|
||
ERROR: 42P17: functions in index predicate must be marked IMMUTABLE
|
||
```
|
||
**解决方案**: 已创建IMMUTABLE包装函数
|
||
```sql
|
||
-- 自动使用IMMUTABLE函数创建索引
|
||
CREATE INDEX IF NOT EXISTS idx_contents_fts_title ON public.ak_contents
|
||
USING gin(content_title_to_tsvector(title));
|
||
```
|
||
|
||
#### 5. 权限不足错误
|
||
```
|
||
ERROR: permission denied to create extension
|
||
```
|
||
**解决方案**: 使用超级用户权限或联系数据库管理员。
|
||
|
||
### 获取更多帮助
|
||
|
||
- 📖 查看 `SQL_DEPLOYMENT_GUIDE.md` 了解详细部署步骤
|
||
- 🔍 查看 `INDEX_ERROR_SOLUTION.md` 了解错误解决方案
|
||
- ✅ 查看 `FINAL_DEPLOYMENT_VALIDATION.md` 了解验证详情
|
||
|
||
## 📈 性能优化
|
||
|
||
- **全文搜索**: 使用GIN索引支持高效的文本搜索
|
||
- **复合索引**: 针对常用查询组合优化
|
||
- **分区表**: 大数据量时支持表分区
|
||
- **连接池**: 建议使用连接池管理数据库连接
|
||
|
||
## 🤝 贡献指南
|
||
|
||
1. Fork 项目
|
||
2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
|
||
3. 提交更改 (`git commit -m 'Add amazing feature'`)
|
||
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
||
5. 打开 Pull Request
|
||
|
||
## 📄 许可证
|
||
|
||
该项目基于 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|
||
|
||
## 🙏 致谢
|
||
|
||
- PostgreSQL 社区
|
||
- Supabase 团队
|
||
- 所有贡献者
|
||
|
||
---
|
||
|
||
**最后更新**: 2025年1月27日
|
||
**版本**: v1.0.0
|
||
**状态**: ✅ 生产就绪
|