MongoDB-Version automatisch anhand der CPU wählen (start.sh)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
247f20602b
commit
2f1a69288a
@@ -0,0 +1,5 @@
|
|||||||
|
MONGO_USER=unifi
|
||||||
|
MONGO_PASS=hier-ein-langes-zufaelliges-passwort
|
||||||
|
MONGO_DBNAME=unifi
|
||||||
|
# MONGO_VERSION wird von start.sh automatisch passend zur CPU gesetzt.
|
||||||
|
# Nur von Hand setzen, wenn man genau weiß, was man tut.
|
||||||
@@ -4,13 +4,18 @@ UniFi Network Application (Controller) mit MongoDB, alle persistenten Daten
|
|||||||
liegen im Projektordner unter `./data/`.
|
liegen im Projektordner unter `./data/`.
|
||||||
|
|
||||||
- Image: [linuxserver/unifi-network-application](https://docs.linuxserver.io/images/docker-unifi-network-application/)
|
- Image: [linuxserver/unifi-network-application](https://docs.linuxserver.io/images/docker-unifi-network-application/)
|
||||||
- Datenbank: MongoDB **4.4** (bewusst — die CPU dieses Rechners hat kein AVX,
|
- Datenbank: MongoDB — die Version wird von `start.sh` beim ersten Start
|
||||||
MongoDB 5+ würde nicht starten. Nicht auf ein neueres Mongo-Image wechseln!)
|
automatisch passend zur CPU gewählt und in `.env` gepinnt:
|
||||||
|
x86_64/ARM mit AVX bzw. ARMv8.2 → **7.0**, ältere CPUs ohne AVX → **4.4**
|
||||||
|
(Mongo 5+ startet dort nicht). Danach den Pin **nicht** von Hand erhöhen —
|
||||||
|
eine bestehende Datenbank läuft nicht ohne Migration unter einer neueren
|
||||||
|
Major-Version.
|
||||||
|
|
||||||
## Erster Start
|
## Erster Start
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose up -d
|
cp .env.example .env # und MONGO_PASS auf ein eigenes Passwort setzen
|
||||||
|
./start.sh # wählt die MongoDB-Version und startet den Stack
|
||||||
docker-compose logs -f unifi-network-application # warten bis der Start durch ist
|
docker-compose logs -f unifi-network-application # warten bis der Start durch ist
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@ version: "3.8"
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
unifi-db:
|
unifi-db:
|
||||||
image: mongo:4.4
|
image: mongo:${MONGO_VERSION:-4.4}
|
||||||
container_name: unifi-db
|
container_name: unifi-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Startet den Stack und wählt beim allerersten Start automatisch die passende
|
||||||
|
# MongoDB-Version für diese CPU:
|
||||||
|
#
|
||||||
|
# x86_64 mit AVX -> mongo:7.0
|
||||||
|
# x86_64 ohne AVX -> mongo:4.4 (Mongo 5+ startet ohne AVX nicht)
|
||||||
|
# aarch64 mit ARMv8.2 -> mongo:7.0 (z.B. Raspberry Pi 5, Apple Silicon)
|
||||||
|
# aarch64 ohne ARMv8.2 -> mongo:4.4 (z.B. Raspberry Pi 4)
|
||||||
|
#
|
||||||
|
# Die gewählte Version wird in .env als MONGO_VERSION festgeschrieben und
|
||||||
|
# danach NIE automatisch geändert: eine bestehende Datenbank kann nicht
|
||||||
|
# einfach unter einer neueren Major-Version starten (Migration nötig).
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
detect_mongo_version() {
|
||||||
|
local arch flags
|
||||||
|
arch="$(uname -m)"
|
||||||
|
flags="$(grep -m1 -iE '^(flags|Features)' /proc/cpuinfo 2>/dev/null || true)"
|
||||||
|
case "$arch" in
|
||||||
|
x86_64)
|
||||||
|
if grep -qw avx <<< "$flags"; then echo "7.0"; else echo "4.4"; fi ;;
|
||||||
|
aarch64|arm64)
|
||||||
|
# asimddp ist ein ARMv8.2-Merkmal; Mongo 5+ braucht ARMv8.2-A
|
||||||
|
if grep -qw asimddp <<< "$flags"; then echo "7.0"; else echo "4.4"; fi ;;
|
||||||
|
*)
|
||||||
|
echo "4.4" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ! -f .env ]]; then
|
||||||
|
echo "FEHLER: .env fehlt (MONGO_USER/MONGO_PASS/MONGO_DBNAME)." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -q '^MONGO_VERSION=' .env; then
|
||||||
|
echo "==> MongoDB-Version ist bereits gepinnt: $(grep '^MONGO_VERSION=' .env)"
|
||||||
|
else
|
||||||
|
if [[ -d data/mongodb ]] && [[ -n "$(ls -A data/mongodb 2>/dev/null)" ]]; then
|
||||||
|
# Bestehende Datenbank ohne Pin: Stand vor dieser Automatik -> 4.4 festschreiben
|
||||||
|
VERSION="4.4"
|
||||||
|
echo "==> Bestehende Datenbank gefunden, pinne bisherige Version: mongo:$VERSION"
|
||||||
|
else
|
||||||
|
VERSION="$(detect_mongo_version)"
|
||||||
|
echo "==> CPU-Erkennung ($(uname -m)): verwende mongo:$VERSION"
|
||||||
|
fi
|
||||||
|
echo "MONGO_VERSION=$VERSION" >> .env
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker-compose up -d
|
||||||
|
echo ""
|
||||||
|
echo "Stack gestartet. Logs: docker-compose logs -f unifi-network-application"
|
||||||
Reference in New Issue
Block a user