102 lines
2.9 KiB
Bash
Executable File
102 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Daily auto-deploy script for Flutter/Go projects
|
|
# Runs at 3AM daily - no more disruptive deployments!
|
|
# Run as root/admin - no extra users needed!
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
GIT_REPO="https://lab.b0esche.cloud/b0esche/b0esche_cloud.git"
|
|
DEPLOY_DIR="/opt/auto-deploy/b0esche_cloud_rollout"
|
|
BUILD_DIR="/opt/go/data/postgres/backend/go_cloud"
|
|
LOG_FILE="/var/log/auto-deploy.log"
|
|
TIMEOUT=1800 # 30 minutes for Flutter build (increased from default)
|
|
SKIP_IF_RECENT_HOURS=2 # Skip if deployed within last 2 hours
|
|
|
|
# Logging
|
|
exec > >(tee -a "$LOG_FILE") 2>&1
|
|
|
|
# Check if we should skip deployment
|
|
LAST_DEPLOY_FILE="/tmp/last_deploy_time"
|
|
if [ -f "$LAST_DEPLOY_FILE" ]; then
|
|
LAST_DEPLOY=$(cat "$LAST_DEPLOY_FILE")
|
|
CURRENT_TIME=$(date +%s)
|
|
if [ $((CURRENT_TIME - LAST_DEPLOY)) -lt $((SKIP_IF_RECENT_HOURS * 3600)) ]; then
|
|
echo "=== Skipping deployment - recent deploy was less than $SKIP_IF_RECENT_HOURS hours ago ==="
|
|
echo "=== Auto-deploy skipped at $(date) ==="
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
echo "=== Scheduled auto-deploy started at $(date) ==="
|
|
|
|
# Create deploy directory if it doesn't exist
|
|
mkdir -p "$DEPLOY_DIR"
|
|
cd "$DEPLOY_DIR"
|
|
|
|
echo "Pulling latest changes..."
|
|
if [ -d ".git" ]; then
|
|
git fetch origin
|
|
git reset --hard origin/main
|
|
else
|
|
git clone "$GIT_REPO" .
|
|
fi
|
|
|
|
echo "=== Deploying Backend ==="
|
|
# Copy backend code to build directory
|
|
echo "Copying backend code to build directory..."
|
|
mkdir -p "$BUILD_DIR"
|
|
cp -r go_cloud/* "$BUILD_DIR/"
|
|
|
|
# Build and start backend from traefik directory
|
|
cd /opt/traefik
|
|
echo "Building go-backend container..."
|
|
docker-compose build --no-cache go-backend
|
|
echo "Recreating go-backend container with fresh environment..."
|
|
docker-compose up -d --force-recreate go-backend
|
|
|
|
echo "Backend deployed successfully!"
|
|
|
|
echo "=== Deploying Frontend ==="
|
|
# Build Flutter for web with proper timeout
|
|
echo "Building Flutter web app..."
|
|
FRONTEND_DIR="$DEPLOY_DIR/b0esche_cloud"
|
|
cd "$FRONTEND_DIR"
|
|
timeout 900 sudo -u admin /opt/flutter/bin/flutter build web --release || {
|
|
echo "Flutter build failed or timed out"
|
|
exit 1
|
|
}
|
|
|
|
# Copy built files to nginx volume
|
|
echo "Copying built files to web server..."
|
|
rm -rf /opt/traefik/web/*
|
|
cp -r build/web/* /opt/traefik/web/
|
|
|
|
# Restart nginx container
|
|
echo "Restarting flutter-web container..."
|
|
cd /opt/traefik
|
|
docker-compose up -d --force-recreate flutter-web
|
|
|
|
echo "=== Deployment completed successfully at $(date) ==="
|
|
|
|
# Record deployment time
|
|
date +%s > "$LAST_DEPLOY_FILE"
|
|
|
|
# Health checks
|
|
echo "=== Running health checks ==="
|
|
sleep 10
|
|
|
|
if curl -f -s https://go.b0esche.cloud/health > /dev/null 2>&1; then
|
|
echo "✅ Backend health check passed"
|
|
else
|
|
echo "❌ Backend health check failed"
|
|
fi
|
|
|
|
if curl -f -s https://www.b0esche.cloud > /dev/null 2>&1; then
|
|
echo "✅ Frontend health check passed"
|
|
else
|
|
echo "❌ Frontend health check failed"
|
|
fi
|
|
|
|
echo "=== Scheduled auto-deploy completed ==="
|