Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

185
doc_news/deploy.sh Normal file
View File

@@ -0,0 +1,185 @@
#!/bin/bash
# AI多语言资讯系统 - 一键部署脚本
# 适用于PostgreSQL/Supabase环境
echo "🚀 开始部署AI多语言资讯系统..."
# 设置变量
DB_HOST=${DB_HOST:-"localhost"}
DB_PORT=${DB_PORT:-"5432"}
DB_NAME=${DB_NAME:-"ai_news"}
DB_USER=${DB_USER:-"postgres"}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印带颜色的消息
print_message() {
local color=$1
local message=$2
echo -e "${color}${message}${NC}"
}
# 检查PostgreSQL连接
check_connection() {
print_message $BLUE "检查数据库连接..."
if command -v psql &> /dev/null; then
if psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -c '\q' 2>/dev/null; then
print_message $GREEN "✅ 数据库连接成功"
return 0
else
print_message $RED "❌ 数据库连接失败"
return 1
fi
else
print_message $YELLOW "⚠️ 未找到psql命令请手动执行SQL文件"
return 1
fi
}
# 执行SQL文件
execute_sql() {
local sql_file=$1
local description=$2
print_message $BLUE "执行 ${description}..."
if [ ! -f "$sql_file" ]; then
print_message $RED "❌ 文件不存在: $sql_file"
return 1
fi
if psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -f "$sql_file"; then
print_message $GREEN "${description} 执行成功"
return 0
else
print_message $RED "${description} 执行失败"
return 1
fi
}
# 验证部署
verify_deployment() {
print_message $BLUE "验证部署结果..."
# 检查表数量
local table_count=$(psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'ak_%';" 2>/dev/null | tr -d ' ')
if [ "$table_count" -gt 15 ]; then
print_message $GREEN "✅ 数据库表创建成功 (${table_count}个表)"
else
print_message $YELLOW "⚠️ 数据库表数量异常 (${table_count}个表)"
fi
# 检查RLS策略
local policy_count=$(psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -t -c "SELECT COUNT(*) FROM pg_policies WHERE schemaname = 'public';" 2>/dev/null | tr -d ' ')
if [ "$policy_count" -gt 5 ]; then
print_message $GREEN "✅ RLS安全策略创建成功 (${policy_count}个策略)"
else
print_message $YELLOW "⚠️ RLS策略数量异常 (${policy_count}个策略)"
fi
# 检查索引
local index_count=$(psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -t -c "SELECT COUNT(*) FROM pg_indexes WHERE schemaname = 'public' AND indexname LIKE 'idx_%';" 2>/dev/null | tr -d ' ')
if [ "$index_count" -gt 15 ]; then
print_message $GREEN "✅ 性能索引创建成功 (${index_count}个索引)"
else
print_message $YELLOW "⚠️ 索引数量异常 (${index_count}个索引)"
fi
}
# 主部署流程
main() {
print_message $BLUE "==========================================="
print_message $BLUE " AI多语言资讯系统 - 自动部署工具"
print_message $BLUE "==========================================="
# 检查SQL文件是否存在
if [ ! -f "${SCRIPT_DIR}/ai_multilingual_news_database.sql" ]; then
print_message $RED "❌ 主数据库文件不存在: ai_multilingual_news_database.sql"
exit 1
fi
# 部署步骤1: 创建数据库结构
print_message $YELLOW "📊 步骤1: 创建数据库结构..."
if check_connection; then
execute_sql "${SCRIPT_DIR}/ai_multilingual_news_database.sql" "数据库结构创建"
else
print_message $YELLOW "请手动执行: ai_multilingual_news_database.sql"
fi
# 部署步骤2: 插入演示数据(可选)
if [ -f "${SCRIPT_DIR}/topics_comments_init_data.sql" ]; then
print_message $YELLOW "📝 步骤2: 插入演示数据..."
read -p "是否插入演示数据? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ || $REPLY =~ ^[]$ ]]; then
execute_sql "${SCRIPT_DIR}/topics_comments_init_data.sql" "演示数据插入"
else
print_message $BLUE "跳过演示数据插入"
fi
fi
# 验证部署
if check_connection; then
verify_deployment
fi
print_message $GREEN "==========================================="
print_message $GREEN "🎉 部署完成!"
print_message $GREEN "==========================================="
print_message $BLUE "系统功能包括:"
print_message $BLUE "- 多语言内容管理和AI翻译"
print_message $BLUE "- 专题、评论、收藏、转发功能"
print_message $BLUE "- 用户行为分析和推荐系统"
print_message $BLUE "- 智能聊天和成本控制"
print_message $BLUE "- 完整的安全访问控制(RLS)"
print_message $GREEN "==========================================="
}
# 处理命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-h|--host)
DB_HOST="$2"
shift 2
;;
-p|--port)
DB_PORT="$2"
shift 2
;;
-d|--database)
DB_NAME="$2"
shift 2
;;
-U|--username)
DB_USER="$2"
shift 2
;;
--help)
echo "用法: $0 [选项]"
echo "选项:"
echo " -h, --host 数据库主机 (默认: localhost)"
echo " -p, --port 数据库端口 (默认: 5432)"
echo " -d, --database 数据库名称 (默认: ai_news)"
echo " -U, --username 数据库用户 (默认: postgres)"
echo " --help 显示此帮助信息"
exit 0
;;
*)
print_message $RED "未知参数: $1"
print_message $BLUE "使用 --help 查看帮助"
exit 1
;;
esac
done
# 运行主程序
main