- Replace hostname -I with ip addr parsing for better compatibility - hostname command may not be available or behave differently on some systems
65 lines
2.1 KiB
Bash
65 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Portainer installation and configuration script (2025-ready)
|
|
|
|
install_portainer() {
|
|
log_info "Installing Portainer..."
|
|
|
|
# Docker muss installiert und aktiv sein
|
|
if ! command -v docker &>/dev/null; then
|
|
log_error "Docker ist nicht installiert. Bitte Docker zuerst installieren."
|
|
exit 1
|
|
fi
|
|
|
|
# Portainer-Volume anlegen
|
|
sudo docker volume create portainer_data
|
|
|
|
# Vorherigen Portainer-Container stoppen und entfernen, falls vorhanden
|
|
if sudo docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
|
|
sudo docker stop portainer || true
|
|
sudo docker rm portainer || true
|
|
fi
|
|
|
|
# Aktuelles Portainer-Image holen
|
|
sudo docker pull portainer/portainer-ce:latest
|
|
|
|
# Portainer starten (Web: Port 9000, Agent: 8000)
|
|
sudo docker run -d \
|
|
--name portainer \
|
|
--restart=always \
|
|
-p 9000:9000 \
|
|
-p 9443:9443 \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-v portainer_data:/data \
|
|
portainer/portainer-ce:latest
|
|
|
|
# Warten bis Portainer vollständig gestartet ist
|
|
log_info "Warten auf Portainer-Initialisierung..."
|
|
sleep 10
|
|
|
|
# Portainer neu starten, um das initiale Security-Timeout zu umgehen
|
|
log_info "Portainer neu starten, um Security-Timeout zu beheben..."
|
|
sudo docker restart portainer
|
|
|
|
# Kurz warten, bis der Neustart abgeschlossen ist
|
|
sleep 5
|
|
|
|
log_success "Portainer wurde erfolgreich installiert und läuft auf Port 9000 (HTTP) und 9443 (HTTPS)."
|
|
local ip_address
|
|
ip_address=$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | head -1 | awk '{print $2}' | cut -d/ -f1)
|
|
log_info "Portainer ist nun verfügbar unter: https://${ip_address}:9443"
|
|
}
|
|
|
|
# Logging-Funktionen bereitstellen, falls nicht vorhanden
|
|
if ! command -v log_info &>/dev/null; then
|
|
log_info() { echo "[INFO] $1"; }
|
|
log_success() { echo "[SUCCESS] $1"; }
|
|
log_error() { echo "[ERROR] $1" >&2; }
|
|
fi
|
|
|
|
# Nur ausführen, wenn diese Datei direkt ausgeführt wird (nicht beim `source` in setup.sh).
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
# Hauptlogik
|
|
install_portainer
|
|
exit $?
|
|
fi |