Initial upload
This commit is contained in:
96
recipes/services/frigate/install.sh
Normal file
96
recipes/services/frigate/install.sh
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/frigate"
|
||||
$SUDO mkdir -p "$BASE/config"
|
||||
$SUDO mkdir -p "$BASE/media"
|
||||
cd "$BASE"
|
||||
|
||||
echo ""
|
||||
echo "Möchtest du Coral TPU verwenden?"
|
||||
echo " y = USB / PCIe TPU einbinden"
|
||||
echo " n = ohne TPU (CPU Only)"
|
||||
read -p "Auswahl (y/n): " TPU
|
||||
|
||||
TPU_CONFIG=""
|
||||
if [[ "$TPU" == "y" || "$TPU" == "Y" ]]; then
|
||||
TPU_CONFIG=" devices:
|
||||
- /dev/apex_0:/dev/apex_0
|
||||
- /dev/bus/usb:/dev/bus/usb"
|
||||
echo "Coral TPU-Unterstützung aktiviert."
|
||||
else
|
||||
echo "Installiere ohne TPU."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
read -p "Soll direkt eine Kamera eingetragen werden? (y/n): " ADD_CAM
|
||||
|
||||
CAMERA_CONFIG=""
|
||||
if [[ "$ADD_CAM" == "y" || "$ADD_CAM" == "Y" ]]; then
|
||||
read -p "Name der Kamera (z.B. wohnzimmer): " CAM_NAME
|
||||
read -p "RTSP URL (z.B. rtsp://user:pass@192.168.x.x/stream): " CAM_URL
|
||||
|
||||
CAMERA_CONFIG="cameras:
|
||||
$CAM_NAME:
|
||||
ffmpeg:
|
||||
inputs:
|
||||
- path: \"$CAM_URL\"
|
||||
input_args: preset-rtsp-restream"
|
||||
else
|
||||
CAMERA_CONFIG="cameras: {}"
|
||||
fi
|
||||
|
||||
$SUDO tee "$BASE/config/config.yml" >/dev/null <<EOF
|
||||
mqtt:
|
||||
enabled: false
|
||||
|
||||
${CAMERA_CONFIG}
|
||||
EOF
|
||||
|
||||
$SUDO tee "$BASE/docker-compose.yml" >/dev/null <<EOF
|
||||
services:
|
||||
frigate:
|
||||
image: ghcr.io/blakeblackshear/frigate:stable
|
||||
container_name: frigate
|
||||
privileged: true
|
||||
restart: unless-stopped
|
||||
shm_size: "64m"
|
||||
volumes:
|
||||
- ./config:/config
|
||||
- ./media:/media/frigate
|
||||
- /dev/bus/usb:/dev/bus/usb
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
${TPU_CONFIG}
|
||||
ports:
|
||||
- "5000:5000"
|
||||
- "8554:8554"
|
||||
- "8555:8555/tcp"
|
||||
- "8555:8555/udp"
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Frigate wurde installiert."
|
||||
log "Web UI: http://<server-ip>:5000"
|
||||
log "Konfiguration: $BASE/config/config.yml"
|
||||
|
||||
echo ""
|
||||
read -p "Soll NGINX Proxy für Frigate eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte erst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Starte Proxy-Konfiguration:"
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
65
recipes/services/grafana/install.sh
Normal file
65
recipes/services/grafana/install.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/grafana"
|
||||
$SUDO mkdir -p "$BASE/data"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation von Grafana..."
|
||||
|
||||
# Funktion: finde den nächsten freien Port ab 3000
|
||||
find_free_port() {
|
||||
PORT=3000
|
||||
while ss -lnt | awk '{print $4}' | grep -q ":$PORT$"; do
|
||||
PORT=$((PORT + 1))
|
||||
done
|
||||
echo "$PORT"
|
||||
}
|
||||
|
||||
FREE_PORT=$(find_free_port)
|
||||
echo "✅ Freier Port für Grafana: $FREE_PORT"
|
||||
|
||||
$SUDO tee docker-compose.yml >/dev/null <<EOF
|
||||
services:
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
container_name: grafana-$FREE_PORT
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "$FREE_PORT:3000"
|
||||
volumes:
|
||||
- ./data:/var/lib/grafana
|
||||
environment:
|
||||
GF_SECURITY_ADMIN_USER=admin
|
||||
GF_SECURITY_ADMIN_PASSWORD=admin
|
||||
TZ=Europe/Berlin
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Grafana wurde installiert."
|
||||
log "Web UI: http://<server-ip>:$FREE_PORT"
|
||||
log "Standard Login: admin / admin (bitte ändern!)"
|
||||
log "Daten liegen in: $BASE/data"
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Bitte Proxy-Pfad einrichten:"
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
|
||||
49
recipes/services/homeassistant/install.sh
Normal file
49
recipes/services/homeassistant/install.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/homeassistant"
|
||||
$SUDO mkdir -p "$BASE/config"
|
||||
cd "$BASE"
|
||||
|
||||
echo ""
|
||||
echo "Starte Installation von Home Assistant (Container-Modus)."
|
||||
|
||||
# docker-compose schreiben
|
||||
$SUDO tee docker-compose.yml >/dev/null <<'EOF'
|
||||
services:
|
||||
homeassistant:
|
||||
image: ghcr.io/home-assistant/home-assistant:stable
|
||||
container_name: homeassistant
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./config:/config
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Home Assistant wurde installiert."
|
||||
log "Web UI (wenn kein Proxy): http://<server-ip>:8123"
|
||||
log "Konfiguration: $BASE/config/"
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Bitte Proxy-Pfad einrichten:"
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
49
recipes/services/myspeed/install.sh
Normal file
49
recipes/services/myspeed/install.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/myspeed"
|
||||
$SUDO mkdir -p "$BASE/data"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation von MySpeed (germannewsmaker/myspeed)..."
|
||||
|
||||
$SUDO tee docker-compose.yml >/dev/null <<'EOF'
|
||||
services:
|
||||
myspeed:
|
||||
image: germannewsmaker/myspeed:latest
|
||||
container_name: myspeed
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "52100:52100"
|
||||
volumes:
|
||||
- ./data:/myspeed/data
|
||||
environment:
|
||||
TZ=Europe/Berlin
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "MySpeed wurde installiert."
|
||||
log "Web UI: http://<server-ip>:52100"
|
||||
log "Daten liegen in: $BASE/data"
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Bitte Proxy-Pfad einrichten:"
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
70
recipes/services/nginx-ai-configurator/install.sh
Normal file
70
recipes/services/nginx-ai-configurator/install.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
echo ""
|
||||
echo "=== NGINX KI-Proxy Konfigurator ==="
|
||||
echo ""
|
||||
|
||||
read -p "Pfad unter dem KI erreichbar sein soll (z.B. /ai): " KI_PATH
|
||||
read -p "Backend-Adresse (z.B. http://127.0.0.1:11434): " KI_BACKEND
|
||||
|
||||
echo ""
|
||||
echo "Ist Ollama installiert? (y/n)"
|
||||
read OLLAMA
|
||||
|
||||
if [[ "$OLLAMA" =~ ^[Yy]$ ]]; then
|
||||
echo "Ollama wird geprüft..."
|
||||
if ! systemctl is-active --quiet ollama && ! pgrep ollama >/dev/null; then
|
||||
echo "⚠️ Ollama läuft nicht. Bitte vorher installieren/starten."
|
||||
else
|
||||
echo "✅ Ollama läuft."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Soll zusätzlich der Memory-Server integriert werden? (y/n)"
|
||||
read MEM
|
||||
|
||||
if [[ "$MEM" =~ ^[Yy]$ ]]; then
|
||||
read -p "Memory Server URL (z.B. http://127.0.0.1:8085): " MEMORY_URL
|
||||
fi
|
||||
|
||||
NGINX_CONF="/etc/nginx/conf.d/ai-proxy.conf"
|
||||
|
||||
$SUDO tee $NGINX_CONF >/dev/null <<EOF
|
||||
location $KI_PATH/ {
|
||||
proxy_pass $KI_BACKEND/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host \$host;
|
||||
}
|
||||
EOF
|
||||
|
||||
if [[ "$MEM" =~ ^[Yy]$ ]]; then
|
||||
$SUDO tee -a $NGINX_CONF >/dev/null <<EOF
|
||||
|
||||
location ${KI_PATH}_memory/ {
|
||||
proxy_pass $MEMORY_URL/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host \$host;
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Reloading nginx..."
|
||||
$SUDO systemctl reload nginx
|
||||
|
||||
echo ""
|
||||
echo "✅ Fertig!"
|
||||
echo "KI UI erreichbar unter: http://<server-ip>$KI_PATH/"
|
||||
if [[ "$MEM" =~ ^[Yy]$ ]]; then
|
||||
echo "Memory erreichbar unter: http://<server-ip>${KI_PATH}_memory/"
|
||||
fi
|
||||
62
recipes/services/node-red/install.sh
Normal file
62
recipes/services/node-red/install.sh
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/node-red"
|
||||
$SUDO mkdir -p "$BASE/data"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation von Node-RED..."
|
||||
|
||||
# Funktion: finde den nächsten freien Port ab 1880
|
||||
find_free_port() {
|
||||
PORT=1880
|
||||
while ss -lnt | awk '{print $4}' | grep -q ":$PORT$"; do
|
||||
PORT=$((PORT + 1))
|
||||
done
|
||||
echo "$PORT"
|
||||
}
|
||||
|
||||
FREE_PORT=$(find_free_port)
|
||||
echo "✅ Freier Port für Node-RED gefunden: $FREE_PORT"
|
||||
|
||||
$SUDO tee docker-compose.yml >/dev/null <<EOF
|
||||
services:
|
||||
node-red:
|
||||
image: nodered/node-red:latest
|
||||
container_name: node-red-$FREE_PORT
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "$FREE_PORT:1880"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
environment:
|
||||
TZ=Europe/Berlin
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Node-RED wurde installiert."
|
||||
log "Web UI: http://<server-ip>:$FREE_PORT"
|
||||
log "Konfiguration / Flows: $BASE/data/"
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Bitte Proxy-Pfad einrichten:"
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
|
||||
57
recipes/services/omada/install.sh
Normal file
57
recipes/services/omada/install.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/omada"
|
||||
$SUDO mkdir -p "$BASE/data"
|
||||
$SUDO mkdir -p "$BASE/logs"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation des Omada Controllers..."
|
||||
|
||||
# docker-compose
|
||||
$SUDO tee docker-compose.yml >/dev/null <<'EOF'
|
||||
services:
|
||||
omada:
|
||||
image: mbentley/omada-controller:latest
|
||||
container_name: omada-controller
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
TZ: Europe/Berlin
|
||||
MANAGE_HTTP_PORT: 8088
|
||||
MANAGE_HTTPS_PORT: 8043
|
||||
PORTAL_HTTP_PORT: 8086
|
||||
PORTAL_HTTPS_PORT: 8843
|
||||
volumes:
|
||||
- ./data:/opt/tplink/EAPController/data
|
||||
- ./logs:/opt/tplink/EAPController/logs
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Omada Controller wurde installiert."
|
||||
log "Web UI (HTTPS): https://<server-ip>:8043"
|
||||
log "Mobile App Discovery funktioniert automatisch (host network mode)."
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Hinweis: Omada UI benötigt HTTPS Proxy!"
|
||||
echo "Proxy-Ziel: <server-ip>:8043"
|
||||
echo ""
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
87
recipes/services/paperless-ai-multi/install.sh
Normal file
87
recipes/services/paperless-ai-multi/install.sh
Normal file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
echo ""
|
||||
read -p "Instanz Nummer (z.B. 1, 2, 3...): " INSTANCE
|
||||
BASE="/srv/docker/services/paperless-$INSTANCE"
|
||||
$SUDO mkdir -p "$BASE/data" "$BASE/media" "$BASE/consume"
|
||||
cd "$BASE"
|
||||
|
||||
PORT=$((8100 + INSTANCE))
|
||||
echo "Web-Port wird: $PORT"
|
||||
|
||||
echo ""
|
||||
echo "Paperless Variante:"
|
||||
echo " 1) Paperless-NGX (ohne KI)"
|
||||
echo " 2) Paperless-AI (mit KI/RAG)"
|
||||
read -p "Auswahl (1/2): " MODE
|
||||
|
||||
if [[ "$MODE" == "2" ]]; then
|
||||
read -p "KI Backend URL (z.B. http://127.0.0.1:11434): " AI_URL
|
||||
read -p "Memory Server URL (z.B. http://127.0.0.1:8085): " MEMORY_URL
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Instanz $INSTANCE ersetzen ohne Daten zu löschen?"
|
||||
read -p "(y/n): " REPLACE
|
||||
|
||||
if [[ "$REPLACE" =~ ^[Yy]$ ]]; then
|
||||
$SUDO docker compose down || true
|
||||
fi
|
||||
|
||||
if [[ "$MODE" == "1" ]]; then
|
||||
cat > docker-compose.yml <<EOF
|
||||
services:
|
||||
paperless-$INSTANCE:
|
||||
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
||||
container_name: paperless-$INSTANCE
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "$PORT:8000"
|
||||
volumes:
|
||||
- ./data:/usr/src/paperless/data
|
||||
- ./media:/usr/src/paperless/media
|
||||
- ./consume:/usr/src/paperless/consume
|
||||
environment:
|
||||
TZ=Europe/Berlin
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [[ "$MODE" == "2" ]]; then
|
||||
cat > docker-compose.yml <<EOF
|
||||
services:
|
||||
paperless-$INSTANCE:
|
||||
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
||||
container_name: paperless-$INSTANCE
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "$PORT:8000"
|
||||
volumes:
|
||||
- ./data:/usr/src/paperless/data
|
||||
- ./media:/usr/src/paperless/media
|
||||
- ./consume:/usr/src/paperless/consume
|
||||
environment:
|
||||
TZ=Europe/Berlin
|
||||
|
||||
paperless-ai-$INSTANCE:
|
||||
image: clusterzx/paperless-ai:latest
|
||||
container_name: paperless-ai-$INSTANCE
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
PAPERLESS_AI_OPENAI_API_BASE_URL: "$AI_URL"
|
||||
PAPERLESS_AI_EMBEDDING_MODEL: "nomic-embed-text"
|
||||
PAPERLESS_AI_CHAT_MODEL: "qwen2.5:0.5b"
|
||||
PAPERLESS_AI_MEMORY_SERVER_URL: "$MEMORY_URL"
|
||||
TZ: Europe/Berlin
|
||||
EOF
|
||||
fi
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
echo ""
|
||||
echo "✅ Instanz $INSTANCE installiert!"
|
||||
echo "Web UI: http://<server-ip>:$PORT"
|
||||
44
recipes/services/portainer-watchtower/install.sh
Normal file
44
recipes/services/portainer-watchtower/install.sh
Normal file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/system/portainer-watchtower"
|
||||
$SUDO mkdir -p "$BASE"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation von Portainer + Watchtower..."
|
||||
|
||||
$SUDO tee docker-compose.yml >/dev/null <<'EOF'
|
||||
services:
|
||||
portainer:
|
||||
image: portainer/portainer-ce:latest
|
||||
container_name: portainer
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9443:9443"
|
||||
- "9000:9000"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./portainer-data:/data
|
||||
|
||||
watchtower:
|
||||
image: containrrr/watchtower:latest
|
||||
container_name: watchtower
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
command:
|
||||
- --schedule=0 0 3 * * *
|
||||
- --cleanup
|
||||
- --rolling-restart
|
||||
- --update-delay=72h
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Portainer + Watchtower installiert."
|
||||
log "Portainer UI: https://<server-ip>:9443 (oder http://<server-ip>:9000)"
|
||||
log "Watchtower aktualisiert Container täglich um 03:00 Uhr mit 72h Verzögerung."
|
||||
55
recipes/services/unifi/install.sh
Normal file
55
recipes/services/unifi/install.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/unifi"
|
||||
$SUDO mkdir -p "$BASE/data"
|
||||
$SUDO mkdir -p "$BASE/logs"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation des UniFi Controllers..."
|
||||
|
||||
# docker-compose
|
||||
$SUDO tee docker-compose.yml >/dev/null <<'EOF'
|
||||
services:
|
||||
unifi-controller:
|
||||
image: linuxserver/unifi-controller:latest
|
||||
container_name: unifi-controller
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
TZ: Europe/Berlin
|
||||
volumes:
|
||||
- ./data:/config
|
||||
- ./logs:/config/logs
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "UniFi Controller wurde installiert."
|
||||
log "Web UI (HTTPS): https://<server-ip>:8443"
|
||||
log "Geräte-Erkennung funktioniert automatisch (host network mode)."
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Hinweis: UniFi UI benötigt HTTPS Proxy!"
|
||||
echo "Proxy-Ziel: <server-ip>:8443"
|
||||
echo ""
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
47
recipes/services/uptime-kuma/install.sh
Normal file
47
recipes/services/uptime-kuma/install.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ensure_root
|
||||
detect_pkg_manager
|
||||
pkg_install curl
|
||||
|
||||
BASE="/srv/docker/services/uptime-kuma"
|
||||
$SUDO mkdir -p "$BASE/data"
|
||||
cd "$BASE"
|
||||
|
||||
echo "Starte Installation von Uptime Kuma..."
|
||||
|
||||
$SUDO tee docker-compose.yml >/dev/null <<'EOF'
|
||||
services:
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:latest
|
||||
container_name: uptime-kuma
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3001:3001"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
EOF
|
||||
|
||||
$SUDO docker compose up -d
|
||||
|
||||
log "Uptime Kuma wurde installiert."
|
||||
log "Web UI: http://<server-ip>:3001"
|
||||
log "Daten liegen in: $BASE/data"
|
||||
|
||||
echo ""
|
||||
read -p "Soll ein NGINX Proxy-Pfad eingerichtet werden? (y/n): " PROXY
|
||||
|
||||
if [[ "$PROXY" == "y" || "$PROXY" == "Y" ]]; then
|
||||
PROXY_SCRIPT="/srv/docker/system/nginx-proxy-path/install.sh"
|
||||
|
||||
if [ ! -f "$PROXY_SCRIPT" ]; then
|
||||
log "Fehler: nginx-proxy-path nicht installiert."
|
||||
log "Bitte zuerst das Rezept 'nginx-proxy-path' installieren."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Bitte Proxy-Pfad einrichten:"
|
||||
bash "$PROXY_SCRIPT"
|
||||
fi
|
||||
Reference in New Issue
Block a user