113 lines
3.4 KiB
Bash
113 lines
3.4 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
echo "======================================"
|
|
echo " Raspberry Pi Docker IoT Server Setup"
|
|
echo "======================================"
|
|
|
|
### ---------- HOSTNAME ----------
|
|
|
|
CURRENT_HOSTNAME=$(hostname)
|
|
read -p "Hostname setzen? Aktuell '$CURRENT_HOSTNAME' (Enter = behalten): " NEW_HOSTNAME
|
|
if [ ! -z "$NEW_HOSTNAME" ]; then
|
|
echo "➡ Setze Hostname auf $NEW_HOSTNAME"
|
|
echo "$NEW_HOSTNAME" | sudo tee /etc/hostname >/dev/null
|
|
sudo sed -i "s/127.0.1.1.*/127.0.1.1 $NEW_HOSTNAME/" /etc/hosts
|
|
sudo hostnamectl set-hostname "$NEW_HOSTNAME"
|
|
fi
|
|
|
|
### ---------- TIMEZONE ----------
|
|
|
|
read -p "Zeitzone setzen? (Default Europe/Berlin) Enter = OK oder z.B. America/New_York: " TZ
|
|
TZ=${TZ:-Europe/Berlin}
|
|
sudo timedatectl set-timezone "$TZ"
|
|
echo "➡ Zeitzone gesetzt auf $TZ"
|
|
|
|
### ---------- NETWORK CONFIG ----------
|
|
|
|
read -p "Statische IP konfigurieren? (y/N): " SET_STATIC
|
|
if [[ "$SET_STATIC" =~ ^[Yy]$ ]]; then
|
|
read -p "IP Adresse (z.B. 192.168.1.50/24): " IPADDR
|
|
read -p "Gateway (z.B. 192.168.1.1): " GATEWAY
|
|
read -p "DNS Server (z.B. 192.168.1.1 8.8.8.8): " DNS
|
|
|
|
echo "➡ Konfiguriere statische IP..."
|
|
sudo nmcli con mod "Wired connection 1" ipv4.method manual ipv4.addresses "$IPADDR" ipv4.gateway "$GATEWAY" ipv4.dns "$DNS"
|
|
sudo nmcli con up "Wired connection 1"
|
|
else
|
|
echo "➡ DHCP bleibt aktiv"
|
|
fi
|
|
|
|
### ---------- SYSTEM UPDATE ----------
|
|
|
|
echo "➡ Systemupdate..."
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
### ---------- DOCKER INSTALL ----------
|
|
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "➡ Installiere Docker..."
|
|
curl -fsSL [https://get.docker.com](https://get.docker.com) | sh
|
|
sudo usermod -aG docker $USER
|
|
else
|
|
echo "Docker bereits installiert"
|
|
fi
|
|
|
|
echo "➡ Installiere Docker Compose Plugin..."
|
|
sudo apt install docker-compose-plugin -y
|
|
|
|
### ---------- FIREWALL ----------
|
|
|
|
echo "➡ Konfiguriere Firewall (UFW)"
|
|
sudo apt install ufw -y
|
|
sudo ufw default deny incoming
|
|
sudo ufw default allow outgoing
|
|
|
|
sudo ufw allow 22/tcp
|
|
sudo ufw allow 9443/tcp
|
|
sudo ufw allow 3000/tcp
|
|
sudo ufw allow 1880/tcp
|
|
sudo ufw allow 1883/tcp
|
|
sudo ufw allow 9001/tcp
|
|
|
|
sudo ufw --force enable
|
|
|
|
### ---------- PORTAINER ----------
|
|
|
|
echo "➡ Starte Portainer..."
|
|
docker volume create portainer_data || true
|
|
docker run -d
|
|
-p 8000:8000
|
|
-p 9443:9443
|
|
--name portainer
|
|
--restart=always
|
|
-v /var/run/docker.sock:/var/run/docker.sock
|
|
-v portainer_data:/data
|
|
portainer/portainer-ce:latest || true
|
|
|
|
### ---------- STACK SETUP ----------
|
|
|
|
APP_DIR="$HOME/docker-stack"
|
|
REPO_RAW_BASE="[https://raw.githubusercontent.com/DEIN_GITHUB_USER/DEIN_REPO/main](https://raw.githubusercontent.com/DEIN_GITHUB_USER/DEIN_REPO/main)"
|
|
|
|
mkdir -p "$APP_DIR"
|
|
cd "$APP_DIR"
|
|
|
|
echo "➡ Lade Compose & ENV Dateien..."
|
|
curl -O "$REPO_RAW_BASE/docker-compose.yml"
|
|
curl -o .env "$REPO_RAW_BASE/.env.example"
|
|
|
|
echo "➡ Lade Mosquitto Konfiguration..."
|
|
mkdir -p mosquitto
|
|
curl -o mosquitto/mosquitto.conf "$REPO_RAW_BASE/mosquitto/mosquitto.conf"
|
|
curl -o mosquitto/passwd.template "$REPO_RAW_BASE/mosquitto/passwd.template"
|
|
|
|
echo "➡ Lade Grafana Provisioning..."
|
|
mkdir -p grafana/provisioning/datasources
|
|
mkdir -p grafana/provisioning/dashboards
|
|
mkdir -p grafana/dashboards
|
|
|
|
curl -o grafana/provisioning/datasources/influxdb.yml "$REPO_RAW_BASE/grafana/provisioning/datasources/influxdb.yml"
|
|
curl -o grafana/provisioning/dashboards/dashboards.yml "$REPO_RAW_BASE/grafana/provisioning/dashboards/dashboards.yml"
|
|
curl -o grafana/dashboards/nodered-dashboard.json "$REPO_RAW_BASE/grafana/dashboar
|