Improve: setup.sh + deploy.sh complete

main
boban 2026-04-18 22:58:04 +02:00
parent fcc3bf2529
commit ef3b43ccbd
1 changed files with 104 additions and 59 deletions

161
setup.sh
View File

@ -1,17 +1,11 @@
#!/bin/bash #!/bin/bash
# setup.sh — Aziros Server Setup set -e
# Verwendung: ./setup.sh [development|staging|production]
# Auf einem frischen Debian 12 Server als root ausführen
set -e # Abbrechen bei Fehler
MODE=${1:-production} MODE=${1:-production}
REPO="https://git.nexlab.at/boban/aziros.git"
USER="nexxo"
echo "" echo ""
echo "╔══════════════════════════════════════╗" echo "╔══════════════════════════════════════╗"
echo "║ Aziros Server Setup v1.0 ║" echo "║ Aziros Server Setup ║"
echo "║ Mode: $MODE" echo "║ Mode: $MODE"
echo "╚══════════════════════════════════════╝" echo "╚══════════════════════════════════════╝"
echo "" echo ""
@ -31,16 +25,17 @@ echo "→ System wird aktualisiert..."
apt update && apt upgrade -y apt update && apt upgrade -y
apt install -y curl git nano ufw \ apt install -y curl git nano ufw \
ca-certificates gnupg2 \ ca-certificates gnupg2 \
apt-transport-https \ apt-transport-https net-tools \
net-tools openssh-server openssh-server
echo "✅ System aktualisiert"
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 2 — User anlegen # SCHRITT 2 — User anlegen
# ═══════════════════════════════════════ # ═══════════════════════════════════════
USER="nexxo"
if id "$USER" &>/dev/null; then if id "$USER" &>/dev/null; then
echo "→ User $USER existiert bereits" echo "→ User $USER existiert bereits"
else else
echo ""
echo "→ User '$USER' wird erstellt..." echo "→ User '$USER' wird erstellt..."
adduser --gecos "" $USER adduser --gecos "" $USER
usermod -aG sudo $USER usermod -aG sudo $USER
@ -50,13 +45,17 @@ fi
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 3 — Docker installieren # SCHRITT 3 — Docker installieren
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo "→ Docker wird installiert..." if command -v docker &>/dev/null; then
curl -fsSL https://get.docker.com | sh echo "→ Docker bereits installiert"
else
echo "→ Docker wird installiert..."
curl -fsSL https://get.docker.com | sh
echo "✅ Docker installiert"
fi
usermod -aG docker $USER usermod -aG docker $USER
echo "✅ Docker installiert"
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 4 — UFW Firewall # SCHRITT 4 — Firewall
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo "→ Firewall wird konfiguriert..." echo "→ Firewall wird konfiguriert..."
ufw allow OpenSSH ufw allow OpenSSH
@ -67,7 +66,7 @@ ufw --force enable
echo "✅ Firewall konfiguriert" echo "✅ Firewall konfiguriert"
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 5 — Git Credentials # SCHRITT 5 — Git konfigurieren
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo "→ Git wird konfiguriert..." echo "→ Git wird konfiguriert..."
sudo -u $USER git config \ sudo -u $USER git config \
@ -81,8 +80,10 @@ sudo -u $USER git config \
# SCHRITT 6 — Repo clonen # SCHRITT 6 — Repo clonen
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo "→ Repository wird geklont..." echo "→ Repository wird geklont..."
REPO="https://git.nexlab.at/boban/aziros.git"
if [ -d "/home/$USER/aziros" ]; then if [ -d "/home/$USER/aziros" ]; then
echo "→ Repo existiert bereits — pull" echo "→ Repo existiert — pull"
sudo -u $USER git -C \ sudo -u $USER git -C \
/home/$USER/aziros pull origin main /home/$USER/aziros pull origin main
else else
@ -94,9 +95,6 @@ echo "✅ Repository bereit"
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 7 — .env kopieren # SCHRITT 7 — .env kopieren
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo ""
echo "→ .env Setup für Mode: $MODE"
ENV_FILE="/home/$USER/aziros/src/.env" ENV_FILE="/home/$USER/aziros/src/.env"
if [ "$MODE" = "development" ]; then if [ "$MODE" = "development" ]; then
@ -116,80 +114,126 @@ if [ ! -f "$ENV_FILE" ]; then
echo "Führe auf dem lokalen Server aus:" echo "Führe auf dem lokalen Server aus:"
echo "" echo ""
echo " scp ~/aziros/src/$SRC_ENV \\" echo " scp ~/aziros/src/$SRC_ENV \\"
echo " $USER@$(hostname -I | awk '{print $1}'):~/aziros/src/.env" SERVER_IP=$(hostname -I | awk '{print $1}')
echo " $USER@$SERVER_IP:~/aziros/src/.env"
echo "" echo ""
read -p "Drücke ENTER wenn .env kopiert wurde..." read -p "Drücke ENTER wenn .env kopiert wurde..."
if [ ! -f "$ENV_FILE" ]; then if [ ! -f "$ENV_FILE" ]; then
echo "❌ .env fehlt noch — Abbruch" echo "❌ .env fehlt — Abbruch"
exit 1 exit 1
fi fi
fi fi
echo "✅ .env vorhanden" echo "✅ .env vorhanden"
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 8 — Docker Compose starten # 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..." echo "→ Docker Stack wird gestartet..."
cd /home/$USER/aziros 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 \ sudo -u $USER docker compose \
-f $COMPOSE_FILE up -d --build -f $COMPOSE up -d --build
echo "→ Warte bis DB bereit ist..." echo "→ Warte bis DB bereit ist..."
sleep 15 sleep 20
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 9 — Laravel Setup # SCHRITT 10 — DB User anlegen
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo "→ Laravel wird konfiguriert..." 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 \ sudo -u $USER docker compose \
-f $COMPOSE_FILE exec -T app \ -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 php artisan migrate --force
echo "→ Storage Link..."
sudo -u $USER docker compose \ sudo -u $USER docker compose \
-f $COMPOSE_FILE exec -T app \ -f $COMPOSE 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 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" echo "✅ Laravel konfiguriert"
# ═══════════════════════════════════════ # ═══════════════════════════════════════
# SCHRITT 10 — Status # SCHRITT 12 — Status
# ═══════════════════════════════════════ # ═══════════════════════════════════════
echo "" echo ""
echo "╔══════════════════════════════════════╗" echo "╔══════════════════════════════════════╗"
echo "║ Setup abgeschlossen ✅ ║" echo "║ Setup abgeschlossen ✅ ║"
echo "╚══════════════════════════════════════╝" echo "╚══════════════════════════════════════╝"
echo "" echo ""
echo "Mode: $MODE"
echo "Compose: $COMPOSE_FILE"
echo ""
echo "Docker Status:"
sudo -u $USER docker compose \
-f $COMPOSE_FILE ps
echo ""
sudo -u $USER docker compose \
-f $COMPOSE ps
echo ""
if [ "$MODE" = "staging" ]; then if [ "$MODE" = "staging" ]; then
echo "URL: https://app.staging.aziros.com" echo "URL: https://app.staging.aziros.com"
elif [ "$MODE" = "development" ]; then elif [ "$MODE" = "development" ]; then
@ -199,5 +243,6 @@ else
fi fi
echo "" echo ""
echo "Neu einloggen damit Docker-Gruppe aktiv:" echo "Neu einloggen damit Docker aktiv:"
echo " su - $USER" echo " su - $USER"
echo ""