#!/usr/bin/env bash set -euo pipefail PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$PROJECT_DIR" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*" >&2; } # 确保 .env 存在 ensure_env() { if [ ! -f .env ]; then if [ -f .env.example ]; then warn ".env 文件不存在,从 .env.example 复制模板" cp .env.example .env warn "请编辑 .env 填入实际的 API Key,然后重新运行" exit 1 else error ".env.example 也不存在,请手动创建 .env" exit 1 fi fi } cmd_build() { info "构建 Docker 镜像..." docker compose build info "构建完成" } cmd_up() { ensure_env info "启动服务..." docker compose up -d info "服务已启动" info "前端: http://localhost" info "健康检查: http://localhost/api/health" } cmd_down() { info "停止服务..." docker compose down info "服务已停止" } cmd_restart() { info "重启服务..." cmd_down cmd_up } cmd_logs() { docker compose logs -f "${@}" } cmd_status() { docker compose ps } usage() { cat < 命令: build 构建 Docker 镜像 up 启动服务(后台运行) down 停止服务 restart 重启服务 logs 查看日志(可加服务名,如: $0 logs backend) status 查看服务状态 EOF } case "${1:-}" in build) cmd_build ;; up) cmd_up ;; down) cmd_down ;; restart) cmd_restart ;; logs) shift; cmd_logs "$@" ;; status) cmd_status ;; *) usage; exit 1 ;; esac