#!/usr/bin/env bash # ============================================================================= # 05-start.sh — 启动后端 Go 服务 # # 用法: # ./05-start.sh # 按依赖顺序启动全部服务 # ./05-start.sh # 只启动指定服务 # # 启动顺序(有依赖关系): # openim-server → chat-rpc / admin-rpc → chat-api / admin-api # → meetingmsg / livecloud / livestream # # 日志文件: .local-dev/logs/.log # PID 文件: .local-dev/pids/.pid # ============================================================================= set -euo pipefail source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" load_env init_dirs init_script_log # ← 脚本执行日志 header "步骤 5 / 5 — 启动后端服务" TARGET="${1:-all}" # ── 服务启动配置 ───────────────────────────────────────────────────────────── # 格式: svc_workdir[name] svc_args[name] declare -A svc_workdir=( [openim-server]="$ROOT_DIR/open-im-server" [chat-rpc]="$ROOT_DIR/chat" [admin-rpc]="$ROOT_DIR/chat" [chat-api]="$ROOT_DIR/chat" [admin-api]="$ROOT_DIR/chat" [meetingmsg]="$ROOT_DIR/meetingmsg" [livecloud]="$ROOT_DIR/livecloud" [livestream]="$ROOT_DIR/livestream" [build-server]="$ROOT_DIR/build-server" ) declare -A svc_args=( [openim-server]="-c $ROOT_DIR/open-im-server/config" [chat-rpc]="-c $ROOT_DIR/chat/config" [admin-rpc]="-c $ROOT_DIR/chat/config" [chat-api]="-c $ROOT_DIR/chat/config" [admin-api]="-c $ROOT_DIR/chat/config" [meetingmsg]="" [livecloud]="" [livestream]="" [build-server]="" ) declare -A svc_desc=( [openim-server]=":10002 (API) :10001 (MsgGateway WS)" [chat-rpc]="内部 RPC" [admin-rpc]="内部 RPC" [chat-api]=":10008" [admin-api]=":10009" [meetingmsg]=":8000 (WS)" [livecloud]=":8080" [livestream]=":8081" [build-server]=":8281" ) _start_one() { local svc="$1" start_svc "$svc" \ "$BUILD_DIR/$svc" \ "${svc_args[$svc]}" \ "${svc_workdir[$svc]}" } # ── 启动全部(有序) ────────────────────────────────────────────────────────── _start_all() { step "第 1 组: openim-server(核心 IM 服务)" _start_one openim-server info "等待 openim-server 将 RPC 注册到 Etcd... (8s)" sleep 8 step "第 2 组: chat RPC 服务" _start_one chat-rpc _start_one admin-rpc info "等待 chat RPC 注册到 Etcd... (4s)" sleep 4 step "第 3 组: chat API 服务" _start_one chat-api _start_one admin-api step "第 4 组: 业务服务" _start_one meetingmsg _start_one livecloud _start_one livestream _start_one build-server echo "" echo -e "${BOLD}服务汇总:${NC}" for svc in openim-server chat-rpc admin-rpc chat-api admin-api meetingmsg livecloud livestream build-server; do print_svc_status "$svc" "${svc_desc[$svc]}" done echo "" echo -e "${BOLD}常用地址:${NC}" echo " IM API: http://localhost:10002" echo " IM WebSocket: ws://localhost:10001" echo " Chat API: http://localhost:10008" echo " Admin API: http://localhost:10009" echo " MeetingMsg WS: ws://localhost:8000" echo " Livecloud: http://localhost:8080" echo " Livestream: http://localhost:8081" echo " Build Server: http://localhost:8281" echo "" echo -e "${BOLD}查看日志:${NC}" echo -e " ${CYAN}./deploy-test/logs.sh openim-server${NC}" echo -e " ${CYAN}./deploy-test/logs.sh chat-api${NC}" } # ── 启动单个 ────────────────────────────────────────────────────────────────── _start_single() { local svc="$1" if [[ -z "${svc_workdir[$svc]:-}" ]]; then error "未知服务: $svc" echo "可用: ${!svc_workdir[*]}" exit 1 fi step "启动: $svc" _start_one "$svc" echo "" print_svc_status "$svc" "${svc_desc[$svc]}" } # ── 入口 ───────────────────────────────────────────────────────────────────── if [[ "$TARGET" == "all" ]]; then _start_all else _start_single "$TARGET" fi