Nodeflux Central
Instalasi

Instalasi

Menjalankan Liodra dengan Docker, memilih flag fitur (NVR, VoD, broadcast), memetakan port dan volume, lalu memverifikasi bahwa layanan hidup dan siap didaftarkan ke Lenz.

Liodra didistribusikan sebagai satu image Docker yang sudah memuat media engine dan seluruh dependensinya. Satu container cukup; tidak ada database atau layanan eksternal yang dibutuhkan. Seluruh state (device, kebijakan retensi, rekaman, video unggahan) hidup di satu volume storage.

Halaman ini mencakup backend standar, yaitu mode produksi Liodra. Untuk menjalankan Liodra di atas NVR Hikvision yang sudah ada, lihat Backend Hikvision. Referensi lengkap environment variable ada di Konfigurasi.


Persyaratan

KomponenKebutuhan
HostLinux x86-64 dengan Docker Engine. Tidak memerlukan GPU.
CPUIngest adalah stream copy, jadi ringan: ~40% CPU untuk 50 kamera 1080p H.264. Sisakan headroom untuk playback dan transcode on-demand (~2 thread per penonton HEVC tanpa hardware).
RAM~50 MB dasar + ~10-20 MB per kamera aktif.
Disk~250 MB per jam per kamera 1080p 25 fps H.264 (HEVC lebih kecil). Gunakan volume terpisah untuk rekaman dan atur retensi.
JaringanBandwidth masuk = total bitrate kamera. Bandwidth keluar = jumlah penonton × bitrate.
File descriptorSetiap stream aktif memakai ~15-20 FD. Jalankan container dengan --ulimit nofile=65535:65535.

Image

Image dipublikasikan di GitLab Container Registry Nodeflux. Login terlebih dahulu dengan kredensial GitLab Anda:

docker login registry.gitlab.com -u <gitlab-username>
ImageCatatan
registry.gitlab.com/nodefluxio/liodra:<tag>Default. RTMP, HTTP-TS, DVR, dan server RTSP di port 8554.
registry.gitlab.com/nodefluxio/liodra:<tag>-srs6Varian legacy tanpa server RTSP, dipertahankan satu rilis untuk deployment lama.

Tag yang tersedia: latest (branch main), test (merge request), dan <versi> untuk rilis (mis. 3.9.0). Untuk produksi selalu gunakan tag versi.


Quick Start

Siapkan direktori storage

Buat direktori di host yang akan menampung rekaman, video unggahan, log proses ingest, dan file konfigurasi. Direktori ini di-mount ke /usr/share/nginx/html/storage di dalam container.

mkdir -p /srv/liodra/storage

Pilih mode dan jalankan container

Tanpa argumen, Liodra berjalan sebagai media server minimal: manajemen device dan live streaming saja, tanpa rekaman. Tambahkan flag sesuai kebutuhan.

docker run -d \
  --name liodra \
  --restart unless-stopped \
  --ulimit nofile=65535:65535 \
  -p 9080:9080 \
  -p 1935:1935 \
  -p 8554:8554 \
  -v /srv/liodra/storage:/usr/share/nginx/html/storage \
  registry.gitlab.com/nodefluxio/liodra:3.9.0 \
  --as-nvr --set-retention

--as-nvr mengaktifkan DVR dan API playback. --set-retention menyalin kebijakan retensi awal (7 hari, cleanup pukul 00:00) ke retentions.yaml bila file itu belum ada. Inilah konfigurasi yang dipakai bersama Lenz.

docker run -d \
  --name liodra \
  --restart unless-stopped \
  --ulimit nofile=65535:65535 \
  -p 9080:9080 \
  -p 1935:1935 \
  -p 8554:8554 \
  -p 9994:9994 \
  -v /srv/liodra/storage:/usr/share/nginx/html/storage \
  registry.gitlab.com/nodefluxio/liodra:3.9.0 \
  --as-nvr --set-retention --with-vod --broadcast-on

Menambahkan API upload video (--with-vod, dipakai halaman Video Management Lenz) dan broadcast WebSocket (--broadcast-on). Port 9994 hanya untuk kompatibilitas mobile-hub lama.

docker run -d \
  --name liodra \
  --restart unless-stopped \
  --ulimit nofile=65535:65535 \
  -p 9080:9080 \
  -p 1935:1935 \
  -v /srv/liodra/storage:/usr/share/nginx/html/storage \
  registry.gitlab.com/nodefluxio/liodra:3.9.0

Cocok sebagai relay: menarik kamera sekali, lalu menyajikannya ke banyak konsumen (Visionaire, pemutar) tanpa menulis apa pun ke disk.

Verifikasi

curl http://localhost:9080/api/v1/health
curl http://localhost:9080/api/v1/version
docker logs -f liodra

health harus menjawab "status": "healthy" dengan "backend_health": true. Di log, cari baris [entrypoint] Feature flags configured: untuk memastikan flag yang Anda berikan terbaca, dan [nvr] untuk log Liodra.

Tambahkan kamera pertama

curl -X POST http://localhost:9080/api/v1/devices/rtsp \
  -H "Content-Type: application/json" \
  -d '{
    "name": "camera_front",
    "url": "rtsp://admin:[email protected]:554/stream1",
    "channel": "live"
  }'

Dalam beberapa detik GET /api/v1/devices menampilkan status active, dan stream dapat ditonton di http://localhost:9080/api/v1/play/ts/live/camera_front. Bila --as-nvr aktif, segmen mulai ditulis ke storage/recordings/live/camera_front/.

Daftarkan ke Lenz

Di Lenz, buka Media Servers → Manajemen Server, klik Tambah Server Media, isi host Liodra dengan tipe srs dan Port API 9080, lalu klik Periksa Kesehatan. Detailnya ada di Integrasi dengan Lenz & Visionaire.


Flag Fitur

Argumen container dipetakan ke environment variable. Keduanya setara; flag lebih praktis untuk docker run, variable lebih praktis untuk Compose atau orkestrator.

FlagEnvironment variableEfekDefault
--as-nvrENABLE_PLAYBACK=trueMengaktifkan perekaman DVR serta API /playbacks, /recordings, dan /retention.nonaktif
--set-retention(tidak ada)Menyalin retentions.default.yaml ke storage/retentions.yaml bila belum ada. Tanpa ini, playback aktif tetapi tidak ada cleanup sampai kebijakan dibuat lewat API.nonaktif
--with-vodENABLE_VOD=trueMengaktifkan API /videos (upload, VoD playback) dan channel vod.nonaktif
--broadcast-onENABLE_BROADCAST=trueMengaktifkan API /broadcast dan WebSocket /ws/v1/broadcast.nonaktif
--verbose(tidak ada)LOG_LEVEL=debug dan log media engine yang lebih rinci.nonaktif
--experimentalEXPERIMENTAL=trueMembuka flag eksperimental di bawah; tidak berefek sendiri.nonaktif
--transcode-into <h264|hevc>TRANSCODE_INTORe-encode ingest ke codec target dengan GPU terintegrasi. Lihat Ingest Transcode.copy
--transcode-quality <N>TRANSCODE_QUALITYKualitas dasar encoder 0-51.30
--transcode-threads <N>TRANSCODE_THREADSBatas thread encoder per ingest; 0 = tanpa batas.2
--transcode-max-bpp <F>TRANSCODE_MAX_BPPBatas bitrate per kamera dalam bit per piksel per detik.0.06
hikvision (argumen posisi)NVR_BACKEND=hikvisionMenjalankan backend Hikvision alih-alih backend standar.srs (standar)

Saat sebuah fitur nonaktif, endpoint-nya tidak didaftarkan sama sekali dan menjawab 404. Flag runtime terlihat di GET /api/v1/config (playback_enabled, vod_enabled, broadcast_enabled) tetapi tidak pernah disimpan ke file YAML.


Port

PortLayananKeteranganDibutuhkan untuk
9080Liodra APIREST API dan seluruh WebSocket. Port inilah yang diisi sebagai Port API di Lenz.Selalu
1935RTMPPublish dan play RTMP. Dibutuhkan bila ada klien eksternal yang mem-publish (mobile, encoder) atau Visionaire menarik RTMP.Backend standar
8554RTSPSetiap stream yang dipublish juga tersedia lewat RTSP. Tidak ada di image legacy -srs6.Backend standar
8080HTTP-TS dan dashboardHTTP-TS langsung tanpa proxy API dan dashboard monitor web Liodra.Debug dan monitor
9994mobile-hubBroadcast WS untuk kompatibilitas mobile-hub lama; hanya pada image yang menyertakannya.--broadcast-on

Port lain yang mungkin muncul di docker-compose.yaml repositori bersifat internal dan tidak dipakai oleh Lenz maupun Visionaire; jangan diekspos.


Volume dan Tata Letak Storage

Satu volume, /usr/share/nginx/html/storage, menampung semuanya:

storage/
├── recordings.yaml          # daftar device (dipersist tiap 60 s dan saat berubah)
├── retentions.yaml          # jadwal cleanup dan kebijakan retensi
├── recordings/              # segmen DVR: {channel}/{name}/YYYY/MM/DD/HH-mm-ss.flv (UTC)
├── vods/                    # video unggahan beserta .info dan .thumb.jpg
├── logs/                    # log per proses ingest
└── transcode-capacity.json  # cache benchmark encoder (hanya mode eksperimental)

Device di recordings.yaml dipulihkan otomatis saat container dimulai ulang, sehingga kamera kembali di-ingest tanpa perlu didaftarkan lagi.


Docker Compose

services:
  liodra:
    image: registry.gitlab.com/nodefluxio/liodra:3.9.0
    restart: unless-stopped
    command: ["--as-nvr", "--set-retention", "--with-vod"]
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    ports:
      - "9080:9080"
      - "1935:1935"
      - "8554:8554"
    volumes:
      - /srv/liodra/storage:/usr/share/nginx/html/storage
    environment:
      LOG_LEVEL: info
      MAX_DISK_USAGE: "80"
      MAX_ONDEMAND_PROCESSES: "32"
      # RTMP_SECRET: ganti-dengan-secret-anda

Upgrade

  1. Tarik image versi baru.
  2. Hentikan dan hapus container lama (docker rm -f liodra); rekaman dan konfigurasi aman di volume.
  3. Jalankan kembali dengan perintah yang sama dan tag baru. Device dipulihkan dari recordings.yaml.
  4. Periksa GET /api/v1/version dan CHANGELOG.md rilis untuk perubahan perilaku.

Troubleshooting


Selanjutnya

On this page