#!/bin/bash # GMSSH「系统调优」Go 版后端构建脚本 # 产出官方标准结构: dist/app/bin/{main, config.json, i18n/} set -euo pipefail export PATH=$PATH:/usr/local/go/bin export GOPROXY=https://goproxy.cn,direct CURDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$CURDIR" # 架构: 默认 amd64, 可用 ARCH=arm64 交叉编译 ARCH="${ARCH:-amd64}" DIST_BIN="$CURDIR/dist/app/bin" echo "🚀 开始构建 Go 版后端 (arch=$ARCH)..." # 1. 编译 main echo "⚙️ 编译 main.go (GOOS=linux GOARCH=$ARCH)..." GOOS=linux GOARCH="$ARCH" CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o "$DIST_BIN/main" . if [ ! -f "$DIST_BIN/main" ]; then echo "❌ 编译失败, 未找到产物" exit 1 fi echo "✅ 编译完成: $DIST_BIN/main ($(stat -c%s "$DIST_BIN/main") bytes)" # 2. 生成 config.json (官方格式, socket=app.sock) echo "📝 生成 config.json..." mkdir -p "$DIST_BIN" cat > "$DIST_BIN/config.json" <<'JSONEOF' { "test": { "jsonrpc": { "sockets": "app.sock" }, "logger": { "path": "logs/", "file": "{Y-m-d}.log", "level": "info", "stdout": true, "rotateBackupLimit": 7, "rotateExpire": "1d" } }, "prod": { "jsonrpc": { "sockets": "app.sock" }, "logger": { "path": "../../logs/", "file": "{Y-m-d}.log", "level": "error", "stdout": false, "rotateBackupLimit": 30, "rotateExpire": "30d" } } } JSONEOF echo "✅ config.json 已生成" # 3. 生成 i18n (基础国际化文件) echo "📝 生成 i18n..." mkdir -p "$DIST_BIN/i18n" cat > "$DIST_BIN/i18n/zh-CN.ini" <<'INIIEOF' REQUIRE_VALIDATION_TM="该参数不能为空" STATUS_OK="操作成功" INIIEOF cat > "$DIST_BIN/i18n/en.ini" <<'INIIEOF' REQUIRE_VALIDATION_TM="This parameter cannot be empty" STATUS_OK=" Operation successful" INIIEOF echo "✅ i18n 已生成" # 4. 赋权 chmod +x "$DIST_BIN/main" echo "" echo "✅ 构建完成! 产物结构:" find "$CURDIR/dist/app/bin" -type f | sed "s|$CURDIR/||"