218 lines
7.0 KiB
PowerShell
218 lines
7.0 KiB
PowerShell
# 3588AdminBackend Windows 构建脚本
|
||
# 在 Windows 上交叉编译 Linux 版本并打包
|
||
|
||
# 配置
|
||
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||
$ProjectDir = Split-Path -Parent (Split-Path -Parent $ScriptDir)
|
||
$BuildDir = "$ProjectDir\build"
|
||
$PackageName = "3588AdminBackend-离线部署包-$(Get-Date -Format 'yyyyMMdd')"
|
||
$PackageDir = "$BuildDir\$PackageName"
|
||
|
||
Write-Host "========== 3588AdminBackend Windows 构建 ==========" -ForegroundColor Green
|
||
Write-Host "项目目录: $ProjectDir"
|
||
Write-Host "构建目录: $BuildDir"
|
||
Write-Host ""
|
||
|
||
# 检查 Go
|
||
$GoVersion = go version 2>$null
|
||
if ($LASTEXITCODE -ne 0) {
|
||
Write-Host "错误: 未找到 Go 命令,请先安装 Go" -ForegroundColor Red
|
||
exit 1
|
||
}
|
||
Write-Host "Go 版本: $GoVersion"
|
||
Write-Host ""
|
||
|
||
# 清理旧构建
|
||
Write-Host "[1/6] 清理旧构建..."
|
||
if (Test-Path $BuildDir) {
|
||
Remove-Item -Recurse -Force $BuildDir
|
||
}
|
||
New-Item -ItemType Directory -Path $PackageDir -Force | Out-Null
|
||
|
||
# 创建目录结构
|
||
Write-Host "[2/6] 创建目录结构..."
|
||
New-Item -ItemType Directory -Path "$PackageDir\bin" -Force | Out-Null
|
||
New-Item -ItemType Directory -Path "$PackageDir\config" -Force | Out-Null
|
||
New-Item -ItemType Directory -Path "$PackageDir\scripts" -Force | Out-Null
|
||
New-Item -ItemType Directory -Path "$PackageDir\docs" -Force | Out-Null
|
||
New-Item -ItemType Directory -Path "$PackageDir\systemd" -Force | Out-Null
|
||
|
||
# 编译项目
|
||
Write-Host "[3/6] 交叉编译 Linux AMD64 版本..."
|
||
cd $ProjectDir
|
||
|
||
$env:GOOS = "linux"
|
||
$env:GOARCH = "amd64"
|
||
$env:GOTOOLCHAIN = "local"
|
||
|
||
go build -ldflags="-s -w" -o "$PackageDir\bin\managerd" ./cmd/managerd
|
||
|
||
if ($LASTEXITCODE -ne 0 -or -not (Test-Path "$PackageDir\bin\managerd")) {
|
||
Write-Host "错误: 编译失败" -ForegroundColor Red
|
||
exit 1
|
||
}
|
||
|
||
Write-Host " 编译成功" -ForegroundColor Green
|
||
|
||
# 复制配置文件
|
||
Write-Host "[4/6] 复制配置文件..."
|
||
if (Test-Path "$ProjectDir\managerd.json") {
|
||
Copy-Item "$ProjectDir\managerd.json" "$PackageDir\config\managerd.json.example"
|
||
} else {
|
||
@"
|
||
{
|
||
"listen": "0.0.0.0:18080",
|
||
"discovery_port": 35688,
|
||
"discovery_timeout_ms": 1200,
|
||
"offline_after_ms": 10000,
|
||
"agent_token": "CHANGE_ME",
|
||
"concurrency": 5
|
||
}
|
||
"@ | Out-File -FilePath "$PackageDir\config\managerd.json.example" -Encoding UTF8
|
||
}
|
||
|
||
# 复制模板文件(如果有)
|
||
if (Test-Path "$ProjectDir\templates") {
|
||
Write-Host " 复制模板文件..."
|
||
Copy-Item -Recurse "$ProjectDir\templates" "$PackageDir\"
|
||
}
|
||
|
||
# 复制脚本
|
||
Write-Host "[5/6] 复制部署脚本..."
|
||
Copy-Item "$ScriptDir\3588admin" "$PackageDir\scripts\"
|
||
Copy-Item "$ScriptDir\3588admin.service" "$PackageDir\systemd\"
|
||
|
||
# 修复换行符为 LF(Unix 格式)
|
||
$scriptContent = Get-Content "$PackageDir\scripts\3588admin" -Raw
|
||
$scriptContent = $scriptContent -replace "`r`n", "`n"
|
||
Set-Content -Path "$PackageDir\scripts\3588admin" -Value $scriptContent -NoNewLine
|
||
|
||
$serviceContent = Get-Content "$PackageDir\systemd\3588admin.service" -Raw
|
||
$serviceContent = $serviceContent -replace "`r`n", "`n"
|
||
Set-Content -Path "$PackageDir\systemd\3588admin.service" -Value $serviceContent -NoNewLine
|
||
|
||
# 复制文档
|
||
Write-Host "[6/6] 复制文档..."
|
||
if (Test-Path "$ProjectDir\docs") {
|
||
Get-ChildItem "$ProjectDir\docs\*.md" -ErrorAction SilentlyContinue | ForEach-Object {
|
||
Copy-Item $_.FullName "$PackageDir\docs\"
|
||
}
|
||
}
|
||
if (Test-Path "$ProjectDir\Readme.md") {
|
||
Copy-Item "$ProjectDir\Readme.md" "$PackageDir\docs\"
|
||
}
|
||
if (Test-Path "$ProjectDir\API_Device_RemoteMgmt_InterfaceTable.md") {
|
||
Copy-Item "$ProjectDir\API_Device_RemoteMgmt_InterfaceTable.md" "$PackageDir\docs\"
|
||
}
|
||
|
||
# 创建版本信息
|
||
@"
|
||
3588AdminBackend 离线部署包
|
||
版本: 1.0.0
|
||
构建时间: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
|
||
Go版本: $GoVersion
|
||
目标系统: Ubuntu 22.04.5 LTS x86_64
|
||
构建主机: $env:COMPUTERNAME (Windows)
|
||
"@ | Out-File -FilePath "$PackageDir\VERSION" -Encoding UTF8
|
||
|
||
# 创建快速安装说明
|
||
@"
|
||
╔══════════════════════════════════════════════════════════════╗
|
||
║ 3588AdminBackend 离线部署包 - 快速安装指南 ║
|
||
╚══════════════════════════════════════════════════════════════╝
|
||
|
||
【系统要求】
|
||
- Ubuntu 22.04.5 LTS (x86_64)
|
||
- root 权限
|
||
|
||
【重要说明】
|
||
✓ 本部署包已包含静态编译的二进制文件
|
||
✓ 目标机器无需安装 Go 运行时
|
||
✓ 无需互联网连接(纯离线安装)
|
||
✓ 二进制文件在 Windows 上交叉编译生成
|
||
|
||
【安装步骤】
|
||
|
||
1. 上传部署包到 Ubuntu 服务器
|
||
scp -r $PackageName.tar.gz user@ubuntu-server:/tmp/
|
||
|
||
2. 解压部署包
|
||
tar -xzf $PackageName.tar.gz
|
||
cd $PackageName/
|
||
|
||
3. 执行安装
|
||
sudo ./scripts/3588admin install
|
||
|
||
4. 修改配置
|
||
sudo nano /opt/3588admin/config/managerd.json
|
||
|
||
重点修改:
|
||
- agent_token: 修改为安全的随机字符串
|
||
- listen: 如需外部访问改为 "0.0.0.0:18080"
|
||
|
||
5. 启动服务
|
||
sudo 3588admin start
|
||
|
||
6. 验证安装
|
||
sudo 3588admin status
|
||
|
||
【常用命令】
|
||
3588admin start - 启动服务
|
||
3588admin stop - 停止服务
|
||
3588admin status - 查看状态
|
||
3588admin restart - 重启服务
|
||
3588admin upgrade - 升级服务
|
||
3588admin uninstall - 卸载服务
|
||
3588admin check - 检查环境
|
||
|
||
【快捷命令】
|
||
3588admin-start - 启动服务
|
||
3588admin-stop - 停止服务
|
||
3588admin-status - 查看状态
|
||
|
||
【文件位置】
|
||
安装目录: /opt/3588admin
|
||
配置文件: /opt/3588admin/config/managerd.json
|
||
日志文件: /opt/3588admin/logs/managerd.log
|
||
|
||
【问题排查】
|
||
1. 查看日志: tail -f /opt/3588admin/logs/managerd.log
|
||
2. 检查配置: python3 -m json.tool /opt/3588admin/config/managerd.json
|
||
3. 检查端口: sudo netstat -tlnp | grep managerd
|
||
|
||
【防火墙】
|
||
sudo ufw allow 18080/tcp # HTTP API
|
||
sudo ufw allow 35688/udp # UDP 发现
|
||
|
||
"@ | Out-File -FilePath "$PackageDir\README-离线安装.txt" -Encoding UTF8
|
||
|
||
# 打包(使用 tar,Windows 10/11 内置)
|
||
Write-Host ""
|
||
Write-Host "打包..."
|
||
cd $BuildDir
|
||
|
||
# 创建 tar.gz 包(使用正斜杠避免 Windows 路径问题)
|
||
$PackageNameUnix = $PackageName -replace '\\', '/'
|
||
tar -czf "$PackageName.tar.gz" "$PackageNameUnix"
|
||
|
||
if ($LASTEXITCODE -eq 0 -and (Test-Path "$PackageName.tar.gz")) {
|
||
Write-Host ""
|
||
Write-Host "========== 构建完成 ==========" -ForegroundColor Green
|
||
Write-Host ""
|
||
Write-Host "输出文件:"
|
||
Get-ChildItem "$PackageName.tar.gz" | ForEach-Object {
|
||
$size = [math]::Round($_.Length / 1MB, 2)
|
||
Write-Host " $($_.Name) ($size MB)"
|
||
}
|
||
Write-Host ""
|
||
Write-Host "部署包位置: $BuildDir\$PackageName.tar.gz" -ForegroundColor Yellow
|
||
Write-Host ""
|
||
Write-Host "使用说明:"
|
||
Write-Host "1. 将 $PackageName.tar.gz 上传到 Ubuntu 服务器"
|
||
Write-Host "2. 解压并运行: sudo ./scripts/3588admin install"
|
||
Write-Host ""
|
||
} else {
|
||
Write-Host "错误: 打包失败" -ForegroundColor Red
|
||
exit 1
|
||
}
|