#!/bin/bash # Server Update Script for Ice Watch Application # This script handles updating the production server with proper user permissions set -e # Configuration APP_DIR="/opt/icewatch" APP_USER="icewatch" SERVICE_NAME="icewatch" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Functions log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } warn() { echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}" } error() { echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}" exit 1 } # Check if running as root if [[ $EUID -ne 0 ]]; then error "This script must be run as root (use sudo)" fi # Check if app directory exists if [[ ! -d "$APP_DIR" ]]; then error "Application directory $APP_DIR does not exist" fi # Check if service exists if ! systemctl list-unit-files | grep -q "$SERVICE_NAME.service"; then error "Service $SERVICE_NAME does not exist" fi log "Starting server update process..." # Stop the service log "Stopping $SERVICE_NAME service..." systemctl stop "$SERVICE_NAME" # Navigate to app directory as app user and update log "Updating application code..." sudo -u "$APP_USER" bash -c " cd '$APP_DIR' && \ git fetch origin && \ git reset --hard origin/main && \ npm install --production && \ npm run build " # Check if build was successful if [[ $? -ne 0 ]]; then error "Build failed! Check the logs above." fi # Start the service log "Starting $SERVICE_NAME service..." systemctl start "$SERVICE_NAME" # Check service status sleep 2 if systemctl is-active --quiet "$SERVICE_NAME"; then log "✅ Service $SERVICE_NAME is running successfully" else error "❌ Service $SERVICE_NAME failed to start" fi # Show recent logs log "Recent service logs:" journalctl -u "$SERVICE_NAME" -n 10 --no-pager log "🎉 Server update completed successfully!" log "Application is now running the latest version from main branch"