feat: add agent exec

This commit is contained in:
engigu
2025-12-27 20:43:48 +08:00
parent 31aa9170dc
commit c6d31c72a2
5 changed files with 52 additions and 38 deletions
+17 -8
View File
@@ -54,22 +54,31 @@ ARG BUILD_TIME
WORKDIR /app
# Copy agent source
# Copy agent source and config example
COPY agent/ ./agent/
# Download dependencies
WORKDIR /app/agent
RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod download
# Build agent for all platforms (parallel)
# Build agent for all platforms and package as tar.gz (sequential to avoid file conflicts)
RUN mkdir -p /opt/agent && \
echo "${VERSION}" > /opt/agent/version.txt && \
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o /opt/agent/baihu-agent-linux-amd64 . & \
# CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o /opt/agent/baihu-agent-linux-arm64 . & \
# CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o /opt/agent/baihu-agent-windows-amd64.exe . & \
# CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o /opt/agent/baihu-agent-darwin-amd64 . & \
# CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o /opt/agent/baihu-agent-darwin-arm64 . & \
wait
# Linux amd64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o baihu-agent . && \
tar -czvf /opt/agent/baihu-agent-linux-amd64.tar.gz baihu-agent config.example.ini && rm baihu-agent && \
# Linux arm64
# CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o baihu-agent . && \
# tar -czvf /opt/agent/baihu-agent-linux-arm64.tar.gz baihu-agent config.example.ini && rm baihu-agent && \
# # Windows amd64
# CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o baihu-agent.exe . && \
# tar -czvf /opt/agent/baihu-agent-windows-amd64.tar.gz baihu-agent.exe config.example.ini && rm baihu-agent.exe && \
# # Darwin amd64
# CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o baihu-agent . && \
# tar -czvf /opt/agent/baihu-agent-darwin-amd64.tar.gz baihu-agent config.example.ini && rm baihu-agent && \
# # Darwin arm64
# CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}'" -o baihu-agent . && \
# tar -czvf /opt/agent/baihu-agent-darwin-arm64.tar.gz baihu-agent config.example.ini && rm baihu-agent
# ================================
# Stage 4: Final image
+24 -18
View File
@@ -28,13 +28,19 @@ build-all: build-web build
build-agent:
@mkdir -p data/agent
@echo "$(VERSION)" > data/agent/version.txt
cd agent && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o ../data/agent/baihu-agent-linux-amd64 .
cd agent && CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o ../data/agent/baihu-agent-linux-arm64 .
cd agent && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o ../data/agent/baihu-agent-windows-amd64.exe .
cd agent && CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o ../data/agent/baihu-agent-darwin-amd64 .
cd agent && CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o ../data/agent/baihu-agent-darwin-arm64 .
@echo "Agent binaries built in data/agent/ (for local dev)"
@echo "In Docker, agents are built to /opt/agent/"
@echo "Building and packaging agents..."
cd agent && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o baihu-agent . && \
tar -czvf ../data/agent/baihu-agent-linux-amd64.tar.gz baihu-agent config.example.ini && rm baihu-agent
cd agent && CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o baihu-agent . && \
tar -czvf ../data/agent/baihu-agent-linux-arm64.tar.gz baihu-agent config.example.ini && rm baihu-agent
cd agent && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o baihu-agent.exe . && \
tar -czvf ../data/agent/baihu-agent-windows-amd64.tar.gz baihu-agent.exe config.example.ini && rm baihu-agent.exe
cd agent && CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o baihu-agent . && \
tar -czvf ../data/agent/baihu-agent-darwin-amd64.tar.gz baihu-agent config.example.ini && rm baihu-agent
cd agent && CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)'" -o baihu-agent . && \
tar -czvf ../data/agent/baihu-agent-darwin-arm64.tar.gz baihu-agent config.example.ini && rm baihu-agent
@echo "Agent packages built in data/agent/"
@ls -lh data/agent/*.tar.gz
# Clean built files
clean:
@@ -77,14 +83,14 @@ docker-down:
# Help
help:
@echo "Available targets:"
@echo " all - Build the application (default)"
@echo " build - Build the application"
@echo " build-agent - Build agent for all platforms"
@echo " clean - Clean built files"
@echo " run - Run the application"
@echo " deps - Install dependencies"
@echo " docker-build - Build Docker image"
@echo " docker-run - Run Docker container"
@echo " docker-up - Start Docker Compose stack"
@echo " docker-down - Stop Docker Compose stack"
@echo " help - Show this help message"
@echo " all - Build the application (default)"
@echo " build - Build the application"
@echo " build-agent - Build agent packages (tar.gz) for all platforms"
@echo " clean - Clean built files"
@echo " run - Run the application"
@echo " deps - Install dependencies"
@echo " docker-build - Build Docker image"
@echo " docker-run - Run Docker container"
@echo " docker-up - Start Docker Compose stack"
@echo " docker-down - Stop Docker Compose stack"
@echo " help - Show this help message"
+2 -2
View File
@@ -317,9 +317,9 @@ func (c *AgentController) Download(ctx *gin.Context) {
}
ctx.Header("Content-Disposition", "attachment; filename="+filename)
ctx.Header("Content-Type", "application/octet-stream")
ctx.Header("Content-Type", "application/gzip")
ctx.Header("Content-Length", strconv.Itoa(len(data)))
ctx.Data(200, "application/octet-stream", data)
ctx.Data(200, "application/gzip", data)
}
// GetVersion 获取 Agent 最新版本信息
+7 -8
View File
@@ -320,9 +320,11 @@ func (s *AgentService) GetAvailablePlatforms() []map[string]string {
for _, f := range files {
name := f.Name()
if strings.HasPrefix(name, "baihu-agent-") {
// baihu-agent-linux-amd64, baihu-agent-windows-amd64.exe
parts := strings.Split(strings.TrimSuffix(name, ".exe"), "-")
// baihu-agent-linux-amd64.tar.gz
if strings.HasPrefix(name, "baihu-agent-") && strings.HasSuffix(name, ".tar.gz") {
// 去掉 .tar.gz 后缀
baseName := strings.TrimSuffix(name, ".tar.gz")
parts := strings.Split(baseName, "-")
if len(parts) >= 4 {
platforms = append(platforms, map[string]string{
"os": parts[2],
@@ -336,12 +338,9 @@ func (s *AgentService) GetAvailablePlatforms() []map[string]string {
return platforms
}
// GetAgentBinary 获取 Agent 二进制文件
// GetAgentBinary 获取 Agent 压缩包
func (s *AgentService) GetAgentBinary(osType, arch string) ([]byte, string, error) {
filename := fmt.Sprintf("baihu-agent-%s-%s", osType, arch)
if osType == "windows" {
filename += ".exe"
}
filename := fmt.Sprintf("baihu-agent-%s-%s.tar.gz", osType, arch)
// 优先从 /opt/agent 读取(容器内)
filePath := filepath.Join("/opt/agent", filename)
+2 -2
View File
@@ -364,8 +364,8 @@ onUnmounted(() => {
<div class="border-t pt-4">
<p class="text-sm font-medium mb-2">使用说明</p>
<div class="text-xs text-muted-foreground space-y-1.5">
<p>1. 下载对应平台的 Agent 程序</p>
<p>2. 创建 config.ini 配置文件设置 server_url</p>
<p>1. 下载对应平台的 Agent 压缩包并解压</p>
<p>2. 修改 config.example.ini config.ini设置 server_url</p>
<p>3. 运行 <code class="bg-muted px-1 rounded">./baihu-agent start</code> 启动</p>
<p>4. 在本页面"未注册"标签中审核通过</p>
<p>5. 可选: <code class="bg-muted px-1 rounded">./baihu-agent install</code> 设置开机自启</p>