#!/bin/bash # # MyBeacon - Deploy to Development Container # # Usage: ./scripts/deploy.sh [options] # # Options: # --skip-build Skip frontend build (only restart backend) # --backend-only Only restart backend, don't touch frontend # --help Show this help # set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Configuration REMOTE_HOST="ms.e-bash.ru" REMOTE_PORT="2223" REMOTE_USER="user" REMOTE_PATH="~/mybeacon-backend" # Get script directory (project root) SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" cd "$SCRIPT_DIR" # Parse arguments SKIP_BUILD=false BACKEND_ONLY=false while [[ $# -gt 0 ]]; do case $1 in --skip-build) SKIP_BUILD=true shift ;; --backend-only) BACKEND_ONLY=true shift ;; --help) echo "Usage: $0 [options]" echo "" echo "Options:" echo " --skip-build Skip frontend build (only restart backend)" echo " --backend-only Only restart backend, don't touch frontend" echo " --help Show this help" echo "" echo "Server: ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PORT}" exit 0 ;; *) echo -e "${RED}Unknown option: $1${NC}" exit 1 ;; esac done echo -e "${BLUE}╔════════════════════════════════════╗${NC}" echo -e "${BLUE}║ MyBeacon - Deploy to Dev Server ║${NC}" echo -e "${BLUE}╚════════════════════════════════════╝${NC}" echo "" # Function for SSH commands ssh_cmd() { ssh -p "$REMOTE_PORT" "${REMOTE_USER}@${REMOTE_HOST}" "$@" } # Step 1: Check for uncommitted changes echo -e "${BLUE}[1/5]${NC} Checking local git status..." if ! git diff --quiet HEAD; then echo -e "${YELLOW}Warning: You have uncommitted changes!${NC}" git status --short echo "" read -p "Continue anyway? (y/N) " -n 1 -r echo "" if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo -e "${RED}Aborted.${NC}" exit 1 fi fi echo -e "${GREEN}✓ Git status OK${NC}" echo "" # Step 2: Push local changes echo -e "${BLUE}[2/5]${NC} Pushing to remote repository..." git push origin master || { echo -e "${YELLOW}Warning: Nothing to push (already up to date)${NC}" } echo -e "${GREEN}✓ Push complete${NC}" echo "" # Step 3: Pull on server echo -e "${BLUE}[3/5]${NC} Pulling changes on server..." ssh_cmd "cd ${REMOTE_PATH} && git pull" echo -e "${GREEN}✓ Pull complete${NC}" echo "" # Step 4: Build frontend (if not skipped) if [ "$BACKEND_ONLY" = false ] && [ "$SKIP_BUILD" = false ]; then echo -e "${BLUE}[4/5]${NC} Building frontend..." ssh_cmd "cd ${REMOTE_PATH}/frontend && npm run build" echo -e "${GREEN}✓ Frontend build complete${NC}" else echo -e "${BLUE}[4/5]${NC} ${YELLOW}Skipping frontend build${NC}" fi echo "" # Step 5: Restart backend echo -e "${BLUE}[5/5]${NC} Restarting backend..." ssh_cmd "cd ${REMOTE_PATH} && bash backend.sh restart" echo -e "${GREEN}✓ Backend restarted${NC}" echo "" echo -e "${GREEN}════════════════════════════════════${NC}" echo -e "${GREEN}Deploy complete!${NC}" echo "" echo -e "Frontend: ${YELLOW}http://${REMOTE_HOST}:2280${NC}" echo -e "Backend: ${YELLOW}http://${REMOTE_HOST}:2280/api${NC}" echo -e "API Docs: ${YELLOW}http://${REMOTE_HOST}:2280/docs${NC}" echo "" echo -e "View logs: ${YELLOW}ssh -p${REMOTE_PORT} ${REMOTE_USER}@${REMOTE_HOST} 'tail -f /tmp/backend.log'${NC}"