| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- # ============================================================
- # LambdaAgentPaaS — Windows Native 安装(无 Docker)
- #
- # 用法:
- # .\deploy\install-native.ps1 # 安装
- # .\deploy\install-native.ps1 -Start # 安装后启动
- #
- # 要求: Python 3.10+, Node.js 18+
- # ============================================================
- param([switch]$Start)
- $ErrorActionPreference = "Stop"
- $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
- $ProjectDir = Split-Path -Parent $ScriptDir
- $VenvDir = Join-Path $ProjectDir ".venv"
- $DataDir = Join-Path $env:USERPROFILE ".agentpaas\data"
- $EnvFile = Join-Path $env:USERPROFILE ".agentpaas\.env"
- function Write-Info { param($m) Write-Host "ℹ $m" -ForegroundColor Cyan }
- function Write-Success { param($m) Write-Host "✅ $m" -ForegroundColor Green }
- function Write-Warn { param($m) Write-Host "⚠️ $m" -ForegroundColor Yellow }
- function Exit-Error { param($m) Write-Host "❌ $m" -ForegroundColor Red; exit 1 }
- Write-Host "`n=== LambdaAgentPaaS Native 安装 (Windows) ===`n" -ForegroundColor Magenta
- # ── 检查 Python ──────────────────────────────────────────────
- $pythonCmd = $null
- foreach ($cmd in @("python", "python3", "py")) {
- try {
- $ver = & $cmd -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>$null
- $major, $minor = $ver.Split('.') | ForEach-Object { [int]$_ }
- if ($major -gt 3 -or ($major -eq 3 -and $minor -ge 10)) {
- $pythonCmd = $cmd; break
- }
- } catch {}
- }
- if (-not $pythonCmd) {
- Exit-Error "需要 Python 3.10+。请从 https://www.python.org/ 安装(勾选 Add to PATH)。"
- }
- Write-Info "使用 Python: $(& $pythonCmd --version)"
- # ── 检查 Node.js ─────────────────────────────────────────────
- if (-not (Get-Command node -ErrorAction SilentlyContinue)) {
- Exit-Error "需要 Node.js 18+。请从 https://nodejs.org/ 安装后重试。"
- }
- $nodeVer = (node -e "process.stdout.write(process.version.replace('v',''))").Split('.')[0]
- if ([int]$nodeVer -lt 18) { Exit-Error "需要 Node.js 18+(当前 v$nodeVer)" }
- Write-Info "使用 Node.js: $(node --version)"
- # ── 创建虚拟环境 ─────────────────────────────────────────────
- if (-not (Test-Path $VenvDir)) {
- Write-Info "创建 Python 虚拟环境..."
- & $pythonCmd -m venv $VenvDir
- }
- $venvPy = Join-Path $VenvDir "Scripts\python.exe"
- $venvPip = Join-Path $VenvDir "Scripts\pip.exe"
- # ── 安装 Python 依赖 ─────────────────────────────────────────
- Write-Info "安装 Python 依赖(首次约 3-5 分钟)..."
- Set-Location $ProjectDir
- # 国内网络可改为 https://pypi.tuna.tsinghua.edu.cn/simple
- $pipIndex = "" # "-i https://pypi.tuna.tsinghua.edu.cn/simple"
- & $venvPip install --upgrade pip $pipIndex -q
- & $venvPip install -e "lambdagent[all]" $pipIndex -q
- & $venvPip install -e "agentpaas[all]" $pipIndex -q
- & $venvPip install pymupdf $pipIndex -q
- Write-Success "Python 依赖安装完成"
- # ── 构建前端 ─────────────────────────────────────────────────
- Write-Info "安装前端依赖..."
- Set-Location (Join-Path $ProjectDir "webui")
- npm ci --prefer-offline --loglevel=error
- Write-Info "构建前端..."
- npm run build
- Write-Success "前端构建完成 → webui-dist/"
- Set-Location $ProjectDir
- # ── 初始化数据目录 ────────────────────────────────────────────
- $dirs = @($DataDir,
- (Join-Path $DataDir "instances"),
- (Join-Path $DataDir "knowledge_bases"),
- (Join-Path $DataDir "logs"))
- foreach ($d in $dirs) {
- if (-not (Test-Path $d)) { New-Item -ItemType Directory $d -Force | Out-Null }
- }
- # ── 初始化配置文件 ────────────────────────────────────────────
- if (-not (Test-Path $EnvFile)) {
- $configDir = Split-Path -Parent $EnvFile
- if (-not (Test-Path $configDir)) { New-Item -ItemType Directory $configDir -Force | Out-Null }
- Copy-Item (Join-Path $ProjectDir ".env.template") $EnvFile -Force
- # 生成 MASTER_KEY
- $bytes = [byte[]]::new(32)
- [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)
- $masterKey = ($bytes | ForEach-Object { $_.ToString("x2") }) -join ""
- $content = Get-Content $EnvFile
- $content = $content -replace "^AGENTPAAS_DATA_DIR=.*", "AGENTPAAS_DATA_DIR=$DataDir"
- $content = $content -replace "^AGENTPAAS_MASTER_KEY=.*", "AGENTPAAS_MASTER_KEY=$masterKey"
- $content | Set-Content $EnvFile -Encoding UTF8
- Write-Success "配置文件已创建: $EnvFile"
- Write-Warn "请编辑 $EnvFile 填写至少一个 LLM API Key"
- }
- # ── 创建 Windows 启动快捷脚本 ────────────────────────────────
- $runnerScript = Join-Path (Split-Path -Parent $EnvFile) "run.ps1"
- @"
- # LambdaAgentPaaS 启动器(由 install-native.ps1 生成)
- Get-Content '$EnvFile' | ForEach-Object {
- if (`$_ -match '^\s*([^#][^=]+)=(.*)$') {
- [System.Environment]::SetEnvironmentVariable(`$matches[1].Trim(), `$matches[2].Trim(), 'Process')
- }
- }
- `$env:AGENTPAAS_DATA_DIR = '$DataDir'
- Set-Location '$ProjectDir'
- & '$venvPy' -m agentpaas serve --host 0.0.0.0 --port (`$env:AGENTPAAS_PORT ?? '8000')
- "@ | Set-Content $runnerScript -Encoding UTF8
- # ── 创建桌面快捷方式 ─────────────────────────────────────────
- $desktopShortcut = Join-Path ([System.Environment]::GetFolderPath('Desktop')) "LambdaAgentPaaS.lnk"
- $wsh = New-Object -ComObject WScript.Shell
- $shortcut = $wsh.CreateShortcut($desktopShortcut)
- $shortcut.TargetPath = "powershell.exe"
- $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -File `"$runnerScript`""
- $shortcut.WorkingDirectory = $ProjectDir
- $shortcut.Description = "LambdaAgentPaaS"
- $shortcut.IconLocation = "powershell.exe,0"
- $shortcut.Save()
- Write-Success "桌面快捷方式已创建"
- # ── 打印完成信息 ─────────────────────────────────────────────
- Write-Host ""
- Write-Host "╔══════════════════════════════════════════════╗" -ForegroundColor Green
- Write-Host "║ ✅ LambdaAgentPaaS 安装完成! ║" -ForegroundColor Green
- Write-Host "╠══════════════════════════════════════════════╣" -ForegroundColor Green
- Write-Host "║ 启动方式 1: 双击桌面 LambdaAgentPaaS 图标 ║" -ForegroundColor Green
- Write-Host "║ 启动方式 2: powershell $runnerScript ║" -ForegroundColor Green
- Write-Host "║ 配置文件: $EnvFile" -ForegroundColor Green
- Write-Host "║ 数据目录: $DataDir" -ForegroundColor Green
- Write-Host "╚══════════════════════════════════════════════╝" -ForegroundColor Green
- Write-Host ""
- if ($Start) {
- Write-Info "正在启动服务..."
- & powershell -NoProfile -ExecutionPolicy Bypass -File $runnerScript
- }
|