Files
smoothschedule/deploy.sh

121 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# SmoothSchedule Production Deployment Script
# Usage: ./deploy.sh [server_user@server_host]
# Example: ./deploy.sh poduck@smoothschedule.com
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
SERVER=${1:-"poduck@smoothschedule.com"}
PROJECT_DIR="/home/poduck/Desktop/smoothschedule2"
echo -e "${GREEN}==================================="
echo "SmoothSchedule Deployment"
echo "===================================${NC}"
echo "Target server: $SERVER"
echo ""
# Function to print status
print_status() {
echo -e "${GREEN}>>> $1${NC}"
}
print_warning() {
echo -e "${YELLOW}>>> $1${NC}"
}
print_error() {
echo -e "${RED}>>> $1${NC}"
}
# Step 1: Build frontend
print_status "Step 1: Building frontend..."
cd "$PROJECT_DIR/frontend"
if [ ! -d "node_modules" ]; then
print_warning "Installing frontend dependencies..."
npm install
fi
npm run build
print_status "Frontend build complete!"
# Step 2: Prepare deployment package
print_status "Step 2: Preparing deployment package..."
cd "$PROJECT_DIR"
mkdir -p /tmp/smoothschedule-deploy
# Copy backend
rsync -av --exclude='.venv' --exclude='__pycache__' --exclude='*.pyc' \
--exclude='.git' --exclude='node_modules' \
"$PROJECT_DIR/smoothschedule/" /tmp/smoothschedule-deploy/backend/
# Copy frontend build
rsync -av "$PROJECT_DIR/frontend/dist/" /tmp/smoothschedule-deploy/frontend/
print_status "Deployment package prepared!"
# Step 3: Upload to server
print_status "Step 3: Uploading to server..."
ssh "$SERVER" "mkdir -p ~/smoothschedule"
# Upload backend
rsync -avz --delete /tmp/smoothschedule-deploy/backend/ "$SERVER:~/smoothschedule/"
# Upload frontend
rsync -avz --delete /tmp/smoothschedule-deploy/frontend/ "$SERVER:~/smoothschedule-frontend/"
print_status "Files uploaded!"
# Step 4: Deploy on server
print_status "Step 4: Deploying on server..."
ssh "$SERVER" 'bash -s' << 'ENDSSH'
set -e
echo ">>> Navigating to project directory..."
cd ~/smoothschedule
echo ">>> Building Docker images..."
docker compose -f docker-compose.production.yml build
echo ">>> Starting containers..."
docker compose -f docker-compose.production.yml up -d
echo ">>> Waiting for containers to start..."
sleep 10
echo ">>> Running database migrations..."
docker compose -f docker-compose.production.yml exec -T django python manage.py migrate
echo ">>> Collecting static files..."
docker compose -f docker-compose.production.yml exec -T django python manage.py collectstatic --noinput
echo ">>> Checking container status..."
docker compose -f docker-compose.production.yml ps
echo ">>> Deployment complete!"
ENDSSH
# Cleanup
rm -rf /tmp/smoothschedule-deploy
echo ""
print_status "==================================="
print_status "Deployment Complete!"
print_status "==================================="
echo ""
echo "Your application should now be running at:"
echo " - https://smoothschedule.com"
echo " - https://platform.smoothschedule.com"
echo " - https://*.smoothschedule.com (tenant subdomains)"
echo ""
echo "To view logs:"
echo " ssh $SERVER 'cd ~/smoothschedule && docker compose -f docker-compose.production.yml logs -f'"
echo ""
echo "To check status:"
echo " ssh $SERVER 'cd ~/smoothschedule && docker compose -f docker-compose.production.yml ps'"