阶段2(下):运维专题 Docker/Nginx/Linux/CI-CD/Git 的课程、企业场景、面试题和可运行示例

This commit is contained in:
Shikui Wang committed 2026-10-23 15:36:06 +08:00
1 parent 5eb67c5d08
commit b8010a74f3
42 files changed
+3533 -55

No files matched your search

@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# 不自动运行:单机 Docker Compose 部署脚本示例——拉取指定版本、健康检查、失败自动回滚
# 用法:IMAGE_TAG=<提交哈希> ./deploy.sh
# 约定:compose.yaml 里 api 服务的镜像写成 image: registry.example.com/app/api:${IMAGE_TAG}
set -euo pipefail
: "${IMAGE_TAG:?需要指定 IMAGE_TAG}"
HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:8080/healthz}"
STATE_FILE="${STATE_FILE:-.deployed_tag}"
previous="$(cat "$STATE_FILE" 2>/dev/null || true)"
deploy() {
local tag="$1"
echo "部署版本 $tag"
IMAGE_TAG="$tag" docker compose pull api
IMAGE_TAG="$tag" docker compose up -d --no-deps api
}
healthy() {
for _ in $(seq 1 30); do
if curl -fsS --max-time 2 "$HEALTH_URL" >/dev/null; then
return 0
fi
sleep 2
done
return 1
}
deploy "$IMAGE_TAG"
if healthy; then
echo "$IMAGE_TAG" > "$STATE_FILE"
echo "部署成功:$IMAGE_TAG"
else
echo "健康检查失败" >&2
if [[ -n "$previous" ]]; then
echo "回滚到 $previous" >&2
deploy "$previous"
healthy && echo "已回滚到 $previous" >&2
fi
exit 1
fi