教程:go-platform:部署:部署
这是本文档旧的修订版!
部署
项目有多种部署方式
二进制文件
可以将各个模块编译成二进制可执行文件。对于统一配置中心,可以通过如下的powershell脚本进行打包:
<# .SYNOPSIS 构建 Go 项目并复制配置文件到目标目录 .DESCRIPTION 此脚本将: 1. 编译 Go 项目为 Linux amd64 二进制文件 2. 复制配置文件到目标目录 3. 复制静态资源和 SQL 文件 #> # 配置参数 $Config = @{ GOOS = "linux" GOARCH = "amd64" OutputDir = ".\bin" AppName = "configure" SourceFiles = @( @{ Source = ".\internal\conf\conf-prod.yaml" Destination = ".\bin\internal\conf\conf.yaml" IsDirectory = $false }, @{ Source = ".\deploy\data-pg.sql" Destination = ".\bin\deploy\data-pg.sql" IsDirectory = $false }, @{ Source = ".\static" Destination = ".\bin\static" IsDirectory = $true }, @{ Source = ".\web" Destination = ".\bin\web" IsDirectory = $true } ) } # 初始化日志函数 function Write-Log { param ( [string]$Message, [string]$Level = "INFO", [string]$Color = "White" ) $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $formattedMessage = "[$timestamp] [$Level] $Message" Write-Host $formattedMessage -ForegroundColor $Color } # 复制文件或目录函数 function Copy-FileOrDirectory { param ( [string]$Source, [string]$Destination, [bool]$IsDirectory ) try { # 检查源路径是否存在 if (-not (Test-Path $Source)) { Write-Log "源路径不存在: $Source" -Level "ERROR" -Color "Red" return $false } # 创建目标目录 $targetDir = if ($IsDirectory) { $Destination } else { [System.IO.Path]::GetDirectoryName($Destination) } if (-not (Test-Path $targetDir)) { New-Item -ItemType Directory -Path $targetDir -Force | Out-Null Write-Log "创建目录: $targetDir" -Level "DEBUG" -Color "Gray" } # 执行复制 if ($IsDirectory) { Copy-Item -Path $Source -Destination $Destination -Recurse -Force Write-Log "复制目录: $Source → $Destination" -Level "INFO" -Color "Green" } else { Copy-Item -Path $Source -Destination $Destination -Force Write-Log "复制文件: $Source → $Destination" -Level "INFO" -Color "Green" } return $true } catch { Write-Log "复制失败: $_" -Level "ERROR" -Color "Red" return $false } } # 主脚本开始 Write-Log "开始构建过程..." -Level "INFO" -Color "Cyan" # 1. 清理旧构建 try { if (Test-Path $Config.OutputDir) { Remove-Item -Path $Config.OutputDir -Recurse -Force Write-Log "已清理旧构建目录: $($Config.OutputDir)" -Level "INFO" -Color "Yellow" } New-Item -ItemType Directory -Path $Config.OutputDir -Force | Out-Null } catch { Write-Log "清理目录失败: $_" -Level "ERROR" -Color "Red" exit 1 } # 2. 设置环境变量并编译 try { $env:GOOS = $Config.GOOS $env:GOARCH = $Config.GOARCH $env:CGO_ENABLED = "0" $buildCommand = "go build -ldflags='-s -w' -o `"$($Config.OutputDir)\$($Config.AppName)`" ./cmd/configure/main.go" Write-Log "执行编译命令: $buildCommand" -Level "DEBUG" -Color "Gray" Invoke-Expression $buildCommand Write-Log "编译成功完成" -Level "INFO" -Color "Green" Write-Log "输出路径: $(Resolve-Path $Config.OutputDir)\$($Config.AppName)" -Level "INFO" -Color "Cyan" } catch { Write-Log "编译失败: $_" -Level "ERROR" -Color "Red" exit 1 } # 3. 复制所有配置文件 $allSuccess = $true foreach ($file in $Config.SourceFiles) { $result = Copy-FileOrDirectory -Source $file.Source -Destination $file.Destination -IsDirectory $file.IsDirectory if (-not $result) { $allSuccess = $false } } if (-not $allSuccess) { Write-Log "部分文件复制失败,请检查错误日志" -Level "WARNING" -Color "Yellow" exit 1 } Write-Log "所有构建步骤完成!" -Level "INFO" -Color "Cyan" exit 0
教程/go-platform/部署/部署.1751615008.txt.gz · 最后更改: 由 tom
评论