190 lines
5.2 KiB
Bash
Executable File
190 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ============================================
|
|
# 海外预约系统 - 自动部署脚本
|
|
# ============================================
|
|
|
|
set -e # 遇到错误立即退出
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 项目根目录
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# 检测 docker compose 命令
|
|
if docker compose version > /dev/null 2>&1; then
|
|
DOCKER_COMPOSE="docker compose"
|
|
elif docker-compose version > /dev/null 2>&1; then
|
|
DOCKER_COMPOSE="docker-compose"
|
|
else
|
|
echo -e "${RED}错误: 未找到 docker compose 命令${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${BLUE}============================================${NC}"
|
|
echo -e "${BLUE} 海外预约系统 - 自动部署脚本${NC}"
|
|
echo -e "${BLUE}============================================${NC}"
|
|
echo ""
|
|
|
|
# 检查 Docker 是否运行
|
|
check_docker() {
|
|
echo -e "${YELLOW}[1/5] 检查 Docker 环境...${NC}"
|
|
if ! docker info > /dev/null 2>&1; then
|
|
echo -e "${RED}错误: Docker 未运行,请先启动 Docker${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}✓ Docker 运行正常 (使用 $DOCKER_COMPOSE)${NC}"
|
|
}
|
|
|
|
# 检查环境变量文件
|
|
check_env() {
|
|
echo -e "${YELLOW}[2/5] 检查环境配置...${NC}"
|
|
if [ ! -f "$SCRIPT_DIR/.env" ]; then
|
|
echo -e "${YELLOW} .env 文件不存在,从模板创建...${NC}"
|
|
cp "$SCRIPT_DIR/.env.example" "$SCRIPT_DIR/.env"
|
|
echo -e "${YELLOW} 请编辑 $SCRIPT_DIR/.env 配置数据库等信息${NC}"
|
|
echo -e "${RED} 首次部署请先配置 .env 文件后重新运行脚本${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}✓ 环境配置已就绪${NC}"
|
|
}
|
|
|
|
# 构建 Admin 前端
|
|
build_admin() {
|
|
echo -e "${YELLOW}[3/5] 构建 Admin 前端...${NC}"
|
|
cd "$PROJECT_ROOT/admin"
|
|
|
|
# 检查 node_modules
|
|
if [ ! -d "node_modules" ]; then
|
|
echo -e "${YELLOW} 安装依赖...${NC}"
|
|
npm install
|
|
fi
|
|
|
|
echo -e "${YELLOW} 执行构建...${NC}"
|
|
npm run build
|
|
|
|
# 复制构建产物
|
|
echo -e "${YELLOW} 复制构建产物到 server/admin-dist...${NC}"
|
|
rm -rf "$SCRIPT_DIR/admin-dist"
|
|
cp -r dist "$SCRIPT_DIR/admin-dist"
|
|
|
|
echo -e "${GREEN}✓ Admin 构建完成${NC}"
|
|
}
|
|
|
|
# 构建并启动 Docker 服务
|
|
deploy_docker() {
|
|
echo -e "${YELLOW}[4/5] 构建并启动 Docker 服务...${NC}"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# 停止旧容器(如果存在)
|
|
echo -e "${YELLOW} 停止旧容器...${NC}"
|
|
$DOCKER_COMPOSE down 2>/dev/null || true
|
|
|
|
# 构建并启动
|
|
echo -e "${YELLOW} 构建镜像并启动容器...${NC}"
|
|
$DOCKER_COMPOSE up -d --build
|
|
|
|
echo -e "${GREEN}✓ Docker 服务已启动${NC}"
|
|
}
|
|
|
|
# 检查服务状态
|
|
check_status() {
|
|
echo -e "${YELLOW}[5/5] 检查服务状态...${NC}"
|
|
sleep 3
|
|
|
|
# 检查容器状态
|
|
echo ""
|
|
$DOCKER_COMPOSE ps
|
|
echo ""
|
|
|
|
# 等待服务就绪
|
|
echo -e "${YELLOW} 等待服务就绪...${NC}"
|
|
for i in {1..30}; do
|
|
if curl -s http://localhost:2701/health > /dev/null 2>&1; then
|
|
echo -e "${GREEN}✓ 服务已就绪${NC}"
|
|
break
|
|
fi
|
|
if [ $i -eq 30 ]; then
|
|
echo -e "${YELLOW} 服务启动中,请稍后检查...${NC}"
|
|
fi
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
# 显示访问信息
|
|
show_info() {
|
|
echo ""
|
|
echo -e "${GREEN}============================================${NC}"
|
|
echo -e "${GREEN} 部署完成!${NC}"
|
|
echo -e "${GREEN}============================================${NC}"
|
|
echo ""
|
|
echo -e " 访问地址:"
|
|
echo -e " Admin 后台: ${BLUE}http://localhost:2701/admin${NC}"
|
|
echo -e " API 接口: ${BLUE}http://localhost:2701/api/v1${NC}"
|
|
echo -e " 健康检查: ${BLUE}http://localhost:2701/health${NC}"
|
|
echo ""
|
|
echo -e " 常用命令:"
|
|
echo -e " 查看日志: ${YELLOW}cd server && $DOCKER_COMPOSE logs -f${NC}"
|
|
echo -e " 停止服务: ${YELLOW}cd server && $DOCKER_COMPOSE down${NC}"
|
|
echo -e " 重启服务: ${YELLOW}cd server && $DOCKER_COMPOSE restart${NC}"
|
|
echo ""
|
|
}
|
|
|
|
# 主流程
|
|
main() {
|
|
check_docker
|
|
check_env
|
|
build_admin
|
|
deploy_docker
|
|
check_status
|
|
show_info
|
|
}
|
|
|
|
# 处理命令行参数
|
|
case "${1:-}" in
|
|
--skip-build)
|
|
echo -e "${YELLOW}跳过 Admin 构建${NC}"
|
|
check_docker
|
|
check_env
|
|
deploy_docker
|
|
check_status
|
|
show_info
|
|
;;
|
|
--restart)
|
|
echo -e "${YELLOW}重启服务${NC}"
|
|
cd "$SCRIPT_DIR"
|
|
$DOCKER_COMPOSE restart
|
|
check_status
|
|
;;
|
|
--stop)
|
|
echo -e "${YELLOW}停止服务${NC}"
|
|
cd "$SCRIPT_DIR"
|
|
$DOCKER_COMPOSE down
|
|
echo -e "${GREEN}✓ 服务已停止${NC}"
|
|
;;
|
|
--logs)
|
|
cd "$SCRIPT_DIR"
|
|
$DOCKER_COMPOSE logs -f
|
|
;;
|
|
--help)
|
|
echo "用法: ./deploy.sh [选项]"
|
|
echo ""
|
|
echo "选项:"
|
|
echo " (无参数) 完整部署(构建 Admin + 启动服务)"
|
|
echo " --skip-build 跳过 Admin 构建,直接部署"
|
|
echo " --restart 重启服务"
|
|
echo " --stop 停止服务"
|
|
echo " --logs 查看日志"
|
|
echo " --help 显示帮助"
|
|
;;
|
|
*)
|
|
main
|
|
;;
|
|
esac
|