# YourPart Daemon Deployment Script für Ubuntu 22 # Verwendung: ./deploy.sh [server_ip] [ssh_user] set -euo pipefail # 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 # Konfiguration SERVER_IP="${1:-your-part.de}" SSH_USER="${2:-root}" DAEMON_USER="yourpart" PROJECT_NAME="yourpart-daemon" REMOTE_DIR="/opt/yourpart" SERVICE_NAME="yourpart-daemon" # Funktionen log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Prüfe ob wir im richtigen Verzeichnis sind if [ ! -f "CMakeLists.txt" ] || [ ! -f "daemon.conf" ]; then log_error "Bitte führen Sie dieses Script aus dem Projektverzeichnis aus!" exit 1 fi log_info "Starte Deployment für YourPart Daemon..." log_info "Server: $SERVER_IP" log_info "SSH User: $SSH_USER" # 1. Lokales Build log_info "Baue Projekt lokal..." if [ ! -d "build" ]; then mkdir build fi cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) cd .. log_success "Lokaler Build abgeschlossen" # 2. Erstelle Deployment-Paket log_info "Erstelle Deployment-Paket..." DEPLOY_DIR="deploy_package" rm -rf "$DEPLOY_DIR" mkdir -p "$DEPLOY_DIR" # Kopiere Binärdatei cp build/yourpart-daemon "$DEPLOY_DIR/" # Kopiere Konfigurationsdatei cp daemon.conf "$DEPLOY_DIR/" # Kopiere Service-Datei cp yourpart-daemon.service "$DEPLOY_DIR/" # Erstelle Installations-Script cat > "$DEPLOY_DIR/install.sh" << 'EOF' #!/bin/bash set -euo pipefail # Farben RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } DAEMON_USER="yourpart" REMOTE_DIR="/opt/yourpart" SERVICE_NAME="yourpart-daemon" log_info "Installiere YourPart Daemon..." # Erstelle Benutzer falls nicht vorhanden if ! id "$DAEMON_USER" &>/dev/null; then log_info "Erstelle Benutzer $DAEMON_USER..." useradd --system --shell /bin/false --home-dir "$REMOTE_DIR" --create-home "$DAEMON_USER" log_success "Benutzer $DAEMON_USER erstellt" else log_info "Benutzer $DAEMON_USER existiert bereits" fi # Erstelle Verzeichnisse log_info "Erstelle Verzeichnisse..." mkdir -p "$REMOTE_DIR"/{logs,config} mkdir -p /etc/yourpart mkdir -p /var/log/yourpart # Kopiere Dateien log_info "Kopiere Dateien..." cp yourpart-daemon /usr/local/bin/ cp daemon.conf /etc/yourpart/ cp yourpart-daemon.service /etc/systemd/system/ # Setze Berechtigungen chmod +x /usr/local/bin/yourpart-daemon chown -R "$DAEMON_USER:$DAEMON_USER" "$REMOTE_DIR" chown -R "$DAEMON_USER:$DAEMON_USER" /var/log/yourpart chmod 600 /etc/yourpart/daemon.conf # Lade systemd neu log_info "Lade systemd Konfiguration neu..." systemctl daemon-reload # Aktiviere Service log_info "Aktiviere Service..." systemctl enable "$SERVICE_NAME" log_success "Installation abgeschlossen!" log_info "Verwenden Sie 'systemctl start $SERVICE_NAME' um den Service zu starten" log_info "Verwenden Sie 'systemctl status $SERVICE_NAME' um den Status zu prüfen" log_info "Verwenden Sie 'journalctl -u $SERVICE_NAME -f' um die Logs zu verfolgen" EOF chmod +x "$DEPLOY_DIR/install.sh" # Erstelle Tarball tar -czf "${PROJECT_NAME}_deploy.tar.gz" -C "$DEPLOY_DIR" . log_success "Deployment-Paket erstellt: ${PROJECT_NAME}_deploy.tar.gz" # 3. Upload zum Server log_info "Lade Dateien zum Server hoch..." scp "${PROJECT_NAME}_deploy.tar.gz" "$SSH_USER@$SERVER_IP:/tmp/" # 4. Installation auf dem Server log_info "Installiere auf dem Server..." ssh "$SSH_USER@$SERVER_IP" << EOF set -euo pipefail # Entpacke Deployment-Paket cd /tmp tar -xzf "${PROJECT_NAME}_deploy.tar.gz" # Führe Installation aus ./install.sh # Starte Service systemctl start $SERVICE_NAME # Prüfe Status systemctl status $SERVICE_NAME --no-pager # Aufräumen rm -f "${PROJECT_NAME}_deploy.tar.gz" rm -rf /tmp/yourpart-daemon /tmp/daemon.conf /tmp/yourpart-daemon.service /tmp/install.sh echo "Deployment erfolgreich abgeschlossen!" EOF # 5. Aufräumen log_info "Räume lokale Dateien auf..." rm -rf "$DEPLOY_DIR" rm -f "${PROJECT_NAME}_deploy.tar.gz" log_success "Deployment erfolgreich abgeschlossen!" log_info "Der YourPart Daemon läuft jetzt auf $SERVER_IP" log_info "Verwenden Sie 'ssh $SSH_USER@$SERVER_IP systemctl status $SERVICE_NAME' um den Status zu prüfen"