diff --git a/scripts/deploy-administration.sh b/scripts/deploy-administration.sh new file mode 100755 index 0000000..112f438 --- /dev/null +++ b/scripts/deploy-administration.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Pfad zur .env.all Datei +ENV_FILE="../env/.env.all" + +# Funktion zum Überprüfen der Existenz einer Datei +check_file_exists() { + if [ ! -f "$1" ]; then + echo "Fehler: Die Datei $1 existiert nicht." + return 1 + fi +} + +# Überprüfe die Existenz von .env.all +check_file_exists "../env/.env.all" + +# Funktion zum Auslesen von Variablen aus der .env.all Datei +get_env_var() { + grep "^$1=" "$ENV_FILE" | cut -d '=' -f2 +} + +# Auslesen der INFRASTRUCTURE und ENVIRONMENT Variablen +INFRASTRUCTURE=$(get_env_var "INFRASTRUCTURE_LABEL") +ENVIRONMENT=$(get_env_var "ENVIRONMENT") + +# Load environment variables from the .env files +set -o allexport +source ../env/.env.all +source ../env/${ENVIRONMENT}/.env.administration +set +o allexport + +# Liste Stacks +STACKS=("administration") + +# Liste aller Environments +ENVIRONMENTS=("development" "staging" "production") + + +# Überprüfe die Existenz aller Stack-spezifischen .env Dateien +missing_files=0 +for stack in "${STACKS[@]}"; do + env_file="../env/${ENVIRONMENT}/.env.${stack}" + if ! check_file_exists "$env_file"; then + missing_files=$((missing_files + 1)) + fi +done + +if [ $missing_files -eq 0 ]; then + echo "Alle erforderlichen .env Dateien für das ${ENVIRONMENT}-Environment sind vorhanden." +else + echo "Warnung: $missing_files .env Datei(en) fehlen. Einige Stacks könnten nicht korrekt funktionieren." +fi + +# Überprüfe die Existenz aller Stack-spezifischen .env Dateien für alle Environments +for env in "${ENVIRONMENTS[@]}"; do + if [ "$env" != "$ENVIRONMENT" ]; then + for stack in "${STACKS[@]}"; do + env_file="../env/${env}/.env.${stack}" + if ! check_file_exists "$env_file"; then + echo "Warnung: Die Datei $env_file fehlt für das Environment $env." + fi + done + fi +done + + +# Ausgabe der Variablen +echo " " +echo "Deploying to:" +echo "INFRASTRUCTURE: ${INFRASTRUCTURE:-Not set}" +echo "ENVIRONMENT: ${ENVIRONMENT:-Not set}" +echo "-----------------------------------" + +# Ausführen des Docker Compose Befehls +docker compose -f ../apps/docker-compose.all.yml --env-file ../env/.env.all --env-file ../env/${ENVIRONMENT}/.env.proxy --profile administration up --remove-orphans diff --git a/scripts/deploy-all.sh b/scripts/deploy-all.sh new file mode 100755 index 0000000..16c1505 --- /dev/null +++ b/scripts/deploy-all.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +# Pfad zur .env.all Datei +ENV_FILE="../env/.env.all" +# Funktion zum Auslesen von Variablen aus der .env.all Datei +get_env_var() { + grep "^$1=" "$ENV_FILE" | cut -d '=' -f2 +} + +# Auslesen der INFRASTRUCTURE und ENVIRONMENT Variablen +INFRASTRUCTURE=$(get_env_var "INFRASTRUCTURE_LABEL") +ENVIRONMENT=$(get_env_var "ENVIRONMENT") +SERVER_IP=$(curl -s https://api.ipify.org) + +# Liste aller Stacks +STACKS=("administration" "frontend" "develop" "database" "proxy" "tools" "website" "backend") + +# Liste aller Environments +ENVIRONMENTS=("development" "staging" "production") + +# Funktion zum Überprüfen der Existenz einer Datei +check_file_exists() { + if [ ! -f "$1" ]; then + echo "Fehler: Die Datei $1 existiert nicht." + return 1 + fi +} +#!/bin/bash + +# Prüfe, ob das Skript nur in der Entwicklungsumgebung ausgeführt wird +if [ "$ENVIRONMENT" == "development" ]; then + # Sicherstellen, dass acme_letsencrypt.json existiert und korrekte Berechtigungen hat + ACME_FILE="../apps/proxy/traefik/acme_letsencrypt.json" + + if [ ! -f "$ACME_FILE" ]; then + echo "🔹 Erstelle $ACME_FILE..." + touch "$ACME_FILE" + fi + + echo "🔹 Setze Berechtigungen für $ACME_FILE auf 600..." + chmod 600 "$ACME_FILE" + + echo "🔹 ENVIRONMENT ist 'development' – Hosts aus .env.proxy werden hinzugefügt und Container gestartet." + + # Pfad zur Proxy-Env-Datei + ENV_PROXY_FILE="../env/development/.env.proxy" + + # Hosts-Datei Pfad (Linux/macOS) + HOSTS_FILE="/etc/hosts" + + # Prüfe, ob die Env-Datei existiert + if [ ! -f "$ENV_PROXY_FILE" ]; then + echo "❌ Fehler: Die Datei $ENV_PROXY_FILE existiert nicht!" + exit 1 + fi + + # Lese alle Zeilen, die auf *_DOMAIN= enden und extrahiere die Werte + DOMAINS=($(grep -E '^[A-Z_]+_DOMAIN=' "$ENV_PROXY_FILE" | cut -d '=' -f2)) + + # Füge jede Domain zur /etc/hosts Datei hinzu, falls sie fehlt + for DOMAIN in "${DOMAINS[@]}"; do + if ! grep -q "$DOMAIN" "$HOSTS_FILE"; then + echo "127.0.0.1 $DOMAIN" | sudo tee -a "$HOSTS_FILE" > /dev/null + echo "✅ $DOMAIN zu /etc/hosts hinzugefügt" + else + echo "✅ $DOMAIN ist bereits in /etc/hosts vorhanden" + fi + done + +else + echo "❌ ENVIRONMENT ist nicht 'development' – Routing über externen DNS erwartet" +fi + +# Überprüfe die Existenz von .env.all +check_file_exists "../env/.env.all" + +# Überprüfe die Existenz aller Stack-spezifischen .env Dateien +missing_files=0 +for stack in "${STACKS[@]}"; do + env_file="../env/${ENVIRONMENT}/.env.${stack}" + if ! check_file_exists "$env_file"; then + missing_files=$((missing_files + 1)) + fi +done + +if [ $missing_files -eq 0 ]; then + echo "Alle erforderlichen .env Dateien sind vorhanden." +else + echo "WARNUNG: $missing_files .env Datei(en) fehlen. Einige Stacks könnten nicht korrekt funktionieren." +fi + +# Ausgabe der Variablen +echo "Deploying to:" +echo "INFRASTRUCTURE: ${INFRASTRUCTURE:-Not set}" +echo "ENVIRONMENT: ${ENVIRONMENT:-Not set}" +echo "-----------------------------------" + +# Check for the --build argument +BUILD_OPTION="" +if [[ "$1" == "--build" ]]; then + BUILD_OPTION="--build" +fi + +# Ausführen des Docker Compose Befehls +docker compose -f ../apps/docker-compose.all.yml -p ${INFRASTRUCTURE:-my} --env-file ../env/.env.all --env-file ../env/${ENVIRONMENT}/.env.proxy --profile backend up --remove-orphans $BUILD_OPTION diff --git a/scripts/deploy-app.sh b/scripts/deploy-app.sh index 78a95b2..f57bd09 100755 --- a/scripts/deploy-app.sh +++ b/scripts/deploy-app.sh @@ -1,22 +1,59 @@ #!/bin/bash -set -e -echo "Prüfe, ob Traefik läuft..." +# Pfad zur .env.all Datei +ENV_FILE="../env/.env.all" +# Funktion zum Auslesen von Variablen aus der .env.all Datei +get_env_var() { + grep "^$1=" "$ENV_FILE" | cut -d '=' -f2 +} -if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then - echo "Traefik läuft nicht." - read -p "Möchtest du die lokale Version zum Debuggen (docker-compose.overwrite.yml) starten? (y/n): " answer - if [[ "$answer" =~ ^[Yy]$ ]]; then - echo "Starte lokale Version..." - docker compose -f ../apps/docker-compose.overwrite.yml up -d - else - echo "Deployment abgebrochen." - exit 1 +# Auslesen der INFRASTRUCTURE und ENVIRONMENT Variablen +INFRASTRUCTURE=$(get_env_var "INFRASTRUCTURE_LABEL") +ENVIRONMENT=$(get_env_var "ENVIRONMENT") +SERVER_IP=$(curl -s https://api.ipify.org) + +# Liste aller Stacks +STACKS=("administration" "frontend" "develop" "database" "proxy" "tools" "website" "backend") + +# Liste aller Environments +ENVIRONMENTS=("development" "staging" "production") + +# Funktion zum Überprüfen der Existenz einer Datei +check_file_exists() { + if [ ! -f "$1" ]; then + echo "Fehler: Die Datei $1 existiert nicht." + return 1 fi +} +# Überprüfe die Existenz von .env.all +check_file_exists "../env/.env.all" + +# Überprüfe die Existenz aller Stack-spezifischen .env Dateien +missing_files=0 +for stack in "${STACKS[@]}"; do + env_file="../env/${ENVIRONMENT}/.env.${stack}" + if ! check_file_exists "$env_file"; then + missing_files=$((missing_files + 1)) + fi +done + +if [ $missing_files -eq 0 ]; then + echo "Alle erforderlichen .env Dateien sind vorhanden." else - echo "Traefik läuft." - echo "Starte Deployment mit docker-compose.prod.yml..." - docker compose -f ../apps/docker-compose.prod.yml up -d + echo "WARNUNG: $missing_files .env Datei(en) fehlen. Einige Stacks könnten nicht korrekt funktionieren." fi -echo "Deployment abgeschlossen." +# Ausgabe der Variablen +echo "Deploying to:" +echo "INFRASTRUCTURE: ${INFRASTRUCTURE:-Not set}" +echo "ENVIRONMENT: ${ENVIRONMENT:-Not set}" +echo "-----------------------------------" + +# Check for the --build argument +BUILD_OPTION="" +if [[ "$1" == "--build" ]]; then + BUILD_OPTION="--build" +fi + +# Ausführen des Docker Compose Befehls +docker compose -f ../apps/docker-compose.all.yml -p ${INFRASTRUCTURE:-my} --env-file ../env/.env.all --env-file ../env/${ENVIRONMENT}/.env.proxy --profile app up --remove-orphans $BUILD_OPTION diff --git a/scripts/deploy-overwrite.sh b/scripts/deploy-overwrite.sh new file mode 100755 index 0000000..78a95b2 --- /dev/null +++ b/scripts/deploy-overwrite.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -e + +echo "Prüfe, ob Traefik läuft..." + +if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then + echo "Traefik läuft nicht." + read -p "Möchtest du die lokale Version zum Debuggen (docker-compose.overwrite.yml) starten? (y/n): " answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + echo "Starte lokale Version..." + docker compose -f ../apps/docker-compose.overwrite.yml up -d + else + echo "Deployment abgebrochen." + exit 1 + fi +else + echo "Traefik läuft." + echo "Starte Deployment mit docker-compose.prod.yml..." + docker compose -f ../apps/docker-compose.prod.yml up -d +fi + +echo "Deployment abgeschlossen." diff --git a/scripts/deploy-proxy.sh b/scripts/deploy-proxy.sh new file mode 100755 index 0000000..8560a47 --- /dev/null +++ b/scripts/deploy-proxy.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Pfad zur .env.all Datei +ENV_FILE="../env/.env.all" + +# Funktion zum Auslesen von Variablen aus der .env.all Datei +get_env_var() { + grep "^$1=" "$ENV_FILE" | cut -d '=' -f2 +} + +# Auslesen der INFRASTRUCTURE und ENVIRONMENT Variablen +INFRASTRUCTURE=$(get_env_var "INFRASTRUCTURE_LABEL") +ENVIRONMENT=$(get_env_var "ENVIRONMENT") + +# Liste aller Stacks +STACKS=("proxy") + +# Liste aller Environments +ENVIRONMENTS=("development" "staging" "production") + +# Funktion zum Überprüfen der Existenz einer Datei +check_file_exists() { + if [ ! -f "$1" ]; then + echo "Fehler: Die Datei $1 existiert nicht." + return 1 + fi +} + +# Überprüfe die Existenz von .env.all +check_file_exists "../env/.env.all" + +# Überprüfe die Existenz aller Stack-spezifischen .env Dateien +missing_files=0 +for stack in "${STACKS[@]}"; do + env_file="../env/${ENVIRONMENT}/.env.${stack}" + if ! check_file_exists "$env_file"; then + missing_files=$((missing_files + 1)) + fi +done + +if [ $missing_files -eq 0 ]; then + echo "Alle erforderlichen .env Dateien sind vorhanden." +else + echo "WARNUNG: $missing_files .env Datei(en) fehlen. Einige Stacks könnten nicht korrekt funktionieren." +fi + +# Ausgabe der Variablen +echo "Deploying to:" +echo "INFRASTRUCTURE: ${INFRASTRUCTURE:-Not set}" +echo "ENVIRONMENT: ${ENVIRONMENT:-Not set}" +echo "-----------------------------------" + +# Ausführen des Docker Compose Befehls +docker compose -f ../apps/docker-compose.all.yml --env-file ../env/.env.all --env-file ../env/${ENVIRONMENT}/.env.proxy --profile proxy up --remove-orphans diff --git a/scripts/deploy-traefik.sh b/scripts/deploy-traefik.sh index 78a95b2..d0061ef 100755 --- a/scripts/deploy-traefik.sh +++ b/scripts/deploy-traefik.sh @@ -1,22 +1,160 @@ #!/bin/bash set -e +# Funktion zur Überprüfung der Produktivumgebung +is_production() { + local prod_ip="85.215.56.185" # IP-Adresse deines Produktivservers + local current_ip + + # Überprüfe das Betriebssystem + case "$OSTYPE" in + msys*|cygwin*|mingw*) + # Windows + current_ip=$(ipconfig | grep -i "IPv4 Address" | head -n 1 | awk '{print $NF}') + ;; + darwin*) + # macOS + current_ip=$(ipconfig getifaddr en0) # Für Wi-Fi + if [ -z "$current_ip" ]; then + current_ip=$(ipconfig getifaddr en1) # Für Ethernet + fi + ;; + linux*|bsd*|solaris*) + # Linux und andere Unix-ähnliche Systeme + current_ip=$(hostname -I | awk '{print $1}') + ;; + *) + echo "Unbekanntes Betriebssystem: $OSTYPE" + return 1 + ;; + esac + + echo "Erkannte IP-Adresse: $current_ip" + + if [ "$current_ip" == "$prod_ip" ]; then + echo "Produktivumgebung erkannt." + return 0 # True, wir sind in der Produktivumgebung + else + echo "Lokale Entwicklungsumgebung erkannt." + return 1 # False, wir sind in der lokalen Umgebung + fi +} + +# Funktion zum Setzen der Umgebungsvariablen +set_environment_variables() { + if is_production; then + export DOMAIN_SUFFIX=".mindboost.team" + export TRAEFIK_DASHBOARD_DOMAIN="traefik${DOMAIN_SUFFIX}" + export PORTAINER_DOMAIN="portainer${DOMAIN_SUFFIX}" + export FRONTEND_DOMAIN="app${DOMAIN_SUFFIX}" + export BACKEND_DOMAIN="b${DOMAIN_SUFFIX}" + else + export DOMAIN_SUFFIX=".local" + export TRAEFIK_DASHBOARD_DOMAIN="traefik${DOMAIN_SUFFIX}" + export PORTAINER_DOMAIN="portainer${DOMAIN_SUFFIX}" + export FRONTEND_DOMAIN="frontend${DOMAIN_SUFFIX}" + export BACKEND_DOMAIN="backend${DOMAIN_SUFFIX}" + fi +} + + echo "Prüfe, ob Traefik läuft..." +set_environment_variables + +if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then + echo "Traefik läuft nicht. Starte Traefik mit CrowdSec Bouncer..." + + if is_production; then + echo "Wir befinden uns in der Produktivumgebung." + echo "Starte Traefik und CrowdSec Bouncer mit docker-compose.traefik.prod.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/proxy/docker-compose.traefik.prod.yml up -d + else + echo "Wir befinden uns in der lokalen Entwicklungsumgebung." + echo "Starte Traefik und CrowdSec Bouncer mit docker-compose.traefik.local.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.traefik.local.yml up -d + fi +else + echo "Traefik läuft bereits. Aktualisiere die Konfiguration..." + + if is_production; then + echo "Aktualisiere Traefik und CrowdSec Bouncer in der Produktivumgebung..." + docker compose -f ../apps/docker-compose.traefik.prod.yml up -d + else + echo "Aktualisiere Traefik und CrowdSec Bouncer in der lokalen Umgebung..." + docker compose -f ../apps/docker-compose.traefik.local.yml up -d + fi +fi + +echo "Traefik und CrowdSec Bouncer Deployment abgeschlossen." + +================= + + +echo "Prüfe, ob Traefik läuft..." + +set_environment_variables + +if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then + echo "Traefik läuft nicht. Starte Traefik und Portainer..." +else + echo "Traefik läuft bereits. Aktualisiere die Konfiguration..." +fi + + +if is_production; then + echo "Wir befinden uns in der Produktivumgebung." + echo "Starte/Aktualisiere Deployment mit docker-compose.prod.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.prod.yml up -d +else + echo "Wir befinden uns in der lokalen Entwicklungsumgebung." + echo "Starte/Aktualisiere lokale Version mit docker-compose.overwrite.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.overwrite.yml up -d +fi + + if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then echo "Traefik läuft nicht." - read -p "Möchtest du die lokale Version zum Debuggen (docker-compose.overwrite.yml) starten? (y/n): " answer - if [[ "$answer" =~ ^[Yy]$ ]]; then - echo "Starte lokale Version..." - docker compose -f ../apps/docker-compose.overwrite.yml up -d + + if is_production; then + echo "Wir befinden uns in der Produktivumgebung." + set_environment_variables + echo "Starte Deployment mit docker-compose.prod.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.prod.yml up -d else - echo "Deployment abgebrochen." - exit 1 + echo "Wir befinden uns in der lokalen Entwicklungsumgebung." + read -p "Möchtest du die lokale Version zum Debuggen (docker-compose.overwrite.yml) starten? (y/n): " answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + echo "Starte lokale Version..." + set_environment_variables + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.overwrite.yml up -d + else + echo "Deployment abgebrochen." + exit 1 + fi fi else - echo "Traefik läuft." - echo "Starte Deployment mit docker-compose.prod.yml..." - docker compose -f ../apps/docker-compose.prod.yml up -d + echo "Traefik läuft bereits." + + if is_production; then + echo "Wir befinden uns in der Produktivumgebung." + set_environment_variables + echo "Aktualisiere Deployment mit docker-compose.prod.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.prod.yml up -d + else + echo "Wir befinden uns in der lokalen Entwicklungsumgebung." + set_environment_variables + echo "Aktualisiere lokale Version mit docker-compose.overwrite.yml..." + env | grep DOMAIN # Debug: Zeige die gesetzten Umgebungsvariablen an + docker compose -f ../apps/docker-compose.overwrite.yml up -d + fi fi -echo "Deployment abgeschlossen." +echo "Deployment abgeschlossen." \ No newline at end of file