diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..b493e30 --- /dev/null +++ b/setup.sh @@ -0,0 +1,203 @@ +#!/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"