#!/usr/bin/env bash set -Eeuo pipefail # 服务器运行脚本:只加载本地镜像包并启动 compose,不做源码构建。 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" PROJECT_NAME="${PROJECT_NAME:-emp-test}" ENV_FILE="${ENV_FILE:-.env}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" IMAGE_TAR="${IMAGE_TAR:-images.tar}" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } die() { echo "ERROR: $*" >&2 exit 1 } need_cmd() { command -v "$1" >/dev/null 2>&1 || die "缺少命令:$1" } need_cmd docker if docker compose version >/dev/null 2>&1; then DC=(docker compose) elif command -v docker-compose >/dev/null 2>&1; then DC=(docker-compose) else die "未安装 docker compose" fi if [[ ! -f "$ENV_FILE" ]]; then cp .env.example "$ENV_FILE" die "已生成 $ENV_FILE,请先修改密码、PUBLIC_HOST 和端口后重新执行:sh install.sh" fi if [[ ! -f "$COMPOSE_FILE" ]]; then die "未找到 $COMPOSE_FILE" fi if [[ -f "$IMAGE_TAR" ]]; then log "加载镜像包:$IMAGE_TAR" docker load -i "$IMAGE_TAR" else log "未找到 $IMAGE_TAR,将尝试使用本机已有镜像或在线拉取镜像" fi log "启动隔离测试环境:$PROJECT_NAME" "${DC[@]}" \ --env-file "$ENV_FILE" \ -f "$COMPOSE_FILE" \ -p "$PROJECT_NAME" \ up -d log "当前容器状态" "${DC[@]}" \ --env-file "$ENV_FILE" \ -f "$COMPOSE_FILE" \ -p "$PROJECT_NAME" \ ps log "完成。前端地址请访问 .env 中的 PUBLIC_HOST:ADMIN_HOST_PORT。"