This commit is contained in:
vet
2026-04-13 01:27:34 +07:00
commit c7c3c02bc3
18 changed files with 2730 additions and 0 deletions

104
04-build.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/usr/bin/env bash
# =============================================================================
# 04-build.sh — 编译所有后端 Go 服务
#
# 编译产物输出至 .local-dev/bin/
# 支持只编译单个服务:./04-build.sh [service-name]
#
# 可用服务名: openim-server, chat-rpc, admin-rpc, chat-api, admin-api,
# meetingmsg, livecloud, livestream
#
# 后续步骤05-start.sh启动后端服务
# =============================================================================
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
init_dirs
init_script_log # ← 脚本执行日志
require_tools go
header "步骤 4 / 5 — 编译后端 Go 服务"
# 编译单个服务的函数
# 用法: _build <output-name> <source-dir> <package>
_build() {
local name="$1" dir="$ROOT_DIR/$2" pkg="$3"
local out="$BUILD_DIR/$name"
info "编译 ${BOLD}$name${NC} ..."
local start_ts=$SECONDS
if (cd "$dir" && go build -o "$out" "$pkg"); then
local elapsed=$(( SECONDS - start_ts ))
success "$name$out (${elapsed}s)"
else
error "$name 编译失败"
return 1
fi
}
# 服务列表:名称 | 源码目录(相对 ROOT | 包路径
declare -A SVC_DIR=(
[openim-server]="open-im-server"
[chat-rpc]="chat"
[admin-rpc]="chat"
[chat-api]="chat"
[admin-api]="chat"
[meetingmsg]="meetingmsg"
[livecloud]="livecloud"
[livestream]="livestream"
[build-server]="build-server"
)
declare -A SVC_PKG=(
[openim-server]="./cmd/main.go"
[chat-rpc]="./cmd/rpc/chat-rpc/"
[admin-rpc]="./cmd/rpc/admin-rpc/"
[chat-api]="./cmd/api/chat-api/"
[admin-api]="./cmd/api/admin-api/"
[meetingmsg]="."
[livecloud]="."
[livestream]="."
[build-server]="."
)
# ── 判断是编译单个还是全部 ────────────────────────────────────────────────────
TARGET="${1:-all}"
if [[ "$TARGET" == "all" ]]; then
step "编译全部服务(共 ${#SVC_DIR[@]} 个)"
FAILED=()
for svc in openim-server chat-rpc admin-rpc chat-api admin-api meetingmsg livecloud livestream build-server; do
_build "$svc" "${SVC_DIR[$svc]}" "${SVC_PKG[$svc]}" || FAILED+=("$svc")
done
echo ""
if [[ ${#FAILED[@]} -eq 0 ]]; then
success "所有服务编译完成!"
ls -lh "$BUILD_DIR/" | awk 'NR>1 {printf " %-20s %s\n", $NF, $5}'
else
error "以下服务编译失败: ${FAILED[*]}"
echo ""
echo "排查建议:"
echo " 1. cd $ROOT_DIR/<service-dir> && go mod tidy"
echo " 2. 检查 Go 版本: go version推荐 1.21+"
echo " 3. 检查模块依赖: go mod download"
exit 1
fi
else
# 编译单个服务
if [[ -z "${SVC_DIR[$TARGET]:-}" ]]; then
error "未知服务: $TARGET"
echo "可用: ${!SVC_DIR[*]}"
exit 1
fi
step "编译单个服务: $TARGET"
_build "$TARGET" "${SVC_DIR[$TARGET]}" "${SVC_PKG[$TARGET]}"
success "$TARGET 编译完成"
fi
echo ""
echo -e "${BOLD}下一步:${NC}"
echo -e " 启动所有后端服务:"
echo -e " ${CYAN}./deploy-test/05-start.sh${NC}"
echo -e " 或只启动单个服务:"
echo -e " ${CYAN}./deploy-test/05-start.sh openim-server${NC}"