7.3 KiB
IPCam Orange Pi Dashboard - INSTALL
Tài liệu này hướng dẫn triển khai toàn bộ hệ thống trên duy nhất một thiết bị Orange Pi 5.
Mục tiêu:
MediaMTXchạy trên chính Orange Pi 5FastAPI backendchạy trên chính Orange Pi 5Frontend Reactbuild static và serve ngay trên chính Orange Pi 5- File recordings lưu trên ổ cứng gắn trực tiếp vào Orange Pi 5
0) Cấu hình phần cứng khuyến nghị
Bắt buộc theo kịch bản này:
- Thiết bị:
Orange Pi 5 - RAM:
8GBhoặc16GB - Ổ lưu trữ:
>= 256GB
Khuyến nghị mạnh:
- Dùng
NVMe SSDthay vì thẻ nhớ - Nếu ghi nhiều camera hoặc lưu lâu ngày, nên dùng
512GBhoặc1TB - Không nên để recordings trên thẻ microSD
1) Mô hình triển khai
Tất cả dịch vụ chạy trên cùng một máy Orange Pi 5:
Orange Pi 5
|- MediaMTX
|- FastAPI backend
|- Frontend React static
`- Thu muc recordings tren SSD/NVMe
Không cần thêm server riêng cho MediaMTX hay dashboard.
2) Yêu cầu hệ điều hành và phần mềm
- Orange Pi 5 chạy Debian/Ubuntu
- Python
3.9+khuyến nghị3.10+ - Node.js
20+ - Docker + Docker Compose plugin
- Nginx hoặc Apache nếu muốn serve frontend static production
3) Chuẩn bị ổ lưu trữ
Ví dụ SSD được mount tại /mnt/ssd.
Tạo thư mục dự án và thư mục recordings:
sudo mkdir -p /mnt/ssd/IPCam_OrangePi_Dashboard
sudo mkdir -p /mnt/ssd/IPCam_OrangePi_Dashboard/mediamtx/recordings
sudo chown -R $USER:$USER /mnt/ssd/IPCam_OrangePi_Dashboard
Clone source:
cd /mnt/ssd
git clone https://git.ttcorp.net/orangepivietnam/IPCam_OrangePi_Dashboard
cd IPCam_OrangePi_Dashboard
4) MediaMTX cấu hình tối thiểu
Trong mediamtx/mediamtx.yml cần có tối thiểu:
api: yes
apiAddress: :9997
webrtc: yes
webrtcAddress: :8889
webrtcAllowOrigin: '*'
record: yes
recordFormat: fmp4
recordPath: /mnt/ssd/IPCam_OrangePi_Dashboard/mediamtx/recordings/%path/%Y-%m-%d_%H-%M-%S-%f
recordPartDuration: 5m
Ghi chú:
recordPathnên trỏ thẳng vào SSD/NVMe- Dashboard sẽ tự đồng bộ camera vào
mediamtx.yml - Dashboard cần truy cập được MediaMTX API ở
127.0.0.1:9997
4.1) Nếu MediaMTX API dùng auth
Nếu MediaMTX bật auth và dashboard bị 401 Unauthorized, thêm user có quyền api:
authMethod: internal
authInternalUsers:
- user: dashboard
pass: dashboard_password
ips: ['127.0.0.1', '::1', '192.168.1.0/24']
permissions:
- action: api
Sau đó khai báo trong api/data/config.json:
{
"mediamtx_api_user": "dashboard",
"mediamtx_api_pass": "dashboard_password"
}
5) Chạy MediaMTX trên Orange Pi 5
Nếu project đã có mediamtx/docker-compose.yml, chạy:
cd /mnt/ssd/IPCam_OrangePi_Dashboard
docker compose -f mediamtx/docker-compose.yml up -d
Kiểm tra:
docker compose -f mediamtx/docker-compose.yml ps
curl http://127.0.0.1:9997/v3/paths/list
6) Cài backend FastAPI
6.1) Cài dependencies
cd /mnt/ssd/IPCam_OrangePi_Dashboard
python3 -m venv api/.venv
source api/.venv/bin/activate
pip install -r api/requirements.txt
6.2) Cấu hình backend
Backend chỉ đọc cấu hình từ api/data/config.json.
File này chứa:
- thông số MediaMTX
- thư mục recordings
- danh sách camera
- lịch ghi hình
- cổng backend
Chạy lần đầu, backend có thể tự tạo file nếu chưa có.
Các giá trị nên dùng trên Orange Pi 5:
mediamtx_api_url:http://127.0.0.1:9997mediamtx_webrtc_url:http://127.0.0.1:8889recordings_dir:/mnt/ssd/IPCam_OrangePi_Dashboard/mediamtx/recordingsapi_port:8008
Ví dụ api/data/config.json:
{
"mediamtx_api_url": "http://127.0.0.1:9997",
"mediamtx_webrtc_url": "http://127.0.0.1:8889",
"mediamtx_api_user": null,
"mediamtx_api_pass": null,
"recordings_dir": "/mnt/ssd/IPCam_OrangePi_Dashboard/mediamtx/recordings",
"api_port": 8008,
"cameras": [],
"schedule": {
"enabled": true,
"weekdays_from": "18:00",
"weekdays_to": "08:00",
"weekend_all_day": true
}
}
6.3) Chạy backend
cd /mnt/ssd/IPCam_OrangePi_Dashboard
source api/.venv/bin/activate
python3 -m api.run
Kiểm tra:
curl http://127.0.0.1:8008/api/health
7) Build frontend
cd /mnt/ssd/IPCam_OrangePi_Dashboard
npm install
npm run build
Output nằm ở dist/.
8) Serve frontend production
Có thể dùng Nginx hoặc Apache. Mục tiêu là:
- serve thư mục
dist/ - reverse proxy
/apivề backend127.0.0.1:8008 - reverse proxy
/videosvề backend127.0.0.1:8008
8.1) Ví dụ Nginx
server {
listen 80;
server_name _;
root /mnt/ssd/IPCam_OrangePi_Dashboard/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8008;
}
location /videos/ {
proxy_pass http://127.0.0.1:8008;
}
}
8.2) Ví dụ Apache
<VirtualHost *:80>
ServerName _
DocumentRoot /mnt/ssd/IPCam_OrangePi_Dashboard/dist
<Directory /mnt/ssd/IPCam_OrangePi_Dashboard/dist>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.html [L]
ProxyPreserveHost On
ProxyPass /api/ http://127.0.0.1:8008/api/
ProxyPassReverse /api/ http://127.0.0.1:8008/api/
ProxyPass /videos/ http://127.0.0.1:8008/videos/
ProxyPassReverse /videos/ http://127.0.0.1:8008/videos/
</VirtualHost>
Nếu dùng Apache:
sudo a2enmod rewrite proxy proxy_http
sudo systemctl reload apache2
9) Systemd service cho backend
Tạo file /etc/systemd/system/ipcam-dashboard.service:
[Unit]
Description=IPCam Dashboard Backend
After=network.target
[Service]
WorkingDirectory=/mnt/ssd/IPCam_OrangePi_Dashboard
ExecStart=/mnt/ssd/IPCam_OrangePi_Dashboard/api/.venv/bin/python /mnt/ssd/IPCam_OrangePi_Dashboard/api/run.py
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
Enable:
sudo systemctl daemon-reload
sudo systemctl enable --now ipcam-dashboard
sudo systemctl status ipcam-dashboard
10) Firewall/cổng cần mở
Tùy hệ thống mạng, cần cho phép:
8554/tcpcho RTSP8889/tcpcho WebRTC HTTP9997/tcpcho MediaMTX API8189/udpcho ICE/WebRTC80/tcphoặc443/tcpnếu serve dashboard qua web server
11) Kiểm tra nhanh sau triển khai
- Backend:
curl http://127.0.0.1:8008/api/health - MediaMTX API:
curl http://127.0.0.1:9997/v3/paths/list - Frontend: mở
http://<ip-orange-pi>/ - Trong Settings:
- thêm camera bằng RTSP URL
- lưu cấu hình
- kiểm tra camera xuất hiện trong Live View
- kiểm tra file recordings được tạo trên SSD/NVMe
12) Ghi chú vận hành
- Nên để toàn bộ project và recordings trên cùng SSD/NVMe
- Nếu ghi nhiều camera liên tục, cần theo dõi dung lượng trống định kỳ
- Orange Pi 5 RAM
16GBphù hợp hơn khi số camera lớn hơn hoặc cần playback đồng thời - Khi cần ổn định cao, nên dùng nguồn tốt và tản nhiệt phù hợp cho Orange Pi 5