- Directory.Build.props: 生成 XML 注释供 Swagger 展示中文说明 - AdminHost/FishGameHost: 接入 Swashbuckle,路由 adminswagger / roomswagger - 后台前端 config.js 改为同源相对地址,适配反向代理 - socket.html(SignalR 协议文档)纳入仓库 - deploy/: 本机构建(容器内编译,规避杀软)、服务器替换脚本、Nginx 配置
63 lines
2.4 KiB
Bash
63 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
# ============================================================
|
|
# 服务器侧:加载镜像包并按需启动(无需联网、无需 sdk 镜像)
|
|
#
|
|
# 用法:
|
|
# # 1) 加载完整包并启动全部
|
|
# bash deploy/load-and-up.sh deploy/dist/buyu-images-<tag>.tar
|
|
#
|
|
# # 2) 只加载某个服务的包并只重启该服务(增量更新)
|
|
# bash deploy/load-and-up.sh deploy/dist/buyu-images-admin-<tag>.tar admin
|
|
# bash deploy/load-and-up.sh deploy/dist/buyu-images-admin-fishgame-<tag>.tar admin fishgame
|
|
#
|
|
# 说明:镜像内的配置(网关 ocelot 下游改写、捕鱼对外地址)已在构建时固化;
|
|
# 服务器只做「加载镜像 + 按需重启」,不涉及编译。
|
|
# ============================================================
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
COMPOSE="$ROOT/deploy/docker-compose.yml"
|
|
TAR="${1:-}"
|
|
shift || true
|
|
SERVICES=("$@")
|
|
|
|
log() { echo -e "\033[1;32m[部署]\033[0m $*"; }
|
|
|
|
[ -n "$TAR" ] || { echo "用法: bash deploy/load-and-up.sh <镜像包.tar> [服务名...]"; exit 1; }
|
|
[ -f "$TAR" ] || { echo "找不到镜像包: $TAR"; exit 1; }
|
|
command -v docker >/dev/null 2>&1 || { echo "未检测到 docker,请先安装 Docker"; exit 1; }
|
|
docker compose version >/dev/null 2>&1 || { echo "未检测到 docker compose v2"; exit 1; }
|
|
|
|
log "1/3 加载镜像(tar 较大,需要一点时间)..."
|
|
docker load -i "$TAR"
|
|
|
|
log "2/3 启动容器..."
|
|
mkdir -p "$ROOT/deploy"/logs/{gateway,admin,user,customer,chess,fishroom,fishgame}
|
|
mkdir -p "$ROOT/deploy"/uploads/{admin,user,customer}
|
|
|
|
if [ ${#SERVICES[@]} -gt 0 ]; then
|
|
log "仅重建/重启: ${SERVICES[*]}"
|
|
docker compose -f "$COMPOSE" up -d --force-recreate "${SERVICES[@]}"
|
|
CHECK=("${SERVICES[@]}")
|
|
else
|
|
docker compose -f "$COMPOSE" up -d
|
|
CHECK=(gateway admin user customer chess fishroom fishgame)
|
|
fi
|
|
|
|
log "3/3 健康检查..."
|
|
sleep 6
|
|
declare -A PORT=( [gateway]=8001 [admin]=5241 [user]=5245 [customer]=5247 [chess]=5242 [fishroom]=5244 [fishgame]=5248 )
|
|
for name in "${CHECK[@]}"; do
|
|
port="${PORT[$name]:-}"
|
|
[ -n "$port" ] || continue
|
|
ok=""
|
|
for _ in $(seq 1 20); do
|
|
if curl -fsS -o /dev/null --max-time 2 "http://localhost:$port/health"; then ok="✔"; break; fi
|
|
sleep 2
|
|
done
|
|
echo " ${ok:-✘} $name http://localhost:$port/health"
|
|
done
|
|
|
|
echo ""
|
|
log "完成。网关统一入口: http://<服务器IP或域名>:8001"
|