123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #!/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
|