用户工具

站点工具


教程: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/部署/部署.1751614094.txt.gz · 最后更改: tom