#!/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"