diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..ebf1858 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,91 @@ +#!/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