Files
yourpart3/deploy.sh

184 lines
4.5 KiB
Bash
Executable File

# 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 -DCMAKE_CXX_STANDARD=20
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"