zhibo/live-streaming/deploy.sh

138 lines
3.5 KiB
Bash
Raw Normal View History

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