#!/usr/bin/env bash set -euo pipefail # Netcup Deployment Script für Kaffeekasse SaaS # Dieses Skript bereitet das Deployment für Netcup Webspace vor SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" BUILD_DIR="$ROOT_DIR/build" STAMP="$(date +%Y%m%d-%H%M%S)" RELEASE_NAME="kaffeekasse-saas-$STAMP" RELEASE_FILE="$BUILD_DIR/$RELEASE_NAME.tar.gz" # Farben für Output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}=== Netcup Deployment Vorbereitung ===${NC}" echo "Release: $RELEASE_NAME" echo "Ziel: $RELEASE_FILE" echo # Prüfe ob .env.netcup existiert if [ ! -f "$ROOT_DIR/.env.netcup" ]; then echo -e "${RED}Fehler: .env.netcup nicht gefunden!${NC}" echo "Bitte erstellen Sie zuerst eine .env.netcup Datei basierend auf .env.example" exit 1 fi # Erstelle Build-Verzeichnis mkdir -p "$BUILD_DIR" echo -e "${YELLOW}1. Erstelle Release-Paket...${NC}" # Erstelle Release mit allen notwendigen Dateien tar \ --exclude=".git" \ --exclude=".env" \ --exclude=".env.example" \ --exclude="build" \ --exclude="storage/cache/*" \ --exclude="storage/logs/*" \ --exclude="storage/uploads/*" \ --exclude="storage/database.sqlite" \ --exclude="storage/test.sqlite" \ --exclude="debug_pdo.php" \ --exclude="*_test.php" \ --exclude="router_test.php" \ --exclude="bootstrap_test.php" \ -czf "$RELEASE_FILE" \ -C "$ROOT_DIR" . echo -e "${GREEN}✓ Release-Paket erstellt: $RELEASE_FILE${NC}" # Erstelle Deployment-Anweisungen INSTRUCTIONS_FILE="$BUILD_DIR/$RELEASE_NAME-deployment-instructions.txt" cat > "$INSTRUCTIONS_FILE" << EOF === Netcup Deployment Anweisungen für $RELEASE_NAME === 1. VORBEREITUNG IN NETCUP WCP/PLESK: - Domain/Subdomain anlegen - Document Root auf /apps/kaffeekasse/current/public setzen - MySQL Datenbank und User anlegen - PHP Version auf 8.3 oder 8.4 setzen 2. UPLOAD: - $RELEASE_NAME.tar.gz per FTPES/SFTP nach /apps/kaffeekasse/ hochladen - Entpacken: tar -xzf $RELEASE_NAME.tar.gz - Umbenennen: mv kaffeekasse-saas-* current 3. KONFIGURATION: - .env.netcup als .env in /apps/kaffeekasse/current/ kopieren - Anpassen der Werte in .env: * APP_URL=https://ihre-domain.tld * APP_KEY=32-stelliger-zufälliger-schlüssel * DB_NAME, DB_USER, DB_PASS entsprechend MySQL-Setup * MAIL_FROM, MAIL_REPLY_TO entsprechend Domain * RFID_SHARED_SECRET=sicherer-zufälliger-wert 4. INSTALLATION: - Browser-Installer: https://ihre-domain.tld/install - ODER manuell: /usr/local/php83/bin/php /apps/kaffeekasse/current/bin/migrate.php 5. CRON-JOBS EINRICHTEN: - Alle 5 Minuten: /usr/local/php83/bin/php /apps/kaffeekasse/current/bin/cron.php - Täglich: /usr/local/php83/bin/php /apps/kaffeekasse/current/bin/healthcheck.php 6. SSL/HTTPS: - Let's Encrypt Zertifikat in WCP aktivieren - HTTPS erzwingen 7. TESTS: - Startseite aufrufen - Admin-Login testen (/admin/login) - Mandant anlegen und testen - Healthcheck ausführen Weitere Details: siehe docs/go-live-checklist-netcup.md EOF echo -e "${GREEN}✓ Deployment-Anweisungen erstellt: $INSTRUCTIONS_FILE${NC}" # Erstelle .htaccess Backup-Info HTACCESS_INFO="$BUILD_DIR/$RELEASE_NAME-htaccess-info.txt" cat > "$HTACCESS_INFO" << EOF === .htaccess Konfiguration für Netcup === Die mitgelieferte public/.htaccess sollte auf Netcup funktionieren. Falls Probleme auftreten, hier die wichtigsten Einstellungen: 1. URL Rewriting: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] 2. Sicherheit: - Zugriff auf .env, .git, etc. blockiert - PHP-Dateien außerhalb public/ nicht erreichbar 3. Bei Problemen: - Prüfen ob mod_rewrite aktiviert ist - AllowOverride All in Apache-Konfiguration - Bei Fehlern: Apache Error Log prüfen Die aktuelle .htaccess ist bereits im Release enthalten. EOF echo -e "${GREEN}✓ .htaccess Info erstellt: $HTACCESS_INFO${NC}" # Zeige Zusammenfassung echo echo -e "${BLUE}=== Deployment bereit ===${NC}" echo -e "Release-Paket: ${GREEN}$RELEASE_FILE${NC}" echo -e "Anweisungen: ${GREEN}$INSTRUCTIONS_FILE${NC}" echo -e "Größe: ${GREEN}$(du -h "$RELEASE_FILE" | cut -f1)${NC}" echo echo -e "${YELLOW}Nächste Schritte:${NC}" echo "1. Release-Paket nach Netcup hochladen" echo "2. .env.netcup anpassen und als .env hochladen" echo "3. Deployment-Anweisungen befolgen" echo "4. Go-Live Checkliste abarbeiten (docs/go-live-checklist-netcup.md)" echo echo -e "${GREEN}Deployment-Vorbereitung abgeschlossen!${NC}"