Installation
O.D.I.N. runs as a single Docker container. Install it on any Linux or macOS machine in under a minute.
Prerequisites
| Requirement | Minimum |
|---|---|
| Docker Engine | 20.10+ |
| Docker Compose | v2+ |
| RAM | 2 GB (typical runtime ~256 MB) |
| Disk | 10 GB |
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
| Port | Service | Purpose |
|---|---|---|
| 8000 | Web UI / API | Main application |
| 1984 | go2rtc API | Camera streaming (HLS) |
| 8555 | WebRTC | Camera streaming (low-latency) |
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.