#!/bin/bash # setup.sh — Aziros Server Setup # Verwendung: ./setup.sh [development|staging|production] # Auf einem frischen Debian 12 Server als root ausführen set -e # Abbrechen bei Fehler MODE=${1:-production} REPO="https://git.nexlab.at/boban/aziros.git" USER="nexxo" echo "" echo "╔══════════════════════════════════════╗" echo "║ Aziros Server Setup v1.0 ║" echo "║ Mode: $MODE ║" echo "╚══════════════════════════════════════╝" echo "" # ═══════════════════════════════════════ # ROOT CHECK # ═══════════════════════════════════════ if [ "$EUID" -ne 0 ]; then echo "❌ Bitte als root ausführen" exit 1 fi # ═══════════════════════════════════════ # SCHRITT 1 — System Update # ═══════════════════════════════════════ echo "→ System wird aktualisiert..." apt update && apt upgrade -y apt install -y curl git nano ufw \ ca-certificates gnupg2 \ apt-transport-https \ net-tools openssh-server # ═══════════════════════════════════════ # SCHRITT 2 — User anlegen # ═══════════════════════════════════════ if id "$USER" &>/dev/null; then echo "→ User $USER existiert bereits" else echo "" echo "→ User '$USER' wird erstellt..." adduser --gecos "" $USER usermod -aG sudo $USER echo "✅ User $USER erstellt" fi # ═══════════════════════════════════════ # SCHRITT 3 — Docker installieren # ═══════════════════════════════════════ echo "→ Docker wird installiert..." curl -fsSL https://get.docker.com | sh usermod -aG docker $USER echo "✅ Docker installiert" # ═══════════════════════════════════════ # SCHRITT 4 — UFW Firewall # ═══════════════════════════════════════ echo "→ Firewall wird konfiguriert..." ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw allow 8080/tcp ufw --force enable echo "✅ Firewall konfiguriert" # ═══════════════════════════════════════ # SCHRITT 5 — Git Credentials # ═══════════════════════════════════════ echo "→ Git wird konfiguriert..." sudo -u $USER git config \ --global credential.helper store sudo -u $USER git config \ --global user.name "Aziros Deploy" sudo -u $USER git config \ --global user.email "deploy@aziros.com" # ═══════════════════════════════════════ # SCHRITT 6 — Repo clonen # ═══════════════════════════════════════ echo "→ Repository wird geklont..." if [ -d "/home/$USER/aziros" ]; then echo "→ Repo existiert bereits — pull" sudo -u $USER git -C \ /home/$USER/aziros pull origin main else sudo -u $USER git clone \ $REPO /home/$USER/aziros fi echo "✅ Repository bereit" # ═══════════════════════════════════════ # SCHRITT 7 — .env kopieren # ═══════════════════════════════════════ echo "" echo "→ .env Setup für Mode: $MODE" ENV_FILE="/home/$USER/aziros/src/.env" if [ "$MODE" = "development" ]; then SRC_ENV=".env.development" elif [ "$MODE" = "staging" ]; then SRC_ENV=".env.staging" else SRC_ENV=".env.production" fi if [ ! -f "$ENV_FILE" ]; then echo "" echo "╔══════════════════════════════════════╗" echo "║ .env fehlt — bitte jetzt kopieren ║" echo "╚══════════════════════════════════════╝" echo "" echo "Führe auf dem lokalen Server aus:" echo "" echo " scp ~/aziros/src/$SRC_ENV \\" echo " $USER@$(hostname -I | awk '{print $1}'):~/aziros/src/.env" echo "" read -p "Drücke ENTER wenn .env kopiert wurde..." if [ ! -f "$ENV_FILE" ]; then echo "❌ .env fehlt noch — Abbruch" exit 1 fi fi echo "✅ .env vorhanden" # ═══════════════════════════════════════ # SCHRITT 8 — Docker Compose starten # ═══════════════════════════════════════ echo "→ Docker Stack wird gestartet..." cd /home/$USER/aziros COMPOSE_FILE="docker-compose.yml" if [ "$MODE" = "development" ]; then COMPOSE_FILE="docker-compose.development.yml" elif [ "$MODE" = "staging" ]; then COMPOSE_FILE="docker-compose.staging.yml" fi sudo -u $USER docker compose \ -f $COMPOSE_FILE up -d --build echo "→ Warte bis DB bereit ist..." sleep 15 # ═══════════════════════════════════════ # SCHRITT 9 — Laravel Setup # ═══════════════════════════════════════ echo "→ Laravel wird konfiguriert..." sudo -u $USER docker compose \ -f $COMPOSE_FILE exec -T app \ php artisan migrate --force sudo -u $USER docker compose \ -f $COMPOSE_FILE exec -T app \ php artisan config:cache sudo -u $USER docker compose \ -f $COMPOSE_FILE exec -T app \ php artisan view:cache sudo -u $USER docker compose \ -f $COMPOSE_FILE exec -T app \ php artisan route:cache sudo -u $USER docker compose \ -f $COMPOSE_FILE exec -T app \ php artisan storage:link echo "✅ Laravel konfiguriert" # ═══════════════════════════════════════ # SCHRITT 10 — Status # ═══════════════════════════════════════ echo "" echo "╔══════════════════════════════════════╗" echo "║ Setup abgeschlossen ✅ ║" echo "╚══════════════════════════════════════╝" echo "" echo "Mode: $MODE" echo "Compose: $COMPOSE_FILE" echo "" echo "Docker Status:" sudo -u $USER docker compose \ -f $COMPOSE_FILE ps echo "" if [ "$MODE" = "staging" ]; then echo "URL: https://app.staging.aziros.com" elif [ "$MODE" = "development" ]; then echo "URL: http://app.aziros.local" else echo "URL: https://app.aziros.com" fi echo "" echo "Neu einloggen damit Docker-Gruppe aktiv:" echo " su - $USER"