Skip to main content

Installation

O.D.I.N. runs as a single Docker container. Install it on any Linux or macOS machine in under a minute.

Prerequisites

RequirementMinimum
Docker Engine20.10+
Docker Composev2+
RAM2 GB (typical runtime ~256 MB)
Disk10 GB
info

O.D.I.N. supports amd64 and arm64 architectures. It runs natively on Raspberry Pi 4/5, Intel NUCs, and cloud VMs.

Install

Create a directory, add the Docker Compose file, and start the container:

mkdir odin && cd odin

Create a docker-compose.yml with the following contents:

services:
odin:
image: ghcr.io/hughkantsime/odin:latest
container_name: odin
restart: unless-stopped
ports:
- "8000:8000" # Web UI + API
- "1984:1984" # go2rtc API
- "8555:8555" # go2rtc WebRTC
volumes:
- ./odin-data:/data
- ./odin-data/go2rtc:/app/go2rtc
environment:
- ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
- JWT_SECRET_KEY=${JWT_SECRET_KEY:-}
- API_KEY=${API_KEY:-}
- DATABASE_URL=sqlite:////data/odin.db
- CORS_ORIGINS=http://localhost:8000,http://localhost:3000
- ODIN_HOST_IP=${ODIN_HOST_IP:-}
- TZ=${TZ:-America/New_York}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 15s

Then start the container:

docker compose up -d

That's it. The container handles everything else on first boot -- generating secrets, initializing the database, and starting all 9 supervised services.

Post-Install

Open your browser and navigate to:

http://your-server-ip:8000

You'll be greeted by the setup wizard. See First Login & Setup for the walkthrough.

Ports

PortServicePurpose
8000Web UI / APIMain application
1984go2rtc APICamera streaming (HLS)
8555WebRTCCamera streaming (low-latency)
warning

If you're running behind a firewall, ensure ports 8000, 1984, and 8555 are open. WebRTC on port 8555 requires UDP access for low-latency camera feeds.

Updating

Pull the latest image and restart:

docker compose pull && docker compose up -d

Your data persists in the ./odin-data volume. Updates never touch your database, configuration, or uploaded files.

Uninstalling

Stop the container and remove it:

docker compose down

To remove all data, delete the odin-data directory. This is irreversible.