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

220
doc_news/deploy.ps1 Normal file
View File

@@ -0,0 +1,220 @@
# AI多语言资讯系统 - Windows PowerShell 部署脚本
# 适用于PostgreSQL/Supabase环境
param(
[string]$DBHost = "localhost",
[string]$DBPort = "5432",
[string]$DBName = "ai_news",
[string]$DBUser = "postgres",
[switch]$Help
)
# 显示帮助信息
if ($Help) {
Write-Host "AI多语言资讯系统 - 部署脚本" -ForegroundColor Cyan
Write-Host ""
Write-Host "用法: .\deploy.ps1 [选项]" -ForegroundColor White
Write-Host ""
Write-Host "选项:" -ForegroundColor Yellow
Write-Host " -DBHost 数据库主机 (默认: localhost)" -ForegroundColor White
Write-Host " -DBPort 数据库端口 (默认: 5432)" -ForegroundColor White
Write-Host " -DBName 数据库名称 (默认: ai_news)" -ForegroundColor White
Write-Host " -DBUser 数据库用户 (默认: postgres)" -ForegroundColor White
Write-Host " -Help 显示此帮助信息" -ForegroundColor White
Write-Host ""
Write-Host "示例:" -ForegroundColor Green
Write-Host " .\deploy.ps1 -DBHost 'localhost' -DBName 'my_news_db'" -ForegroundColor White
exit 0
}
# 获取脚本所在目录
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
# 打印带颜色的消息函数
function Write-ColorMessage {
param(
[string]$Message,
[string]$Color = "White"
)
Write-Host $Message -ForegroundColor $Color
}
# 检查PostgreSQL连接
function Test-DatabaseConnection {
Write-ColorMessage "🔍 检查数据库连接..." "Blue"
# 检查psql是否可用
try {
$psqlVersion = psql --version 2>$null
if ($LASTEXITCODE -eq 0) {
Write-ColorMessage "✅ 找到PostgreSQL客户端工具" "Green"
} else {
throw "psql not found"
}
} catch {
Write-ColorMessage "⚠️ 未找到psql命令请安装PostgreSQL客户端工具或手动执行SQL文件" "Yellow"
return $false
}
# 测试连接
try {
$env:PGPASSWORD = Read-Host "请输入数据库密码" -AsSecureString | ConvertFrom-SecureString -AsPlainText
$connectionTest = psql -h $DBHost -p $DBPort -d $DBName -U $DBUser -c '\q' 2>$null
if ($LASTEXITCODE -eq 0) {
Write-ColorMessage "✅ 数据库连接成功" "Green"
return $true
} else {
Write-ColorMessage "❌ 数据库连接失败,请检查连接参数" "Red"
return $false
}
} catch {
Write-ColorMessage "❌ 数据库连接失败: $_" "Red"
return $false
}
}
# 执行SQL文件
function Invoke-SqlFile {
param(
[string]$SqlFile,
[string]$Description
)
Write-ColorMessage "📊 执行 $Description..." "Blue"
if (-not (Test-Path $SqlFile)) {
Write-ColorMessage "❌ 文件不存在: $SqlFile" "Red"
return $false
}
try {
psql -h $DBHost -p $DBPort -d $DBName -U $DBUser -f $SqlFile
if ($LASTEXITCODE -eq 0) {
Write-ColorMessage "$Description 执行成功" "Green"
return $true
} else {
Write-ColorMessage "$Description 执行失败 (退出代码: $LASTEXITCODE)" "Red"
return $false
}
} catch {
Write-ColorMessage "$Description 执行异常: $_" "Red"
return $false
}
}
# 验证部署结果
function Test-DeploymentResult {
Write-ColorMessage "🧪 验证部署结果..." "Blue"
try {
# 检查表数量
$tableCount = psql -h $DBHost -p $DBPort -d $DBName -U $DBUser -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'ak_%';" 2>$null
$tableCount = $tableCount.Trim()
if ([int]$tableCount -gt 15) {
Write-ColorMessage "✅ 数据库表创建成功 ($tableCount 个表)" "Green"
} else {
Write-ColorMessage "⚠️ 数据库表数量异常 ($tableCount 个表)" "Yellow"
}
# 检查RLS策略
$policyCount = psql -h $DBHost -p $DBPort -d $DBName -U $DBUser -t -c "SELECT COUNT(*) FROM pg_policies WHERE schemaname = 'public';" 2>$null
$policyCount = $policyCount.Trim()
if ([int]$policyCount -gt 5) {
Write-ColorMessage "✅ RLS安全策略创建成功 ($policyCount 个策略)" "Green"
} else {
Write-ColorMessage "⚠️ RLS策略数量异常 ($policyCount 个策略)" "Yellow"
}
# 检查索引
$indexCount = psql -h $DBHost -p $DBPort -d $DBName -U $DBUser -t -c "SELECT COUNT(*) FROM pg_indexes WHERE schemaname = 'public' AND indexname LIKE 'idx_%';" 2>$null
$indexCount = $indexCount.Trim()
if ([int]$indexCount -gt 15) {
Write-ColorMessage "✅ 性能索引创建成功 ($indexCount 个索引)" "Green"
} else {
Write-ColorMessage "⚠️ 索引数量异常 ($indexCount 个索引)" "Yellow"
}
} catch {
Write-ColorMessage "⚠️ 验证过程中出现错误: $_" "Yellow"
}
}
# 主部署流程
function Start-Deployment {
Write-ColorMessage "===========================================" "Blue"
Write-ColorMessage " AI多语言资讯系统 - 自动部署工具" "Blue"
Write-ColorMessage "==========================================" "Blue"
Write-ColorMessage ""
# 显示连接信息
Write-ColorMessage "📋 连接信息:" "Cyan"
Write-ColorMessage " 主机: $DBHost" "White"
Write-ColorMessage " 端口: $DBPort" "White"
Write-ColorMessage " 数据库: $DBName" "White"
Write-ColorMessage " 用户: $DBUser" "White"
Write-ColorMessage ""
# 检查SQL文件是否存在
$mainSqlFile = Join-Path $ScriptDir "ai_multilingual_news_database.sql"
if (-not (Test-Path $mainSqlFile)) {
Write-ColorMessage "❌ 主数据库文件不存在: ai_multilingual_news_database.sql" "Red"
exit 1
}
# 测试数据库连接
$connectionOk = Test-DatabaseConnection
# 部署步骤1: 创建数据库结构
Write-ColorMessage "📊 步骤1: 创建数据库结构..." "Yellow"
if ($connectionOk) {
$result1 = Invoke-SqlFile -SqlFile $mainSqlFile -Description "数据库结构创建"
} else {
Write-ColorMessage "请手动执行: ai_multilingual_news_database.sql" "Yellow"
$result1 = $false
}
# 部署步骤2: 插入演示数据(可选)
$demoDataFile = Join-Path $ScriptDir "topics_comments_init_data.sql"
if (Test-Path $demoDataFile) {
Write-ColorMessage "📝 步骤2: 插入演示数据..." "Yellow"
$insertDemo = Read-Host "是否插入演示数据? (y/N)"
if ($insertDemo -match '^[Yy是]') {
if ($connectionOk) {
$result2 = Invoke-SqlFile -SqlFile $demoDataFile -Description "演示数据插入"
} else {
Write-ColorMessage "请手动执行: topics_comments_init_data.sql" "Yellow"
}
} else {
Write-ColorMessage "⏭️ 跳过演示数据插入" "Blue"
}
}
# 验证部署
if ($connectionOk) {
Test-DeploymentResult
}
Write-ColorMessage ""
Write-ColorMessage "===========================================" "Green"
Write-ColorMessage "🎉 部署完成!" "Green"
Write-ColorMessage "===========================================" "Green"
Write-ColorMessage ""
Write-ColorMessage "💡 系统功能包括:" "Blue"
Write-ColorMessage " - 多语言内容管理和AI翻译" "White"
Write-ColorMessage " - 专题、评论、收藏、转发功能" "White"
Write-ColorMessage " - 用户行为分析和推荐系统" "White"
Write-ColorMessage " - 智能聊天和成本控制" "White"
Write-ColorMessage " - 完整的安全访问控制(RLS)" "White"
Write-ColorMessage ""
Write-ColorMessage "📚 相关文档:" "Blue"
Write-ColorMessage " - SQL_DEPLOYMENT_GUIDE.md (详细部署指南)" "White"
Write-ColorMessage " - FINAL_DEPLOYMENT_VALIDATION.md (验证报告)" "White"
Write-ColorMessage " - INDEX_ERROR_SOLUTION.md (错误解决方案)" "White"
Write-ColorMessage "===========================================" "Green"
}
# 运行主程序
Start-Deployment