简化部署步骤

This commit is contained in:
haotian 2026-02-25 14:29:59 +08:00
parent 3cd38e1ce3
commit c343b2bc91
3 changed files with 67 additions and 178 deletions

View File

@ -28,16 +28,15 @@ cd ~/apps/OrangePi3588Media
sudo ./scripts/manage.sh install
```
安装过程会提示:
- **运行模式**
- `独立模式` - Media Server 由 systemd 直接管理
- `Agent 模式` - Media Server 由 Agent 管理(推荐,支持 Web 界面)
安装过程会提示选择**配置文件**
- **配置文件**
- `test_cam1_face_det_rtsp_server.json` - 人脸检测(推荐)
- `sample_cam1_native_rtsp_face.json` - 完整功能
- `test_cam1_face_det_recog_rtsp_server.json` - 人脸识别
- `sample_cam1.json` - 完整功能(需手动修复)
Media Server 由 Agent 统一管理,可通过 Web 界面 `http://<设备IP>:9100` 查看状态和控制服务。
### 3. 查看状态
```bash
@ -89,30 +88,15 @@ sudo ./scripts/manage.sh install
## 管理命令
### 独立模式
Agent 统一管理 Media Server使用以下命令
```bash
# 启动/停止/重启
sudo systemctl start media-server
sudo systemctl stop media-server
sudo systemctl restart media-server
# 查看状态
sudo systemctl status media-server
# 查看日志
sudo journalctl -u media-server -f
```
### Agent 模式
```bash
# 启动/停止/重启
# 启动/停止/重启 Agent同时会启动/停止 Media Server
sudo systemctl start rk3588-agent
sudo systemctl stop rk3588-agent
sudo systemctl restart rk3588-agent
# 查看状态
# 查看 Agent 状态
sudo systemctl status rk3588-agent
# 查看日志

View File

@ -1,6 +1,6 @@
#!/bin/bash
# RK3588 Media Server + Agent 统一管理脚本
# 用法: sudo ./install.sh [install|status|uninstall]
# 用法: sudo ./manage.sh [install|status|uninstall]
set -e
@ -35,12 +35,12 @@ cmd_install() {
echo "Agent 安装目录: $AGENT_INSTALL_DIR"
echo ""
# 检查编译产物
# 检查 Media Server 编译产物
if [ ! -f "$BUILD_DIR/media-server" ]; then
echo -e "${RED}错误: 未找到编译好的 media-server${NC}"
echo "请先编译项目:"
echo " cd $PROJECT_DIR"
echo " cmake -S . -B build -DCMAKE_BUILD_TYPE=Release ..."
echo " cmake -S . -B build -DCMAKE_BUILD_TYPE=Release"
echo " cmake --build build -j\$(nproc)"
exit 1
fi
@ -53,7 +53,7 @@ cmd_install() {
[[ ! $REPLY =~ ^[Yy]$ ]] && exit 1
fi
# 检查 agent
# 检查 Agent 编译产物(强制要求)
AGENT_SOURCE=""
if [ -f "$PROJECT_DIR/agent/rk3588-agent_linux_arm64" ]; then
AGENT_SOURCE="$PROJECT_DIR/agent/rk3588-agent_linux_arm64"
@ -62,31 +62,16 @@ cmd_install() {
fi
if [ -z "$AGENT_SOURCE" ]; then
echo -e "${YELLOW}警告: 未找到编译好的 rk3588-agent${NC}"
echo " 如需 Agent 功能,请先编译:"
echo " cd $PROJECT_DIR/agent"
echo " GOOS=linux GOARCH=arm64 go build -o rk3588-agent_linux_arm64 ./cmd"
echo -e "${RED}错误: 未找到编译好的 rk3588-agent${NC}"
echo "请先编译 Agent:"
echo " cd $PROJECT_DIR/agent"
echo " GOOS=linux GOARCH=arm64 go build -o rk3588-agent_linux_arm64 ./cmd"
exit 1
fi
echo -e "${GREEN}${NC} 编译产物检查通过"
echo ""
# 选择模式
echo "请选择运行模式:"
echo " 1) 独立模式 - Media Server 由 systemd 直接管理 (简单)"
echo " 2) Agent 模式 - Media Server 由 Agent 管理 (推荐,支持 Web 管理)"
echo ""
read -p "请输入选项 [1-2默认2]: " mode_choice
mode_choice=${mode_choice:-2}
USE_AGENT=false
if [ "$mode_choice" = "2" ] && [ -n "$AGENT_SOURCE" ]; then
USE_AGENT=true
elif [ "$mode_choice" = "2" ] && [ -z "$AGENT_SOURCE" ]; then
echo -e "${YELLOW}Agent 未编译,使用独立模式${NC}"
fi
echo ""
# 选择配置文件
echo "请选择配置文件:"
echo " 1) test_cam1_face_det_rtsp_server.json (人脸检测)"
@ -105,12 +90,10 @@ cmd_install() {
*) CONFIG_FILE="$PROJECT_DIR/configs/test_cam1_face_det_rtsp_server.json" ;;
esac
echo ""
echo -e "运行模式: ${GREEN}$([ "$USE_AGENT" = true ] && echo "Agent 模式" || echo "独立模式")${NC}"
echo ""
# 安装 Media Server
echo -e "${YELLOW}[1/4] 安装 Media Server...${NC}"
echo -e "${YELLOW}[1/3] 安装 Media Server...${NC}"
rm -rf "$INSTALL_DIR"
mkdir -p "$INSTALL_DIR"/{bin/plugins,lib,etc,logs,models,web/hls}
@ -135,11 +118,11 @@ cmd_install() {
# 处理配置
cp "$CONFIG_FILE" "$INSTALL_DIR/etc/media-server.json"
python3 << EOF
python3 << 'EOF'
import json, os
config_file = "$INSTALL_DIR/etc/media-server.json"
install_dir = "$INSTALL_DIR"
project_dir = "$PROJECT_DIR"
config_file = "/opt/rk3588-media-server/etc/media-server.json"
install_dir = "/opt/rk3588-media-server"
project_dir = os.path.expanduser("~/apps/OrangePi3588Media")
def fix_path(path):
if not path or not isinstance(path, str):
@ -188,16 +171,15 @@ EOF
echo -e "${GREEN}${NC} Media Server 安装完成"
# 安装 Agent
if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then
echo -e "${YELLOW}[2/4] 安装 Agent...${NC}"
rm -rf "$AGENT_INSTALL_DIR"
mkdir -p "$AGENT_INSTALL_DIR"
mkdir -p "/var/lib/rk3588-agent"
cp "$AGENT_SOURCE" "$AGENT_INSTALL_DIR/rk3588-agent"
chmod +x "$AGENT_INSTALL_DIR/rk3588-agent"
cat > "$AGENT_INSTALL_DIR/agent.config.json" << 'AGENT_CONFIG'
echo -e "${YELLOW}[2/3] 安装 Agent...${NC}"
rm -rf "$AGENT_INSTALL_DIR"
mkdir -p "$AGENT_INSTALL_DIR"
mkdir -p "/var/lib/rk3588-agent"
cp "$AGENT_SOURCE" "$AGENT_INSTALL_DIR/rk3588-agent"
chmod +x "$AGENT_INSTALL_DIR/rk3588-agent"
cat > "$AGENT_INSTALL_DIR/agent.config.json" << 'AGENT_CONFIG'
{
"agent": {
"listen": "0.0.0.0:9100",
@ -224,35 +206,14 @@ EOF
}
}
AGENT_CONFIG
chown -R orangepi:orangepi "/var/lib/rk3588-agent"
chmod 755 "$AGENT_INSTALL_DIR"
echo -e "${GREEN}${NC} Agent 安装完成"
fi
chown -R orangepi:orangepi "/var/lib/rk3588-agent"
chmod 755 "$AGENT_INSTALL_DIR"
echo -e "${GREEN}${NC} Agent 安装完成"
# 安装服务
echo -e "${YELLOW}[3/4] 安装 Systemd 服务...${NC}"
echo -e "${YELLOW}[3/3] 安装 Systemd 服务...${NC}"
cat > "$SERVICE_DIR/media-server.service" << 'EOF'
[Unit]
Description=RK3588 Media Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/rk3588-media-server
ExecStart=/opt/rk3588-media-server/bin/media-server --config /opt/rk3588-media-server/etc/media-server.json
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then
cat > "$SERVICE_DIR/rk3588-agent.service" << 'EOF'
cat > "$SERVICE_DIR/rk3588-agent.service" << 'EOF'
[Unit]
Description=RK3588 Agent Service
After=network.target
@ -270,24 +231,15 @@ StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
fi
systemctl daemon-reload
touch /var/run/rk3588sys-media-server.pid
chmod 666 /var/run/rk3588sys-media-server.pid
echo -e "${GREEN}${NC} 服务安装完成"
# 启动服务
echo -e "${YELLOW}[4/4] 启动服务...${NC}"
if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then
systemctl disable media-server 2>/dev/null || true
systemctl stop media-server 2>/dev/null || true
systemctl enable rk3588-agent
systemctl start rk3588-agent
else
systemctl enable media-server
systemctl start media-server
fi
# 启动 AgentAgent 会自动管理 Media Server
systemctl enable rk3588-agent
systemctl start rk3588-agent
echo -e "${GREEN}${NC} 服务已启动"
# 完成
@ -296,16 +248,10 @@ EOF
echo -e "${GREEN}║ 安装完成! ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then
echo "管理命令:"
echo " 状态: sudo $0 status"
echo " 日志: sudo journalctl -u rk3588-agent -f"
echo " 界面: http://<设备IP>:9100"
else
echo "管理命令:"
echo " 状态: sudo $0 status"
echo " 日志: sudo journalctl -u media-server -f"
fi
echo "管理命令:"
echo " 状态: sudo ./manage.sh status"
echo " 日志: sudo journalctl -u rk3588-agent -f"
echo " 界面: http://<设备IP>:9100"
}
cmd_status() {
@ -325,15 +271,29 @@ cmd_status() {
fi
echo ""
echo -e "${YELLOW}[Media Server]${NC}"
if systemctl is-active --quiet media-server 2>/dev/null; then
echo -e "${YELLOW}[RK3588 Agent]${NC}"
if systemctl is-active --quiet rk3588-agent 2>/dev/null; then
echo -e " 状态: ${GREEN}● 运行中${NC}"
PID=$(systemctl show --property=MainPID --value media-server 2>/dev/null)
echo " PID: $PID"
PID=$(systemctl show --property=MainPID --value rk3588-agent 2>/dev/null)
if [ -n "$PID" ] && [ "$PID" != "0" ]; then
CPU_MEM=$(ps -p $PID -o %cpu,%mem --no-headers 2>/dev/null || echo "N/A")
echo " CPU/MEM: $CPU_MEM"
fi
echo " 管理界面: http://$(hostname -I | awk '{print $1}'):9100"
else
echo -e " 状态: ${RED}○ 停止${NC}"
fi
echo ""
echo -e "${YELLOW}[Media Server]${NC}"
# 检查 Media Server 是否由 Agent 启动
AGENT_PID=$(systemctl show --property=MainPID --value rk3588-agent 2>/dev/null)
MS_PID=$(pgrep -f "media-server" | head -1)
if [ -n "$MS_PID" ]; then
echo -e " 状态: ${GREEN}● 运行中${NC}"
echo " PID: $MS_PID"
CPU_MEM=$(ps -p $MS_PID -o %cpu,%mem --no-headers 2>/dev/null || echo "N/A")
echo " CPU/MEM: $CPU_MEM"
echo " 端口:"
ss -tlnp 2>/dev/null | grep -E "(9000|8554|8555)" | head -3 | sed 's/^/ /'
else
@ -341,33 +301,13 @@ cmd_status() {
fi
echo ""
if systemctl list-unit-files 2>/dev/null | grep -q rk3588-agent; then
echo -e "${YELLOW}[RK3588 Agent]${NC}"
if systemctl is-active --quiet rk3588-agent 2>/dev/null; then
echo -e " 状态: ${GREEN}● 运行中${NC}"
PID=$(systemctl show --property=MainPID --value rk3588-agent 2>/dev/null)
if [ -n "$PID" ] && [ "$PID" != "0" ]; then
CPU_MEM=$(ps -p $PID -o %cpu,%mem --no-headers 2>/dev/null || echo "N/A")
echo " CPU/MEM: $CPU_MEM"
fi
echo " 管理界面: http://$(hostname -I | awk '{print $1}'):9100"
else
echo -e " 状态: ${RED}○ 停止${NC}"
fi
echo ""
fi
echo -e "${YELLOW}[最近日志]${NC}"
if systemctl is-active --quiet rk3588-agent 2>/dev/null; then
journalctl -u rk3588-agent --no-pager -n 5 2>/dev/null | tail -5 || echo " 无日志"
else
journalctl -u media-server --no-pager -n 5 2>/dev/null | tail -5 || echo " 无日志"
fi
journalctl -u rk3588-agent --no-pager -n 5 2>/dev/null | tail -5 || echo " 无日志"
echo ""
echo "常用命令:"
echo " 重启: sudo systemctl restart media-server|rk3588-agent"
echo " 日志: sudo journalctl -u media-server|rk3588-agent -f"
echo " 重启: sudo systemctl restart rk3588-agent"
echo " 日志: sudo journalctl -u rk3588-agent -f"
echo " 配置: sudo nano /opt/rk3588-media-server/etc/media-server.json"
}
@ -385,12 +325,11 @@ cmd_uninstall() {
[[ ! $REPLY =~ ^[Yy]$ ]] && echo "已取消" && exit 0
echo "[1/3] 停止服务..."
systemctl stop media-server rk3588-agent 2>/dev/null || true
systemctl disable media-server rk3588-agent 2>/dev/null || true
systemctl stop rk3588-agent 2>/dev/null || true
systemctl disable rk3588-agent 2>/dev/null || true
echo -e "${GREEN}${NC} 服务已停止"
echo "[2/3] 删除服务文件..."
rm -f "$SERVICE_DIR/media-server.service"
rm -f "$SERVICE_DIR/rk3588-agent.service"
systemctl daemon-reload
echo -e "${GREEN}${NC} 服务文件已删除"
@ -431,7 +370,7 @@ case "${1:-install}" in
echo "用法: sudo ./manage.sh [install|status|uninstall]"
echo ""
echo "命令:"
echo " install - 安装/更新 Media Server 和 Agent (默认)"
echo " install - 安装 Media Server 和 Agent (默认)"
echo " status - 查看运行状态"
echo " uninstall - 卸载服务"
exit 1

View File

@ -1,34 +0,0 @@
[Unit]
Description=RK3588 Media Server
Documentation=https://github.com/your-org/OrangePi3588Media
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/rk3588-media-server
Environment="LD_LIBRARY_PATH=/opt/rk3588-media-server/lib:/opt/rk3588-media-server/bin/plugins:%LD_LIBRARY_PATH"
Environment="RKNN_LOG_LEVEL=2"
ExecStart=/opt/rk3588-media-server/bin/media-server --config /opt/rk3588-media-server/etc/media-server.json
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGTERM
TimeoutStopSec=30
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
# 资源限制
LimitNOFILE=65535
LimitNPROC=4096
# 日志输出
StandardOutput=journal
StandardError=journal
SyslogIdentifier=media-server
[Install]
WantedBy=multi-user.target