#!/bin/bash # RTSP视频流管理系统 - Docker快速启动脚本 # 适用于AMD64平台 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 打印带颜色的消息 print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查Docker是否安装 check_docker() { if ! command -v docker &> /dev/null; then print_error "Docker未安装,请先安装Docker" exit 1 fi print_info "Docker版本: $(docker --version)" } # 检查Docker Compose是否安装 check_docker_compose() { if command -v docker-compose &> /dev/null; then print_info "Docker Compose版本: $(docker-compose --version)" return 0 elif docker compose version &> /dev/null; then print_info "Docker Compose (plugin)版本: $(docker compose version)" return 0 else print_warn "Docker Compose未安装,将使用docker命令" return 1 fi } # 创建必要的目录 create_directories() { print_info "创建输出目录..." mkdir -p output print_info "输出目录已创建: $(pwd)/output" } # 使用Docker Compose启动 start_with_compose() { print_info "使用Docker Compose启动服务..." if command -v docker-compose &> /dev/null; then docker-compose up -d else docker compose up -d fi print_info "服务已启动" } # 使用Docker命令启动 start_with_docker() { print_info "使用Docker命令启动服务..." # 检查容器是否已存在 if docker ps -a | grep -q jtjai_media; then print_warn "检测到已存在的容器,正在删除..." docker rm -f jtjai_media fi # 构建镜像 print_info "构建Docker镜像..." docker build --build-arg BUILDPLATFORM=linux/amd64 --build-arg TARGETPLATFORM=linux/amd64 -t jtjai_media:latest . # 运行容器 print_info "启动Docker容器..." docker run -d \ --name jtjai_media \ --platform linux/amd64 \ -p 8080:8080 \ -v "$(pwd)/output:/app/output" \ -v "$(pwd)/config.json:/app/config.json:ro" \ --restart unless-stopped \ jtjai_media:latest print_info "服务已启动" } # 显示访问信息 show_access_info() { echo "" print_info "==========================================" print_info "RTSP视频流管理系统已成功启动!" print_info "==========================================" echo "" print_info "访问地址:" echo " 🌐 Web管理界面: http://localhost:8080/manager" echo " 🏠 主页: http://localhost:8080/" echo " 📊 API文档: http://localhost:8080/api" echo "" print_info "系统特性:" echo " 🔄 自动无限循环拉取RTSP流" echo " 📁 按时间戳自动分类存储视频文件" echo " 🌐 Web界面实时监控和管理" echo " ⚡ Docker容器化部署,即启即用" echo "" print_info "管理命令:" echo " 查看实时日志: docker logs -f jtjai_media" echo " 停止所有服务: docker stop jtjai_media" echo " 重启服务: docker restart jtjai_media" echo " 删除容器: docker rm -f jtjai_media" echo " 停止脚本: ./docker-stop.sh" echo "" print_info "输出目录: $(pwd)/output" print_warn "注意:系统将持续运行,按Ctrl+C停止容器内程序但保持Web服务" print_info "==========================================" } # 主函数 main() { echo "" print_info "==========================================" print_info "RTSP视频流管理系统 - Docker部署" print_info "平台: AMD64" print_info "==========================================" echo "" # 检查Docker check_docker # 创建目录 create_directories # 检查并启动 if check_docker_compose; then start_with_compose else start_with_docker fi # 等待服务启动 print_info "等待服务启动..." sleep 3 # 检查服务状态 if docker ps | grep -q jtjai_media; then print_info "✅ 容器运行正常" # 显示访问信息 show_access_info # 询问是否查看日志 echo "" read -p "是否查看实时日志? (y/n) " -n 1 -r echo "" if [[ $REPLY =~ ^[Yy]$ ]]; then docker logs -f jtjai_media fi else print_error "❌ 容器启动失败" print_info "查看错误日志:" docker logs jtjai_media exit 1 fi } # 执行主函数 main