111 lines
4.3 KiB
Bash

#!/bin/bash
# Projektarbeit-MYP Startskript für Linux
# Dieses Skript startet alle notwendigen Dienste für das MYP-Projekt
echo -e "\e[32mStarte MYP-Projekt...\e[0m"
# SSH-Server prüfen und aktivieren
echo -e "\e[33mPrüfe SSH-Server-Status...\e[0m"
if command -v systemctl > /dev/null; then
# Prüfen, ob SSH-Server installiert ist
if ! systemctl list-unit-files | grep -q ssh.service; then
echo -e "\e[33mSSH-Server scheint nicht installiert zu sein. Versuche zu installieren...\e[0m"
if command -v apt-get > /dev/null; then
sudo apt-get update && sudo apt-get install -y openssh-server
elif command -v yum > /dev/null; then
sudo yum install -y openssh-server
else
echo -e "\e[31mPacket-Manager nicht gefunden. Bitte installieren Sie openssh-server manuell.\e[0m"
fi
fi
# SSH-Server aktivieren und starten
echo -e "\e[33mAktiviere SSH-Server beim Systemstart...\e[0m"
sudo systemctl enable ssh.service || sudo systemctl enable sshd.service
# SSH-Server starten, falls nicht bereits läuft
if ! systemctl is-active --quiet ssh.service && ! systemctl is-active --quiet sshd.service; then
echo -e "\e[33mStarte SSH-Server...\e[0m"
sudo systemctl start ssh.service || sudo systemctl start sshd.service
else
echo -e "\e[32mSSH-Server läuft bereits.\e[0m"
fi
else
echo -e "\e[31mSystemctl nicht gefunden. Bitte aktivieren Sie den SSH-Server manuell.\e[0m"
fi
# Überprüfen, ob Docker läuft
if ! docker info > /dev/null 2>&1; then
echo -e "\e[33mDocker scheint nicht zu laufen. Versuche Docker zu starten...\e[0m"
# Versuchen, Docker zu starten (funktioniert auf Systemen mit systemd)
if command -v systemctl > /dev/null; then
sudo systemctl start docker
sleep 5
if ! docker info > /dev/null 2>&1; then
echo -e "\e[31mDocker konnte nicht gestartet werden. Bitte starten Sie Docker manuell und führen Sie dieses Skript erneut aus.\e[0m"
exit 1
fi
else
echo -e "\e[31mDocker ist nicht gestartet und konnte nicht automatisch gestartet werden.\e[0m"
echo -e "\e[31mBitte starten Sie Docker manuell und führen Sie dieses Skript erneut aus.\e[0m"
exit 1
fi
echo -e "\e[32mDocker wurde erfolgreich gestartet.\e[0m"
fi
# Überprüfen, ob die Container bereits laufen
RUNNING_CONTAINERS=$(docker ps --format "{{.Names}}" | grep -E "myp-backend|myp-rp|myp-caddy" | wc -l)
if [ "$RUNNING_CONTAINERS" -eq 3 ]; then
echo -e "\e[32mAlle MYP-Container laufen bereits.\e[0m"
else
# Container starten
echo -e "\e[33mStarte MYP-Container...\e[0m"
# Ins Projektverzeichnis wechseln
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Docker-Compose ausführen
docker-compose up -d
# Warten, bis alle Container laufen
echo -e "\e[33mWarte, bis alle Container bereit sind...\e[0m"
ALL_RUNNING=false
RETRY_COUNT=0
MAX_RETRIES=30
while [ "$ALL_RUNNING" = false ] && [ "$RETRY_COUNT" -lt "$MAX_RETRIES" ]; do
sleep 5
RETRY_COUNT=$((RETRY_COUNT + 1))
BACKEND_HEALTH=$(docker inspect --format='{{.State.Health.Status}}' myp-backend 2>/dev/null)
FRONTEND_HEALTH=$(docker inspect --format='{{.State.Health.Status}}' myp-rp 2>/dev/null)
if [ "$BACKEND_HEALTH" = "healthy" ] && [ "$FRONTEND_HEALTH" = "healthy" ]; then
ALL_RUNNING=true
fi
done
if [ "$ALL_RUNNING" = true ]; then
echo -e "\e[32mAlle MYP-Container sind bereit und laufen.\e[0m"
else
echo -e "\e[33mZeitüberschreitung beim Warten auf Container. Bitte überprüfen Sie den Status mit 'docker ps'.\e[0m"
fi
fi
# Informationen zur Anwendung anzeigen
echo -e "\n\e[36mMYP-Anwendung ist jetzt verfügbar unter:\e[0m"
echo -e " * http://localhost"
echo -e " * http://192.168.0.5:5000 (Backend API direkt)"
echo -e "\n\e[36mDas Backend ist unter der festen IP 192.168.0.5 erreichbar.\e[0m"
echo -e "\e[36mDie API kann über http://localhost/api/ angesprochen werden.\e[0m"
echo -e "\n\e[36mSSH-Server ist aktiviert und wird beim Systemstart automatisch gestartet.\e[0m"
echo -e "\n\e[33mZum Beenden der Anwendung verwenden Sie: docker-compose down\e[0m"
# Ausführbare Rechte setzen
chmod +x "$0"