#!/bin/bash set -e MODE=${1:-production} echo "" echo "╔══════════════════════════════════════╗" echo "║ Aziros Server Setup ║" 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 echo "✅ System aktualisiert" # ═══════════════════════════════════════ # SCHRITT 2 — User anlegen # ═══════════════════════════════════════ USER="nexxo" if id "$USER" &>/dev/null; then echo "→ User $USER existiert bereits" else echo "→ User '$USER' wird erstellt..." adduser --gecos "" $USER usermod -aG sudo $USER echo "✅ User $USER erstellt" fi # ═══════════════════════════════════════ # SCHRITT 3 — Docker installieren # ═══════════════════════════════════════ if command -v docker &>/dev/null; then echo "→ Docker bereits installiert" else echo "→ Docker wird installiert..." curl -fsSL https://get.docker.com | sh echo "✅ Docker installiert" fi usermod -aG docker $USER # ═══════════════════════════════════════ # SCHRITT 4 — 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 konfigurieren # ═══════════════════════════════════════ 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..." REPO="https://git.nexlab.at/boban/aziros.git" if [ -d "/home/$USER/aziros" ]; then echo "→ Repo existiert — 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 # ═══════════════════════════════════════ 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 \\" SERVER_IP=$(hostname -I | awk '{print $1}') echo " $USER@$SERVER_IP:~/aziros/src/.env" echo "" read -p "Drücke ENTER wenn .env kopiert wurde..." if [ ! -f "$ENV_FILE" ]; then echo "❌ .env fehlt — Abbruch" exit 1 fi fi echo "✅ .env vorhanden" # ═══════════════════════════════════════ # SCHRITT 8 — Compose File wählen # ═══════════════════════════════════════ if [ "$MODE" = "development" ]; then COMPOSE="docker-compose.development.yml" elif [ "$MODE" = "staging" ]; then COMPOSE="docker-compose.staging.yml" else COMPOSE="docker-compose.yml" fi # ═══════════════════════════════════════ # SCHRITT 9 — Docker Stack starten # ═══════════════════════════════════════ echo "→ Docker Stack wird gestartet..." cd /home/$USER/aziros sudo -u $USER docker compose \ -f $COMPOSE up -d --build echo "→ Warte bis DB bereit ist..." sleep 20 # ═══════════════════════════════════════ # SCHRITT 10 — DB User anlegen # ═══════════════════════════════════════ echo "→ DB wird konfiguriert..." DB_NAME=$(grep "^DB_DATABASE=" $ENV_FILE \ | cut -d= -f2) DB_USER=$(grep "^DB_USERNAME=" $ENV_FILE \ | cut -d= -f2) DB_PASS=$(grep "^DB_PASSWORD=" $ENV_FILE \ | cut -d= -f2) DB_ROOT=$(grep "^DB_ROOT_PASSWORD=" $ENV_FILE \ | cut -d= -f2) sudo -u $USER docker compose \ -f $COMPOSE exec -T db \ mariadb -u root -p"$DB_ROOT" \ -e " CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`; CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS'; GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'%'; FLUSH PRIVILEGES; " echo "✅ DB konfiguriert" # ═══════════════════════════════════════ # SCHRITT 11 — Laravel Setup # ═══════════════════════════════════════ echo "→ Composer install..." sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ composer install --no-dev \ --optimize-autoloader echo "→ Storage Verzeichnisse..." sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ mkdir -p storage/framework/cache \ storage/framework/sessions \ storage/framework/views \ storage/logs \ bootstrap/cache sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ chmod -R 775 storage bootstrap/cache echo "→ Migrationen..." sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ php artisan migrate --force echo "→ Storage Link..." sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ php artisan storage:link echo "→ Cache aufbauen..." sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ php artisan config:cache sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ php artisan route:cache sudo -u $USER docker compose \ -f $COMPOSE exec -T app \ php artisan view:cache echo "✅ Laravel konfiguriert" # ═══════════════════════════════════════ # SCHRITT 12 — Status # ═══════════════════════════════════════ echo "" echo "╔══════════════════════════════════════╗" echo "║ Setup abgeschlossen ✅ ║" echo "╚══════════════════════════════════════╝" echo "" sudo -u $USER docker compose \ -f $COMPOSE 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 aktiv:" echo " su - $USER" echo ""