#!/bin/bash # 直播系统一键部署脚本 # 使用方法: ./deploy.sh 你的服务器公网IP set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 直播系统一键部署脚本${NC}" echo -e "${GREEN}========================================${NC}" # 检查参数 if [ -z "$1" ]; then echo -e "${YELLOW}请输入服务器公网IP:${NC}" read SERVER_IP else SERVER_IP=$1 fi if [ -z "$SERVER_IP" ]; then echo -e "${RED}错误: 必须提供服务器公网IP${NC}" exit 1 fi echo -e "${GREEN}服务器IP: ${SERVER_IP}${NC}" # 检查 Docker 是否安装 if ! command -v docker &> /dev/null; then echo -e "${YELLOW}Docker 未安装,正在安装...${NC}" curl -fsSL https://get.docker.com | sh systemctl start docker systemctl enable docker fi # 检查 docker-compose 是否安装 if ! command -v docker-compose &> /dev/null; then echo -e "${YELLOW}Docker Compose 未安装,正在安装...${NC}" curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose fi echo -e "${GREEN}Docker 版本: $(docker --version)${NC}" # 创建生产环境配置 echo -e "${GREEN}创建生产环境配置...${NC}" cat > .env.production << EOF NODE_ENV=production PORT=3001 SRS_HOST=srs SRS_RTMP_PORT=1935 SRS_HTTP_PORT=8080 SRS_API_PORT=1985 PUBLIC_HOST=${SERVER_IP} EOF # 更新 docker-compose 配置 cat > docker-compose.prod.yml << EOF version: '3.8' services: srs: image: ossrs/srs:5 container_name: srs-server ports: - "25002:1935" - "25003:8080" - "1985:1985" volumes: - ./docker/srs/srs.conf:/usr/local/srs/conf/srs.conf restart: always networks: - live-network api-server: build: context: . dockerfile: Dockerfile container_name: api-server ports: - "25001:3001" environment: - NODE_ENV=production - PORT=3001 - SRS_HOST=srs - SRS_RTMP_PORT=1935 - SRS_HTTP_PORT=8080 - PUBLIC_SRS_HOST=${SERVER_IP} - PUBLIC_SRS_RTMP_PORT=25002 - PUBLIC_SRS_HTTP_PORT=25003 depends_on: - srs restart: always networks: - live-network networks: live-network: driver: bridge EOF # 停止旧容器 echo -e "${GREEN}停止旧容器...${NC}" docker-compose -f docker-compose.prod.yml down 2>/dev/null || true # 构建并启动 echo -e "${GREEN}构建并启动服务...${NC}" docker-compose -f docker-compose.prod.yml up -d --build # 等待服务启动 echo -e "${YELLOW}等待服务启动...${NC}" sleep 10 # 检查服务状态 echo -e "${GREEN}检查服务状态...${NC}" docker-compose -f docker-compose.prod.yml ps echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 部署完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "API 服务地址: ${YELLOW}http://${SERVER_IP}:25001${NC}" echo -e "RTMP 推流地址: ${YELLOW}rtmp://${SERVER_IP}:25002/live/房间流密钥${NC}" echo -e "HLS 播放地址: ${YELLOW}http://${SERVER_IP}:25003/live/房间流密钥.m3u8${NC}" echo -e "FLV 播放地址: ${YELLOW}http://${SERVER_IP}:25003/live/房间流密钥.flv${NC}" echo "" echo -e "${YELLOW}Android App 配置:${NC}" echo -e "请将 build.gradle.kts 中的 API_BASE_URL_DEVICE 改为:" echo -e "${GREEN}http://${SERVER_IP}:25001/api/${NC}" echo ""