Installation
SkyView ships as a single Docker image, and one command brings the service up. This chapter covers system requirements, choosing a variant, the install command, port/volume mapping, upgrades, and uninstall.
System requirements
| Item | Minimum | Recommended |
|---|---|---|
| Operating system | Linux kernel ≥ 5.x (Ubuntu 22.04+ / Debian 12+) | Ubuntu 24.04 LTS |
| CPU | 4-core x86_64(or RK3588 ARM64) | 8 cores or more |
| Memory | 4 GB | 8–16 GB (multiple streams + AI detection) |
| Disk | 64 GB (recording only) | 1 TB+ HDD (size by retention days) |
| Docker | 20.10+ | Latest stable |
| GPU (optional) | None | Intel 11th-gen+ iGPU / NVIDIA 30 series+ |
Architecture support: x86_64 and RK3588
Choosing an image variant
Hardware acceleration for AI detection comes in 4 variants for different hardware. Picking the wrong variant only makes detection slower or non-functional; everything else (recording, playback, two-way audio) is unaffected. The one-line install script auto-detects your hardware and picks the right one for you — the table below is just a reference for those who want to choose manually.
| Image tag | Suitable hardware | Notes |
|---|---|---|
cpu | CPU only | Universal fallback, mediocre performance, fine for 2–4 streams at 5fps |
openvino | Intel CPU / iGPU / NPU | 11th-gen Core and up, best value pick |
cuda | NVIDIA GPU | Needs nvidia-container-toolkit, GTX 16 series and up |
trt | NVIDIA GPU + ≥ 8GB VRAM (fastest) | Faster than cuda, but startup fails with < 8GB VRAM; first launch runs a one-time ~3-minute model optimization |
Picking a tier by hardware (detailed reference)
When buying a new machine or evaluating an existing one, use the 5 tiers below grouped by CPU horsepower. Each lists the recommended image, the number of cameras it can reliably handle, and which AI detection features it can run smoothly (you still enable them manually in the web admin).
| Tier | Example hardware | Cameras | Recommended image | One-line positioning |
|---|---|---|---|---|
| Entry | Celeron J4125 / J4105 / J4025 (old Atom) | 1 stream | cpu | Bargain old/scrap hardware — just enough to run |
| Home starter | N100 / N97 / N95 (Alder Lake-N 4-core) | 1–2 streams | openvino | Mainstream home use, value starter tier |
| Elderly care | N150 / N250 / N305 | 1–3 streams | openvino | The minimum bar for enabling fall detection |
| Multi-camera | i5 / i7 11th–13th gen + Iris Xe iGPU (80EU+) | 2–4 streams | openvino | A sensible ceiling for many cameras + whole-home detection |
| Full features / commercial | NVIDIA GTX 1060 / RTX 2060 or higher discrete GPU | 4+ streams | cuda (with ≥ 8GB VRAM you can move to trt for ~2× speedup) | Can enable everything — gestures, baby cry, and more |
Detection features each tier can run smoothly
Higher tiers can reliably enable more features. On a low tier, turning on too many features makes inference fall behind the camera frame rate and miss events. The table below shows the detection capabilities recommended for each tier — ✅ means recommended, ❌ means not advised on that hardware. A fresh install enables only object detection by default; everything else must be turned on manually in web admin → Settings → Detection as needed.
| Detection feature | Entry J4125 | Home N100 | Care N150 | Multi Iris Xe | Full NVIDIA |
|---|---|---|---|---|---|
| Motion detection | ✅ | ✅ | ✅ | ✅ | ✅ |
| Face recognition | ✅ | ✅ | ✅ | ✅ | ✅ |
| Object detection (person/vehicle/animal/etc.) | ❌ | ✅ | ✅ | ✅ | ✅ |
| Fall detection | ❌ | ❌ | ✅ | ✅ | ✅ |
| License plate recognition | ❌ | ❌ | ❌ | ✅ | ✅ |
| Gesture recognition | ❌ | ❌ | ❌ | ❌ | ✅ |
| Baby cry detection | ❌ | ❌ | ❌ | ❌ | ✅ |
Configure a substream at minimum
With many cameras, disable detection on non-critical ones
One-line deploy (recommended)
Run a single command and the script auto-detects your hardware, picks the best-fit image variant, pulls the image, and starts the container — 5–15 minutes end to end depending on your network.
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bashWant to review the script before running it
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh -o install.sh, then cat install.sh to read it, then bash install.sh. Or add --detect-only to have the script only probe hardware and recommend a variant without actually deploying.What the script does:
- Checks that the system is Linux x86_64 with Docker installed
- Checks that ports such as
23406 / 23880 / 24214 / 24215 / 23515are free - Probes hardware: NVIDIA GPU (including VRAM) / Intel iGPU / Intel NPU
- Automatically picks the best-fit image variant among cpu / openvino / cuda / trt
- Pulls the image (from Aliyun by default) + writes a docker-compose file + auto-generates a strong random secret
- Starts the container and waits for the health check to pass (about 60 seconds)
- Prints the browser URL (e.g.
http://192.168.1.10:23406/)
The script won't touch your system
Common flags
| Flag | Purpose |
|---|---|
--variant cpu/openvino/cuda/trt | Force a specific image variant instead of auto-select |
--detect-only | Only detect hardware + recommend a variant, don't actually deploy |
--offline image.tar.gz | Offline-package deploy (no internet access) |
--data-dir /path | Custom state directory (database / cookies / logs, default ~/skyview/data) |
--recordings-dir /path | Point recordings at a large disk / NAS separately (default ~/skyview/recordings, alongside data; recordings can reach TB scale) |
--registry <url> | Use a private image registry |
--version 0.6.0 | Pull a specific version (default latest) |
-y or --yes | Non-interactive mode |
# Only show the recommended variant, don't deploy
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash -s -- --detect-only
# Force the trt variant and skip prompts
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash -s -- --variant trt -y
# Offline deploy (scp the image tar.gz to the machine first)
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh -o install.sh
bash install.sh --offline /path/to/skyview-image.tar.gzNeed access via a public domain
http://<server IP>:23406 in the browser.Deploy by platform (pick your device)
The one-line script is easiest on a generic Linux + Docker environment, but NAS, HA OS, PVE and similar platforms each have their own container-management UI, network mode, iGPU passthrough method, and known pitfalls. Below are dedicated guides for common target platforms, including each platform's specific compose file, UI deployment path, firewall config, and FAQs:
- Synology DSM 7.2+ — Container Manager + Intel-iGPU models (DS920+ / DS423+ / DS224+, etc.)
- Unraid 6.12+ — Compose Manager + Intel GPU TOP / NVIDIA Driver plugin
- fnOS — Debian 12 base + built-in iGPU on N100/N305
- UGREEN UGOS Pro — x86 models (DXP2800/DXP4800/DXP6800, etc.)
- TrueNAS Scale 24.10+ — Custom App YAML + ZFS dataset persistence
- Ubuntu / Debian — apt + docker compose v2, the cleanest deployment path
- Fedora 39+ — dnf docker-ce + SELinux volume labels + firewalld rules
- Proxmox VE LXC — privileged LXC + Intel iGPU passthrough (top pick for home N100 / N305 PVE users)
- Home Assistant OS add-on — add the SkyView repo and one-click install the yunkan / yunkan-openvino add-on
- RK3588 board — a low-power ARM mini box with Rockchip NPU acceleration (Orange Pi 5 / Radxa Rock 5, etc.); 4GB board recommended, 8G+ experimental
Don't see your platform?
apt install for the right package manager). For SELinux-based systems (CentOS / Rocky / Alma), follow the :Z volume-label handling in the Fedora guide.Manual deploy (advanced)
If you want to control the process step by step, follow the 4 steps below. The one-line script is essentially these commands automated.
- 1
Pull the image
Pick one of the four variants above:
bashdocker pull registry.cn-hangzhou.aliyuncs.com/yunkan/yunkan-cpu:latest - 2
Create data / recordings directories
Small state (database / cookies / logs) lives in
data/; recordings (can reach TB scale) go in a siblingrecordings/so you can point them at a large disk / NAS separately.bashmkdir -p ~/skyview/data ~/skyview/recordings && cd ~/skyview - 3
Start the container
Use host networking so cameras reach the host ports directly, avoiding NAT degrading video quality. License binding requires bind-mounting
/etc/machine-idandproduct_uuid— don't skip them.bashdocker run -d --name yunkan --restart=always \ --network host \ -v $(pwd)/data:/app/data \ -v $(pwd)/recordings:/app/data/recordings \ -v /etc/machine-id:/etc/machine-id:ro \ -v /sys/class/dmi/id/product_uuid:/sys/class/dmi/id/product_uuid:ro \ registry.cn-hangzhou.aliyuncs.com/yunkan/yunkan-cpu:latest - 4
Open the browser
The first visit goes to the
/setupwizard; continue with the First Launch chapter.http://<server IP>:23406
Hardware info must be bind-mounted
Ports and volume mapping
SkyView runs in host network mode, so all ports bind directly on the host. The production ports use an unusual offset into the 2xxxx range to avoid clashing with an existing nginx on 80/443, redis on 6379, or other services on 8080/8554/8888.
| Port | Purpose | Required? |
|---|---|---|
| 23406 / TCP | Web admin + app API | Required (can also sit behind a reverse proxy for HTTPS) |
| 23880 / TCP | Direct RTSP out (for VLC / third-party NVR) | Optional |
| 24214 / TCP | Playback + fallback live view | Recommended |
| 24215 / TCP | Live view (low-latency channel signaling) | Recommended |
| 23515 / UDP | Live view (low-latency channel audio/video) | Recommended; without it, the stream auto-falls back to 24214 (latency becomes 2–4s) |
| Container path | Purpose | Recommendation |
|---|---|---|
/app/data | Small state: database / config / cookies / logs | Must mount, lives across containers |
/app/data/recordings | Recordings (TB scale, nested on top of /app/data) | Must mount, can point to a large disk / NAS; models are bundled in the image, no mount needed |
/etc/machine-id | Hardware fingerprint 1/2 | Must mount read-only |
/sys/class/dmi/id/product_uuid | Hardware fingerprint 2/2 | Must mount read-only |
Upgrading
Easiest: one-click upgrade from the web console. Open Web Console → Settings → System → Check for updates, and click "Upgrade" when a new version shows up — the system pulls the new image and recreates the container automatically (the database is backed up beforehand, and if the new version fails to start it automatically rolls back). The page reconnects to the new version within a few minutes.
You can also upgrade manually over SSH:
cd ~/skyview
docker compose -f compose.yml pull
docker compose -f compose.yml up -dOr re-run the one-line script (with -y to skip prompts):
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash -s -- -yData migrates automatically
tar -czf data-backup-$(date +%F).tar.gz data/.Uninstalling
cd ~/skyview
docker compose -f compose.yml down
docker rmi registry.cn-hangzhou.aliyuncs.com/yunkan/yunkan-cpu:latest
# Recordings / database are kept; for a full cleanup:
rm -rf ~/skyviewDeleting the data directory is irreversible