Skip to main content

Docker Installation Guide

Clone is designed to work alongside your existing NVR system (Frigate, Shinobi, Blue Iris, etc.) to provide unified camera management across your entire network.

📋 Prerequisites

Before installing Clone, ensure you have:

  • Docker and Docker Compose installed on your system
  • Existing NVR system (Frigate, Shinobi, Blue Iris, etc.) with a config.yml file
  • Network access to your IP cameras
  • Host system with at least 2GB RAM and 5GB free disk space

Supported Platforms

  • x86_64 - Standard PCs, servers, NUCs
  • ARM64 - Raspberry Pi 4/5, ZimaBoard, ARM servers
  • Fanless NVR boxes and single board computers
  • Linux (Ubuntu, Debian, CentOS, etc.)
  • Windows with WSL2 and Docker Desktop
  • macOS with Docker Desktop

🗂️ Step 1: Create Clone Directory

Create a dedicated directory for Clone on your system. This can be on the same host as your NVR system.

Choose your preferred location:

Option 1: Standard Docker location

sudo mkdir -p /docker/clone
cd /docker/clone

Option 2: Opt directory (common for applications)

sudo mkdir -p /opt/clone
cd /opt/clone

Option 4: Any location you prefer

sudo mkdir -p /this_parrot_is_dead/clone
cd /this_parrot_is_dead/clone
(note: replace 'this_parrot_is_dead' with your actual directory
or you will have an EX-application)

Set proper ownership (replace with your username):

sudo chown -R $USER:$USER /your-chosen-directory/clone

📄 Step 2: Copy NVR Configuration

Copy your existing NVR configuration file to the Clone directory:

For Frigate Users

Copy from Frigate installation directory

cp /path/to/frigate/config/config.yml ./config.yml

Example locations:

cp /opt/frigate/config.yml ./config.yml
cp /docker/frigate/config.yml ./config.yml
cp ~/.config/frigate/config.yml ./config.yml

For Shinobi Users

Copy Shinobi configuration (adapt as needed)

cp /path/to/shinobi/conf.json ./config.yml

For Blue Iris or Other NVR Users

If you don't have a config.yml file, create a basic one:

cat > clone.yml << 'EOF'
cameras:
# Replace with your camera details
camera_01:
name: "Front Door Camera"
host: "192.168.1.100"
# Clone will auto-detect protocol (Dahua, ONVIF, etc.)

camera_02:
name: "Backyard Camera"
host: "192.168.1.101"

# Add more cameras as needed
EOF

🐳 Step 3: Download Docker Compose File

Download the sample compose.yml file:

# Download the official compose file
curl -o compose.yml https://raw.githubusercontent.com/pocovocho/clone/main/compose.yml

Or create compose.yml manually:

services:
clone:
container_name: clone
image: ghcr.io/pocovocho/clone:latest
network_mode: host # Needed for direct camera access
privileged: true
stop_grace_period: 30s
restart: unless-stopped
ports:
- "1776:1776" # Web UI
- "1512:1512" # go2rtc streaming
- "1911:1911" # FastAPI backend
- "8555:8555" # Additional streaming
- "8554:8554" # RTSP
volumes:
# Configuration and data persistence
- ./config:/config:rw
- ./config:/clone/config:rw
- .:/root_mount:rw
- ./clone/db:/clone/db:rw

# System time synchronization
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro

# Optional: RAM cache to reduce disk wear
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
tmpfs:
- /dev/shm:rw,exec,nosuid,size=64m
environment:
# Core Clone settings
- CLONE_CONFIG=/config/clone.yml
- CLONE_API_HOST=127.0.0.1
- CLONE_API_PORT=1911
- CLONE_BASE_PATH=

# Streaming settings
- ENABLE_GO2RTC=true
- GO2RTC_HOST=127.0.0.1
- GO2RTC_PORT=1512
- INTERNAL_GO2RTC_PORT=1512
- EXTERNAL_GO2RTC_PORT=1984

⚙️ Step 4: Customize Configuration

Edit the compose.yml file to match your system:

nano compose.yml

Required Changes

Update directory paths - Replace /user_defined_directory/clone with your actual directory:

volumes:
# Change this line:
- /user_defined_directory/clone/config:/config:rw
# To your actual path:
- /docker/clone/config:/config:rw

Optional Customizations

Go2RTC Settings:

  • Set ENABLE_GO2RTC=false if you already have Frigate's go2rtc running
  • Adjust Go2RTC ports if they conflict

Resource Limits (add if needed):

deploy:
resources:
limits:
memory: 2G
cpus: '1.0'

🚀 Step 5: Launch Clone

Start Clone using Docker Compose:

# Pull latest image and start Clone
docker compose up -d

# View logs to ensure successful startup
docker compose logs -f clone

🌐 Step 6: Access Clone Web Interface

Open your web browser and navigate to:

Local access:

http://localhost:1776

Remote access (replace with your server's IP):

http://192.168.1.50:1776
http://your-server-ip:1776

🔐 Default Login Credentials

Username: admin
Password: admin

⚠️ Security Note: Change the default password immediately after first login!

📁 Directory Structure

After installation, your directory should look like:

/your-chosen-directory/clone/
├── compose.yml # Docker Compose configuration
├── config.yml # Your NVR configuration file
├── clone/
│ └── db/ # Clone database (created on first run)
│ └── clone.db
└── config/ # Clone configuration directory (created on first run)
└── clone.yml # Processed configuration

🔧 Useful Commands

Managing Clone Service

# Start Clone
docker compose up -d

# Stop Clone
docker compose down

# Restart Clone
docker compose restart

# Update to latest version
docker compose pull
docker compose up -d

# View logs
docker compose logs -f clone

# View last 100 log lines
docker compose logs --tail 100 clone

Troubleshooting Commands

# Check container status
docker ps

# Enter Clone container for debugging
docker exec -it clone bash

# Check disk usage
docker system df

# Remove unused Docker resources
docker system prune

🔍 Verification

To verify your installation is working correctly:

  1. Check container status:

    docker ps

    Should show clone container with status Up

  2. Check logs for errors:

    docker compose logs clone | grep -i error

    Should return no critical errors

  3. Test web access:

    • Navigate to http://localhost:1776
    • Should see Clone login page
  4. Verify camera discovery:

    • Check logs: docker compose logs clone | grep -i "discovered"
    • Should show cameras found from your config file

⚡ Quick Health Check

# Run this one-liner to check Clone status
echo "Clone Status:" && docker ps --filter name=clone --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" && echo -e "\nRecent Logs:" && docker logs --tail 5 clone

🎯 Next Steps

Once Clone is running successfully:

  1. Complete the Quick Start Tutorial - Configure your first cameras
  2. Set up Camera Authentication - Add camera credentials
  3. Synchronize Camera Settings - Import existing camera configurations

🆘 Common Issues

Port conflicts:

  • Change port 1776 to another port in compose.yml
  • Ensure ports aren't used by other services

Permission issues:

  • Check directory ownership: ls -la
  • Fix with: sudo chown -R $USER:$USER ./

Config file not found:

  • Verify config.yml exists in the correct location
  • Check volume mapping in compose.yml

Can't access web interface:

  • Verify container is running: docker ps
  • Check firewall settings
  • Try using server IP instead of localhost

For additional help, see the Troubleshooting Guide or join our Discord Community.