#!/bin/bash # Konfiguration SERVER_USER="deploy" SERVER_IP="94.16.110.151" REMOTE_PATH="/home/deploy/michaelschiemer" LOCAL_PATH="." EXCLUDES="--exclude=.git --exclude=node_modules --exclude=vendor --exclude=.env" SSH_OPTS="-i ~/.ssh/production -o StrictHostKeyChecking=no" # Farben für Ausgabe GREEN="\e[32m" YELLOW="\e[33m" RED="\e[31m" RESET="\e[0m" echo -e "${YELLOW}Deployment auf ${SERVER_IP} starten...${RESET}" # 1. Temporäres Verzeichnis erstellen TMP_DIR=$(mktemp -d) echo -e "${YELLOW}Temporäres Verzeichnis erstellt: ${TMP_DIR}${RESET}" # 2. Dateien in temporäres Verzeichnis kopieren (ohne Ausschlüsse) echo -e "${YELLOW}Kopiere Projektdateien...${RESET}" rsync -a $EXCLUDES "$LOCAL_PATH/" "$TMP_DIR/" # 3. Archiv erstellen echo -e "${YELLOW}Erstelle Archiv...${RESET}" TMP_ARCHIVE="/tmp/project-$(date +%Y%m%d-%H%M%S).tar.gz" tar -czf "$TMP_ARCHIVE" -C "$TMP_DIR" . # 4. Verzeichnisse auf dem Server erstellen echo -e "${YELLOW}Erstelle Verzeichnisse auf dem Server...${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "mkdir -p $REMOTE_PATH" # 5. Archiv auf den Server übertragen echo -e "${YELLOW}Übertrage Dateien auf den Server...${RESET}" scp -i ~/.ssh/production "$TMP_ARCHIVE" "$SERVER_USER@$SERVER_IP:/tmp/project.tar.gz" # 6. Archiv auf dem Server entpacken echo -e "${YELLOW}Entpacke Dateien auf dem Server...${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "tar -xzf /tmp/project.tar.gz -C $REMOTE_PATH" # 7. Umgebungsdatei erstellen, falls nicht vorhanden echo -e "${YELLOW}Überprüfe/erstelle .env Datei...${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "[ -f $REMOTE_PATH/.env ] || cp $REMOTE_PATH/.env.example $REMOTE_PATH/.env" # 8. Berechtigungen setzen echo -e "${YELLOW}Setze Berechtigungen...${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "chmod -R 775 $REMOTE_PATH/storage $REMOTE_PATH/cache" # 9. Abhängigkeiten installieren und Build ausführen echo -e "${YELLOW}Installiere Abhängigkeiten und baue Assets...${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "cd $REMOTE_PATH && composer install --no-dev && npm ci && npm run build" # 10. Docker Container neu starten echo -e "${YELLOW}Starte Docker Container neu...${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "cd $REMOTE_PATH && docker compose up -d" # 11. Aufräumen echo -e "${YELLOW}Räume auf...${RESET}" rm -rf "$TMP_DIR" "$TMP_ARCHIVE" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "rm /tmp/project.tar.gz" echo -e "${GREEN}Deployment abgeschlossen!${RESET}" echo -e "${YELLOW}Docker Container Status:${RESET}" ssh $SSH_OPTS "$SERVER_USER@$SERVER_IP" "cd $REMOTE_PATH && docker compose ps" exit 0