简化部署步骤
This commit is contained in:
parent
3cd38e1ce3
commit
c343b2bc91
@ -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
|
||||
|
||||
# 查看日志
|
||||
|
||||
@ -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
|
||||
|
||||
# 启动 Agent(Agent 会自动管理 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
|
||||
|
||||
@ -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
|
||||
Loading…
Reference in New Issue
Block a user