184 lines
4.5 KiB
Bash
Executable File
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"
|