fix: restore files unintentionally reverted by sync commit
- restore jgpc/ layout (undo accidental revert to thinkstation/), homelab-overview.md (June 13 version), docs/jarvis doc, owncloud scripts, siklos/beszel compose - re-remove jellyfin/node-exporter and siklos/monitoring (replaced by Beszel) - jgpc/frigate/docker-compose.yml: update to newer local version (cpuset pinning, 8G limit) - root frigate-* files are local working copies -> gitignored
This commit is contained in:
@@ -5,3 +5,6 @@ kopia-docker-compose-fixed.yml
|
||||
ocis-credentials.md
|
||||
*.bak
|
||||
*.bak2
|
||||
frigate-cameras.md
|
||||
frigate-config.yml
|
||||
frigate-docker-compose.yml
|
||||
|
||||
Binary file not shown.
+21
-6
@@ -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/<stack-name>/` on each host using **absolute paths**.
|
||||
@@ -120,7 +120,7 @@ All stack data volumes are stored at `/srv/docker/<stack-name>/` 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 |
|
||||
|
||||
|
||||
@@ -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)($$|/)'
|
||||
@@ -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:<name>#audio=opus` (WebRTC audio), and `onvif://<camera>: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).
|
||||
@@ -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 -
|
||||
```
|
||||
Executable
+72
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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:
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user