diff --git a/.gitignore b/.gitignore index 7390421..d126e0e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ kopia-docker-compose-fixed.yml ocis-credentials.md *.bak *.bak2 +frigate-cameras.md +frigate-config.yml +frigate-docker-compose.yml diff --git a/docs/jarvis-build-documentation.docx b/docs/jarvis-build-documentation.docx new file mode 100644 index 0000000..acbcdf7 Binary files /dev/null and b/docs/jarvis-build-documentation.docx differ diff --git a/homelab-overview.md b/homelab-overview.md index 9d210e8..37257b6 100644 --- a/homelab-overview.md +++ b/homelab-overview.md @@ -1,6 +1,6 @@ # Homelab Overview -**Last Updated:** May 11, 2026 +**Last Updated:** June 13, 2026 This document provides a high-level summary of the entire homelab infrastructure — networking, physical/virtual hosts, Docker services, and how everything is connected. @@ -81,7 +81,7 @@ Proxmox runs all the VMs and LXC containers listed below. Backups are handled by | Name | IP | Role | |---|---|---| -| thinkstation-p710 | 192.168.88.41 | Workstation / AI / Ollama (bare metal, not a Proxmox guest) | +| jgpc | 192.168.88.41 | Workstation / AI / Ollama (bare metal, not a Proxmox guest) | | TrueNAS | 192.168.88.24 | NAS — provides NFS storage for Kopia backups; separate physical machine | --- @@ -107,7 +107,7 @@ Config location on the Caddy VM: `/etc/caddy/` ## Docker Infrastructure -Docker is managed centrally via **Portainer CE** at `http://192.168.88.27:9000` (external: `https://portainer.jgitta.com`). Portainer agents run on jellyfin and thinkstation, allowing all three hosts to be managed from one UI. +Docker is managed centrally via **Portainer CE** at `http://192.168.88.27:9000` (external: `https://portainer.jgitta.com`). Portainer agents run on jellyfin and jgpc, allowing all three hosts to be managed from one UI. All Docker Compose source files live in the **Gitea** repo `jgitta/homelab-configs` (this repo). All stack data volumes are stored at `/srv/docker//` on each host using **absolute paths**. @@ -120,7 +120,7 @@ All stack data volumes are stored at `/srv/docker//` on each host us |---|---|---|---|---| | Portainer | portainer/portainer-ce:latest | 9000, 9443 | portainer.jgitta.com | Docker management UI | | Pi-hole | pihole/pihole:latest | 53 (DNS), 8080 | pihole.jgitta.com | DNS ad blocker | -| Open WebUI | ghcr.io/open-webui/open-webui:main | 3000 | ai.jgitta.com | AI chat UI (connects to Ollama on ThinkStation) | +| Open WebUI | ghcr.io/open-webui/open-webui:main | 3000 | ai.jgitta.com | AI chat UI (connects to Ollama on jgpc) | | LiteLLM | litellm:latest | 4000 | — | Centralized LLM API gateway | | OnlyOffice | onlyoffice/documentserver | 8880 | office.jgitta.com | Online document editing (used by Nextcloud) | | Homarr | homarr:latest | 7575 | homarr.jgitta.com | Dashboard | @@ -164,7 +164,7 @@ Media storage is mounted at `/mnt/media` on the jellyfin host and presented as ` --- -### thinkstation-p710 — 192.168.88.41 — AI / Workstation Host +### jgpc — 192.168.88.41 — AI / Workstation Host | Service | Image | Port | Purpose | |---|---|---|---| @@ -174,6 +174,20 @@ Media storage is mounted at `/mnt/media` on the jellyfin host and presented as ` | Stirling PDF | frooodle/s-pdf:latest | 8081 | PDF tools web UI | | Portainer Agent | portainer/agent:latest | 9001 | Managed by siklos Portainer | +#### Printing (jgpc) + +The jgpc is the print server for the HP PageWide Color Flow MFP 586. + +| Item | Value | +|---|---| +| Printer | HP PageWide Color Flow MFP 586 | +| IP | 192.168.88.89 (static DHCP reservation, MAC: `ec:8e:b5:c0:d0:48`) | +| CUPS queue | `HP_586_MFP` (default) | +| Device URI | `ipps://192.168.88.89/ipp/print` | +| Driver | IPP Everywhere (driverless) | + +`cups-browsed` is **disabled** — it was auto-recreating an unstable mDNS-based queue whenever the printer was online. The printer is permanently saved in `/etc/cups/printers.conf` with a static IP URI. + --- ### photos VM — 192.168.88.32 (VM 113) — Photo Services @@ -190,7 +204,7 @@ Photo storage is on a local 200 GB SSD (`/mnt/immich-photos`) — migrated from ## Monitoring -Prometheus scrapes **Node Exporter** (port 9100) from every host: siklos, proxmox, Nextcloud, jellyfin, PBS, caddy, and ThinkStation. **Grafana** at `grafana.jgitta.com` visualizes all metrics and fires alerts (via Telegram) when: +Prometheus scrapes **Node Exporter** (port 9100) from every host: siklos, proxmox, Nextcloud, jellyfin, PBS, caddy, and jgpc. **Grafana** at `grafana.jgitta.com` visualizes all metrics and fires alerts (via Telegram) when: - RAM > 90% for 5 minutes - Swap > 50% for 5 minutes @@ -228,3 +242,4 @@ Prometheus scrapes **Node Exporter** (port 9100) from every host: siklos, proxmo | AI (Open WebUI) | https://ai.jgitta.com | | Guacamole | https://apache.jgitta.com | | Kopia | https://kopia.jgitta.com | + diff --git a/jellyfin/node-exporter/docker-compose.yml b/jellyfin/node-exporter/docker-compose.yml deleted file mode 100644 index 3f77805..0000000 --- a/jellyfin/node-exporter/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -services: - node-exporter: - image: prom/node-exporter:latest - container_name: node-exporter - restart: unless-stopped - network_mode: host - pid: host - volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /:/rootfs:ro - command: - - '--path.procfs=/host/proc' - - '--path.sysfs=/host/sys' - - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' diff --git a/frigate-config.yml b/jgpc/frigate/config.yml similarity index 100% rename from frigate-config.yml rename to jgpc/frigate/config.yml diff --git a/frigate-docker-compose.yml b/jgpc/frigate/docker-compose.yml similarity index 100% rename from frigate-docker-compose.yml rename to jgpc/frigate/docker-compose.yml diff --git a/frigate-cameras.md b/jgpc/frigate/frigate-cameras.md similarity index 100% rename from frigate-cameras.md rename to jgpc/frigate/frigate-cameras.md diff --git a/jgpc/frigate/frigate-cctv-setup.md b/jgpc/frigate/frigate-cctv-setup.md new file mode 100644 index 0000000..de65600 --- /dev/null +++ b/jgpc/frigate/frigate-cctv-setup.md @@ -0,0 +1,176 @@ +# Frigate NVR & CCTV Setup + +**Last Updated:** July 2026 +**Host:** jgpc — `192.168.88.41` + +--- + +## Hardware + +| Component | Details | +|-----------|---------| +| Machine | Lenovo jgpc P710 | +| CPU | Intel Xeon E5-2623 v4 @ 2.60 GHz (4 cores / 8 threads, boost to 3.2 GHz) | +| RAM | 24 GB | +| GPU | NVIDIA GeForce GTX 1050 Ti (4 GB VRAM) | +| OS Disk | 234 GB SSD (`/dev/sda2`) | +| Media Storage | 14 TB HDD — mounted at `/mnt/14TB-HD/frigate/media` | + +--- + +## Frigate Docker Setup + +| Item | Value | +|------|-------| +| Image | `ghcr.io/blakeblackshear/frigate:stable-tensorrt` | +| Container name | `frigate` | +| Config path | `/srv/docker/frigate/config/` | +| Media path | `/mnt/14TB-HD/frigate/media` | +| Compose file | `jgpc/frigate/docker-compose.yml` (this repo) | +| Web UI | `http://192.168.88.41:5000` → `https://cameras.jgitta.com` | +| RTSP port | `8554` | +| WebRTC port | `8555` | + +**GPU acceleration:** Container runs with `runtime: nvidia` and `NVIDIA_VISIBLE_DEVICES=all`. The GTX 1050 Ti handles: +- LPR (licence plate recognition) via GPU +- Birdseye re-stream encoding via `h264_nvenc` +- ONNX object detection via the `onnx` detector + +**Shared memory:** `shm_size: 1024mb` — required for frame buffers across 6 cameras. + +--- + +## Object Detection + +| Item | Value | +|------|-------| +| Detector | ONNX (GPU-accelerated) | +| Model | YOLOv9-t-320 (`yolov9-t-320.onnx`) | +| Input size | 320 × 320 | +| Label map | COCO-80 | +| Model path | `/config/model_cache/onnx/yolov9-t-320.onnx` | + +--- + +## Licence Plate Recognition (LPR) + +| Item | Value | +|------|-------| +| Enabled | Yes | +| Device | GPU | +| Model size | Small | + +**Known plates:** + +| Name | Plate | +|------|-------| +| Joe | ABC1234 | +| Cynthia | ABC4567 | +| Wesley | XYZ9876 | + +--- + +## Camera Inventory + +All cameras are **Reolink** PoE units on the `192.168.88.0/24` subnet. + +| Camera | IP | Model notes | Mount location | +|--------|----|-------------|----------------| +| front_driveway | 192.168.88.105 | Dual-lens panoramic (7680×2160 = two 4K sensors stitched) | Front driveway | +| front_yard | 192.168.88.104 | 4K 811A | Front yard | +| shop | 192.168.88.103 | 4K 811A (uses HTTPS for API) | Shop / outbuilding | +| deck | 192.168.88.101 | 4K 811A | Deck | +| back_yard | 192.168.88.102 | 4K 811A | Back yard | +| front_right | 192.168.88.100 | 4512×2512 sensor (non-standard resolution) | Front right | + +--- + +## Camera Stream Settings + +All cameras confirmed via Reolink API (May 2026): + +| Camera | Main Resolution | Main Codec | Bitrate | FPS | I-frame | Sub Resolution | Sub Codec | +|--------|----------------|------------|---------|-----|---------|----------------|-----------| +| front_driveway (.105) | 7680×2160 | H.265 | 10240 Kbps | 20 | 1x | 1536×432 | H.264 | +| front_yard (.104) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 | +| shop (.103) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 | +| deck (.101) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 | +| back_yard (.102) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 | +| front_right (.100) | 4512×2512 | H.265 | 8192 Kbps | 20 | 1x | 896×512 | H.264 | + +**I-frame interval** set to 1x on all cameras so Frigate can start/end recording clips cleanly without waiting for a keyframe. + +--- + +## go2rtc Stream Architecture + +Chrome/Firefox cannot play H.265 (HEVC) via MSE (Media Source Extensions), so each camera requires two go2rtc streams: + +``` +camera_h265 → native H.265 RTSP from camera + └─ consumed by Frigate ffmpeg for RECORDING (stream copy, no re-encode) + +camera → ffmpeg:camera_h265#video=h264 (software H.265 → H.264 transcode) + └─ served to browser via MSE WebSocket for LIVE VIEW + +camera_sub → native low-res H.264 RTSP sub-stream + └─ consumed by Frigate for OBJECT DETECTION only +``` + +**Key behaviour notes:** +- go2rtc uses **lazy initialization** — transcoders only start when a browser opens the live view, and shut down ~30 seconds after the last viewer leaves. This causes a 2–3 second gray screen on first view, which is expected and unavoidable. +- The `_h265` streams are kept alive continuously by Frigate's recording ffmpeg processes, so recording starts instantly. +- The `#hardware` flag for NVENC transcoding in go2rtc causes EOF crashes with Reolink cameras and **must not be used**. Software transcoding (`libx264`) is used instead. +- Reolink cameras drop RTSP connections every 5–20 minutes (firmware behaviour). go2rtc reconnects automatically; this produces a brief gray screen, not static. + +### shop camera note +The shop camera (`192.168.88.103`) redirects HTTP → HTTPS. All API calls to shop must use `https://` with `-k` (skip cert verification). + +--- + +## Frigate Camera Detection Zones + +| Camera | Detect Resolution | Tracked Objects | Notes | +|--------|------------------|-----------------|-------| +| front_driveway | 1536×432 | person, car, dog, cat, license_plate | Has zone + LPR; alerts require `front_driveway_zone` | +| front_yard | 640×360 | person, car, dog, cat | — | +| shop | 640×360 | person, car, dog, cat | Motion mask on upper-right and mid-frame | +| deck | 640×360 | person, car, dog, cat | Two motion masks | +| back_yard | 640×360 | person, car, dog, cat | Two motion masks | +| front_right | 896×512 | person, car, dog, cat | Motion mask on upper-centre | + +--- + +## Recording & Retention + +| Type | Retention | +|------|-----------| +| Alert clips | 30 days | +| Detection clips | 30 days | +| Motion clips | 30 days | +| Continuous | Disabled | +| Snapshots | 30 days | + +--- + +## Known Issues & Quirks + +- **Reolink H.265 sub-stream firmware bug:** On some Reolink firmware versions, setting the sub-stream to H.265 produces a corrupted bitstream that go2rtc rejects with 404. Sub-streams should always remain H.264. +- **front_driveway panoramic:** The 7680×2160 resolution is two 4K sensors stitched side by side. The wide 1536×432 detect resolution in the Frigate config accounts for this. +- **front_right non-standard resolution:** Camera reports 4512×2512 rather than standard 4K. Model unknown — may be a 5MP variant or older sensor. +- **Swap pressure:** jgpc runs ~5.5 GB swap used under normal load. Monitor if adding more cameras or enabling Birdseye. + +--- + +## Changelog + +### 2026-07-07 — Live view fixes, audio, and two-way talk + +- **Green-box fix (front_driveway High stream):** the exec transcode crash-looped because Reolink RTSP emits corrupt HEVC frames at stream-join ("PPS changed between slices"); ffmpeg fell back to software decode and the GPU-only `scale_cuda` filter failed. Replaced with `-hwaccel cuvid -c:v hevc_cuvid -resize 3840x1080` — decode + resize stay on the GPU, no filter graph. (Also: NVENC caps H.264 at 4096 px wide, so the 7680×2160 Duo 3 main stream must be scaled before encode.) +- **front_right:** main stream is native H.264 2560×1440 — replaced NVENC transcode with direct passthrough (frees a GPU encode session). Live label renamed "High (Native)". +- **Live stream selectors:** added `live: streams:` (High/Low) to all 6 cameras to pin stream choice per device. +- **Audio:** enabled on-camera mic audio for front_driveway (Duo 3) and shop (both were off in camera firmware); front_driveway transcode now passes AAC (`-c:a copy` instead of `-an`). +- **Two-way talk (all 6 cameras):** each live go2rtc stream now has 3 sources — primary video, `ffmpeg:#audio=opus` (WebRTC audio), and `onvif://:8000` (backchannel). Added `webrtc: candidates: [192.168.88.41:8555, stun:8555]`. LAN-only unless 8555 tcp/udp is forwarded. +- **LPR:** removed `license_plate` from front_driveway tracked objects — the COCO-80 model has no such label (startup warning); LPR runs via Frigate's dedicated plate detector on `car` objects. +- **Camera-side:** Duo 3 interframe space set to 1x (gop 1) per Frigate live-view docs for faster stream startup/recovery. +- Full camera hardware specs: see `frigate-cameras.md` (this folder). diff --git a/thinkstation/open-webui/docker-compose.yml b/jgpc/open-webui/docker-compose.yml similarity index 100% rename from thinkstation/open-webui/docker-compose.yml rename to jgpc/open-webui/docker-compose.yml diff --git a/thinkstation/stirling-pdf/docker-compose.yml b/jgpc/stirling-pdf/docker-compose.yml similarity index 100% rename from thinkstation/stirling-pdf/docker-compose.yml rename to jgpc/stirling-pdf/docker-compose.yml diff --git a/owncloud/README.md b/owncloud/README.md new file mode 100644 index 0000000..a198541 --- /dev/null +++ b/owncloud/README.md @@ -0,0 +1,76 @@ +# ownCloud Photo Organizer + +## Overview + +ownCloud's Android app does not support automatic year/month subfolder creation +during instant upload (unlike Nextcloud). This script compensates by running +nightly and sorting all uploaded photos and videos into a `YEAR/YEAR-MM/` +folder structure. + +## Script + +**Location on server:** `/usr/local/bin/organize_photos.sh` + +**Source folder watched:** +`/mnt/INTEL-SSD/ownCloud - Joe Gitta@cloud.jgitta.com/Personal/InstantUpload` + +**Subfolders processed:** `Camera`, `BlueIris`, `Facebook`, `scans`, `EufyVideoDir` + +**Supported file types:** jpg, jpeg, png, gif, heic, webp, bmp, tiff, mp4, mov, pdf + +## How It Works + +The script reads the date from each filename using these patterns (in order): + +1. `YYYYMMDD` embedded in the filename (e.g. `20231022_082107.jpg`) +2. `YYYY-MM-DD` or `YYYY_MM_DD` format +3. 13-digit Unix timestamp in milliseconds (e.g. `FB_IMG_1572815868839.jpg`) +4. `MM_DD_YYYY` prefix (scans folder format, e.g. `06_11_2026_7_28_16_AM.pdf`) + +Files that don't match any pattern are moved to `_unsorted/` for manual review. + +## Output Structure + +``` +InstantUpload/ +└── Camera/ + ├── 2023/ + │ ├── 2023-06/ + │ └── 2023-12/ + ├── 2024/ + │ └── 2024-03/ + └── _unsorted/ +``` + +## Cron Job + +Runs nightly at 2:00 AM as root: + +``` +0 2 * * * /usr/local/bin/organize_photos.sh +``` + +To view or edit: `sudo crontab -e` + +## Log File + +Each run appends to `/var/log/organize_photos.log`: + +``` +=== 2026-06-14 02:00:01 Starting === + Moved: 12 Unsorted: 0 Skipped: 0 Errors: 0 +=== Done === +``` + +Check the log anytime with: +```bash +cat /var/log/organize_photos.log +``` + +## Installation + +```bash +sudo cp organize_photos.sh /usr/local/bin/organize_photos.sh +sudo chmod +x /usr/local/bin/organize_photos.sh +(sudo crontab -l; echo "0 2 * * * /usr/local/bin/organize_photos.sh") | sudo crontab - +``` diff --git a/owncloud/organize_photos.sh b/owncloud/organize_photos.sh new file mode 100755 index 0000000..81e094a --- /dev/null +++ b/owncloud/organize_photos.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +BASE="/mnt/INTEL-SSD/ownCloud - Joe Gitta@cloud.jgitta.com/Personal/InstantUpload" +UNSORTED="$BASE/_unsorted" +LOG="/var/log/organize_photos.log" +moved=0; skipped=0; unsorted=0; errors=0 + +echo "=== $(date +%Y-%m-%d\ %H:%M:%S) Starting ===" >> "$LOG" + +ts_to_ym() { + local ts_ms="$1" + local ts_s=$(( ts_ms / 1000 )) + date -d "@$ts_s" "+%Y %m" 2>/dev/null +} + +get_ym() { + local f="$1" + local b + b=$(basename "$f") + if [[ "$b" =~ (^|[^0-9])([0-9]{4})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01]) ]]; then + echo "${BASH_REMATCH[2]} ${BASH_REMATCH[3]}"; return + fi + if [[ "$b" =~ ([0-9]{4})[-_](0[1-9]|1[0-2])[-_](0[1-9]|[12][0-9]|3[01]) ]]; then + echo "${BASH_REMATCH[1]} ${BASH_REMATCH[2]}"; return + fi + if [[ "$b" =~ (^|[^0-9])([0-9]{13})([^0-9]|$) ]]; then + ts_to_ym "${BASH_REMATCH[2]}"; return + fi + if [[ "$b" =~ ^([0-9]{2})_([0-9]{2})_([0-9]{4})_ ]]; then + echo "${BASH_REMATCH[3]} ${BASH_REMATCH[1]}"; return + fi + echo "" +} + +move_file() { + local src="$1" + local root="$2" + local fname + fname=$(basename "$src") + local ym + ym=$(get_ym "$src") + if [[ -z "$ym" ]]; then + mkdir -p "$UNSORTED" + if [[ ! -e "$UNSORTED/$fname" ]]; then + mv "$src" "$UNSORTED/$fname" && ((unsorted++)) || ((errors++)) + else + ((skipped++)) + fi + return + fi + local year month dest_dir dest + year=$(echo "$ym" | cut -d' ' -f1) + month=$(echo "$ym" | cut -d' ' -f2) + dest_dir="$root/$year/$year-$month" + dest="$dest_dir/$fname" + mkdir -p "$dest_dir" + if [[ -e "$dest" ]]; then + ((skipped++)); return + fi + mv "$src" "$dest" && ((moved++)) || { echo " ERROR: $fname" >> "$LOG"; ((errors++)); } +} + +for SUBDIR in Camera BlueIris Facebook scans EufyVideoDir; do + SUBPATH="$BASE/$SUBDIR" + [[ -d "$SUBPATH" ]] || continue + while IFS= read -r -d '' f; do + move_file "$f" "$SUBPATH" + done < <(find "$SUBPATH" -maxdepth 1 -type f -print0) +done + +echo " Moved: $moved Unsorted: $unsorted Skipped: $skipped Errors: $errors" >> "$LOG" +echo "=== Done ===" >> "$LOG" diff --git a/siklos/beszel/docker-compose.yml b/siklos/beszel/docker-compose.yml new file mode 100644 index 0000000..60363cf --- /dev/null +++ b/siklos/beszel/docker-compose.yml @@ -0,0 +1,27 @@ +services: + beszel: + image: henrygd/beszel:latest + container_name: beszel + restart: always + environment: + APP_URL: https://beszel.jgitta.com + ports: + - "8085:8090" + volumes: + - ./beszel_data:/beszel_data + - ./beszel_socket:/beszel_socket + + beszel-agent: + image: henrygd/beszel-agent:latest + container_name: beszel-agent + restart: always + network_mode: host + volumes: + - ./beszel_agent_data:/var/lib/beszel-agent + - ./beszel_socket:/beszel_socket + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + LISTEN: /beszel_socket/beszel.sock + HUB_URL: http://localhost:8085 + TOKEN: LNlfwOORlQXrfFFjFzjb7qCDZ4LVn-lECgkLmmwbyq8 + KEY: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF3921TigvLCBlSDqgm1bIz2To1ONUT0ahXszPTxlngU" diff --git a/siklos/monitoring/docker-compose.yml b/siklos/monitoring/docker-compose.yml deleted file mode 100644 index 26e3a16..0000000 --- a/siklos/monitoring/docker-compose.yml +++ /dev/null @@ -1,65 +0,0 @@ -services: - prometheus: - image: prom/prometheus:latest - container_name: prometheus - restart: unless-stopped - ports: - - "9090:9090" - volumes: - - /srv/docker/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro - - prometheus_data:/prometheus - command: - - "--config.file=/etc/prometheus/prometheus.yml" - - "--storage.tsdb.path=/prometheus" - - "--storage.tsdb.retention.time=30d" - - "--web.enable-lifecycle" - - "--web.enable-admin-api" - - grafana: - image: grafana/grafana:latest - container_name: grafana - restart: unless-stopped - ports: - - "3020:3000" - volumes: - - grafana_data:/var/lib/grafana - environment: - - GF_SECURITY_ADMIN_USER=admin - - GF_SECURITY_ADMIN_PASSWORD=Jogiocsi1211+ - - GF_USERS_ALLOW_SIGN_UP=false - - FTLCONF_dns_maxConcurrentQueries=300 - depends_on: - - prometheus - - cadvisor: - image: gcr.io/cadvisor/cadvisor:latest - container_name: cadvisor - restart: unless-stopped - privileged: true - ports: - - "8090:8080" - volumes: - - /:/rootfs:ro - - /var/run:/var/run:ro - - /sys:/sys:ro - - /var/lib/docker:/var/lib/docker:ro - - /dev/disk/:/dev/disk:ro - - graphite-exporter: - image: prom/graphite-exporter:latest - container_name: graphite-exporter - restart: unless-stopped - ports: - - "9109:9109" - - "9109:9109/udp" - - "9108:9108" - volumes: - - /srv/docker/monitoring/graphite/graphite_mapping.conf:/tmp/graphite_mapping.conf:ro - command: - - "--graphite.mapping-config=/tmp/graphite_mapping.conf" - - "--graphite.listen-address=:9109" - - "--web.listen-address=:9108" - -volumes: - prometheus_data: - grafana_data: diff --git a/thinkstation/frigate/docker-compose.yml b/thinkstation/frigate/docker-compose.yml deleted file mode 100644 index b7e5472..0000000 --- a/thinkstation/frigate/docker-compose.yml +++ /dev/null @@ -1,35 +0,0 @@ -services: - frigate: - container_name: frigate - image: ghcr.io/blakeblackshear/frigate:stable-tensorrt - privileged: true - shm_size: "1024mb" - restart: always - runtime: nvidia - environment: - - NVIDIA_VISIBLE_DEVICES=all - - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility - - FRIGATE_RTSP_PASSWORD=restreampass - secrets: - - frigate_jwt_secret - deploy: - resources: - reservations: - devices: - - driver: nvidia - count: 1 - capabilities: [gpu, compute, video] - volumes: - - /srv/docker/frigate/config:/config - - /mnt/14TB-HD/frigate/media:/media/frigate - - /etc/localtime:/etc/localtime:ro - ports: - - "5000:5000" - - "8971:8971" - - "8554:8554" - - "8555:8555/tcp" - - "8555:8555/udp" - -secrets: - frigate_jwt_secret: - file: /srv/docker/frigate/config/jwt_secret