#!/usr/bin/env bash set -euo pipefail if [[ ${EUID} -ne 0 ]]; then echo "请在仓库根目录执行:sudo bash ./install-docker.sh" >&2 exit 1 fi repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$repo_root" [[ -f Dockerfile && -f deploy/dobotai-dingtalk/install-docker.sh ]] || { echo "必须从完整DobotAI源码仓库根目录运行。" >&2; exit 1; } command -v git >/dev/null || { echo "未找到git。" >&2; exit 1; } git rev-parse --is-inside-work-tree >/dev/null || { echo "请从git clone得到的仓库中执行。" >&2; exit 1; } install_docker_if_missing() { if command -v docker >/dev/null && docker compose version >/dev/null 2>&1; then return; fi command -v apt-get >/dev/null || { echo "请先安装Docker Engine和Docker Compose v2。" >&2; exit 1; } export DEBIAN_FRONTEND=noninteractive apt-get update if apt-cache show docker-compose-v2 >/dev/null 2>&1; then apt-get install -y docker.io docker-compose-v2 elif apt-cache show docker-compose-plugin >/dev/null 2>&1; then apt-get install -y docker.io docker-compose-plugin else echo "APT源缺少Docker Compose v2插件。" >&2; exit 1 fi systemctl enable --now docker } install_docker_if_missing docker compose version >/dev/null commit_sha="$(git rev-parse HEAD)" commit_short="$(git rev-parse --short=12 HEAD)" image="dobotai-dingtalk:local-${commit_short}" echo "[1/2] 构建DobotAI应用镜像:$image" docker build --build-arg "GOPROXY=https://goproxy.cn,direct" --build-arg "VERSION=local-${commit_short}" --build-arg "COMMIT_SHA=${commit_sha}" --build-arg "BUILD_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)" --label "org.opencontainers.image.revision=${commit_sha}" --tag "$image" "$repo_root" echo "[2/2] 安装应用容器资产;阿里云RDS将在配置后检查或初始化" export DOBOTAI_IMAGE="$image" export DOBOTAI_SOURCE_ROOT="$repo_root" exec bash "$repo_root/deploy/dobotai-dingtalk/install-docker.sh"