#!/usr/bin/env bash # 直接重启:检测 Docker 并一键安装(无则安装),再 docker compose 重启,不拉代码 # 用法:cd 项目根 && chmod +x restart.sh && ./restart.sh # 行尾:LF set -e ROOT="${PROJECT_ROOT:-$(cd "$(dirname "$0")" && pwd)}" cd "$ROOT" run_sudo() { sudo "$@"; } # ---------- 检测并安装 Docker ---------- ensure_docker() { if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then echo "Docker 已就绪." return 0 fi echo "未检测到 Docker 或未启动,正在安装..." if command -v apt-get >/dev/null 2>&1; then run_sudo apt-get update -qq run_sudo apt-get install -y docker.io docker-compose-plugin 2>/dev/null || run_sudo apt-get install -y docker.io docker-compose run_sudo systemctl start docker run_sudo systemctl enable docker elif command -v dnf >/dev/null 2>&1 || command -v yum >/dev/null 2>&1; then if command -v dnf >/dev/null 2>&1; then run_sudo dnf install -y docker docker-compose-plugin 2>/dev/null || run_sudo dnf install -y docker docker-compose else run_sudo yum install -y docker docker-compose-plugin 2>/dev/null || run_sudo yum install -y docker docker-compose fi run_sudo systemctl start docker run_sudo systemctl enable docker else echo "无法自动安装 Docker,请先安装 Docker 与 Docker Compose 后重试." exit 1 fi echo "Docker 安装完成." } ensure_docker compose_cmd() { run_sudo docker compose "$@" 2>/dev/null || run_sudo docker-compose "$@"; } echo "重启 yh_web ($ROOT)..." [ -f server/.env ] && sed -i 's/\r$//' server/.env [ -f server/.env ] && set -a && source server/.env && set +a compose_cmd down 2>/dev/null || true compose_cmd up -d echo "完成. api:9527 web:9528 admin:9529"