Linux_Server_Tools/Init-Server.sh

119 lines
4.5 KiB
Bash
Raw Normal View History

2025-02-28 08:19:52 +01:00
#!/bin/bash
2025-02-28 08:31:52 +01:00
# Define color codes
2025-02-28 08:33:08 +01:00
GREEN='\e[32m'
BLUE='\e[34m'
YELLOW='\e[33m'
NC='\e[0m' # No Color
2025-02-28 08:31:52 +01:00
# Function for consistent log messages
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_skip() { echo -e "${YELLOW}[SKIPPED]${NC} $1"; }
2025-02-28 08:26:43 +01:00
# Überprüfen, ob der .ssh-Ordner existiert, wenn nicht, erstelle ihn
if [ ! -d "$HOME/.ssh" ]; then
mkdir -m 700 "$HOME/.ssh"
2025-02-28 08:31:52 +01:00
log_success ".ssh-Verzeichnis wurde erstellt."
2025-02-28 08:26:43 +01:00
else
2025-02-28 08:31:52 +01:00
log_info ".ssh-Verzeichnis existiert bereits."
2025-02-28 08:26:43 +01:00
fi
2025-02-28 08:29:07 +01:00
# Benutzer fragen, ob ein SSH-Key hinzugefügt werden soll
2025-02-28 08:36:01 +01:00
log_info "SSH-Public-Key eingeben (Leerlassen zum Überspringen)"
2025-02-28 08:34:32 +01:00
read -p "> " user_input
2025-02-28 08:26:43 +01:00
2025-02-28 08:29:07 +01:00
# Nur fortfahren, wenn der Benutzer etwas eingegeben hat
if [ ! -z "$user_input" ]; then
# Überprüfen, ob der Key bereits in authorized_keys vorhanden ist
if grep -q "$user_input" "$HOME/.ssh/authorized_keys"; then
2025-02-28 08:31:52 +01:00
log_info "Der SSH-Public-Key ist bereits vorhanden."
2025-02-28 08:29:07 +01:00
else
# Den eingegebenen Public Key in die authorized_keys-Datei speichern
echo "$user_input" >> "$HOME/.ssh/authorized_keys"
2025-02-28 08:31:52 +01:00
log_success "SSH-Public-Key wurde hinzugefügt."
2025-02-28 08:29:07 +01:00
fi
2025-02-28 08:26:43 +01:00
else
2025-02-28 08:31:52 +01:00
log_skip "SSH-Key Installation übersprungen."
2025-02-28 08:26:43 +01:00
fi
2025-02-28 08:30:25 +01:00
# Fragen, ob das System aktualisiert werden soll
2025-02-28 08:34:32 +01:00
log_info "System aktualisieren? (Y/n)"
read -p "> " update_input
2025-02-28 08:30:25 +01:00
# Überprüfen der Eingabe - Standardmäßig 'Y' bei Enter, sonst nur bei 'y' oder 'Y'
if [[ -z "$update_input" || "$update_input" =~ ^[Yy]$ ]]; then
2025-02-28 08:31:52 +01:00
log_info "System wird aktualisiert..."
2025-02-28 08:30:25 +01:00
apt update && apt upgrade -y
2025-02-28 08:31:52 +01:00
log_success "System wurde erfolgreich aktualisiert."
2025-02-28 08:30:25 +01:00
else
2025-02-28 08:31:52 +01:00
log_skip "System-Aktualisierung übersprungen."
2025-02-28 08:30:25 +01:00
fi
2025-02-28 08:36:01 +01:00
# Fragen, ob Docker installiert werden soll
log_info "Docker installieren? (Y/n)"
read -p "> " docker_input
# Überprüfen der Eingabe - Standardmäßig 'Y' bei Enter, sonst nur bei 'y' oder 'Y'
if [[ -z "$docker_input" || "$docker_input" =~ ^[Yy]$ ]]; then
# Überprüfen, ob Docker bereits installiert ist
if command -v docker &> /dev/null; then
log_info "Docker ist bereits installiert."
else
log_info "Docker wird installiert..."
# Installiere benötigte Pakete
apt install -y apt-transport-https ca-certificates curl software-properties-common
# Füge Docker's offiziellen GPG-Schlüssel hinzu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Füge Docker Repository hinzu
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Aktualisiere Paketliste und installiere Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io
# Starte und aktiviere Docker
systemctl start docker
systemctl enable docker
log_success "Docker wurde erfolgreich installiert."
fi
else
log_skip "Docker-Installation übersprungen."
fi
2025-02-28 08:44:17 +01:00
2025-02-28 08:45:39 +01:00
# Fragen, ob Dockge installiert werden soll (nur wenn Docker installiert ist)
if command -v docker &> /dev/null; then
log_info "Dockge (Docker Compose Manager) installieren? (Y/n)"
read -p "> " dockge_input
# Überprüfen der Eingabe - Standardmäßig 'Y' bei Enter, sonst nur bei 'y' oder 'Y'
if [[ -z "$dockge_input" || "$dockge_input" =~ ^[Yy]$ ]]; then
log_info "Dockge wird installiert..."
docker run -d --name=dockge -p 5001:5001 -v /var/run/docker.sock:/var/run/docker.sock louislam/dockge
log_success "Dockge wurde erfolgreich installiert und läuft auf Port 5001."
else
log_skip "Dockge-Installation übersprungen."
fi
fi
2025-02-28 08:44:17 +01:00
# Fragen, ob Node.js installiert werden soll
log_info "Node.js installieren? (Y/n)"
read -p "> " nodejs_input
# Überprüfen der Eingabe - Standardmäßig 'Y' bei Enter, sonst nur bei 'y' oder 'Y'
if [[ -z "$nodejs_input" || "$nodejs_input" =~ ^[Yy]$ ]]; then
# Überprüfen, ob Node.js bereits installiert ist
if command -v node &> /dev/null; then
log_info "Node.js ist bereits installiert."
else
log_info "Node.js wird installiert..."
# Installiere curl falls noch nicht vorhanden
apt install -y curl
# Füge NodeSource Repository hinzu
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
# Installiere Node.js
apt install -y nodejs
log_success "Node.js wurde erfolgreich installiert."
fi
else
log_skip "Node.js-Installation übersprungen."
fi