start.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/bin/bash
  2. #
  3. # MyBeacon Backend Startup Script
  4. #
  5. set -e
  6. # Change to backend directory
  7. cd "$(dirname "$0")"
  8. # Colors
  9. RED='\033[0;31m'
  10. GREEN='\033[0;32m'
  11. YELLOW='\033[1;33m'
  12. NC='\033[0m' # No Color
  13. # Default values
  14. MODE="${1:-dev}"
  15. HOST="${HOST:-0.0.0.0}"
  16. PORT="${PORT:-8000}"
  17. LOG_LEVEL="${LOG_LEVEL:-info}"
  18. echo -e "${GREEN}=== MyBeacon Backend Startup ===${NC}"
  19. echo -e "Mode: ${YELLOW}${MODE}${NC}"
  20. echo -e "Host: ${YELLOW}${HOST}${NC}"
  21. echo -e "Port: ${YELLOW}${PORT}${NC}"
  22. echo ""
  23. # Check if .env exists
  24. if [ ! -f ".env" ]; then
  25. echo -e "${RED}Error: .env file not found!${NC}"
  26. echo "Please create .env file from .env.example"
  27. exit 1
  28. fi
  29. # Check if poetry is installed
  30. if ! command -v poetry &> /dev/null; then
  31. echo -e "${RED}Error: poetry not found!${NC}"
  32. echo "Install poetry: curl -sSL https://install.python-poetry.org | python3 -"
  33. exit 1
  34. fi
  35. # Install dependencies if needed
  36. if [ ! -d ".venv" ] && [ ! -d "$(poetry env info -p 2>/dev/null)" ]; then
  37. echo -e "${YELLOW}Installing dependencies...${NC}"
  38. poetry install
  39. fi
  40. # Function to stop backend
  41. cleanup() {
  42. echo -e "\n${YELLOW}Stopping backend...${NC}"
  43. pkill -f "uvicorn app.main:app" 2>/dev/null || true
  44. exit 0
  45. }
  46. trap cleanup SIGINT SIGTERM
  47. # Start backend based on mode
  48. case "$MODE" in
  49. dev)
  50. echo -e "${GREEN}Starting in DEVELOPMENT mode...${NC}"
  51. echo -e "${YELLOW}Logs: /tmp/backend_dev.log${NC}"
  52. echo ""
  53. poetry run python3 -m uvicorn app.main:app \
  54. --host "$HOST" \
  55. --port "$PORT" \
  56. --reload \
  57. --log-level "$LOG_LEVEL" \
  58. 2>&1 | tee /tmp/backend_dev.log
  59. ;;
  60. prod)
  61. echo -e "${GREEN}Starting in PRODUCTION mode...${NC}"
  62. echo -e "${YELLOW}Logs: /var/log/mybeacon/backend.log${NC}"
  63. echo ""
  64. # Create log directory
  65. sudo mkdir -p /var/log/mybeacon
  66. sudo chown $USER:$USER /var/log/mybeacon
  67. poetry run python3 -m uvicorn app.main:app \
  68. --host "$HOST" \
  69. --port "$PORT" \
  70. --workers 4 \
  71. --log-level "$LOG_LEVEL" \
  72. --access-log \
  73. 2>&1 | tee -a /var/log/mybeacon/backend.log
  74. ;;
  75. background)
  76. echo -e "${GREEN}Starting in BACKGROUND mode...${NC}"
  77. echo -e "${YELLOW}Logs: /tmp/backend_live.log${NC}"
  78. echo ""
  79. # Kill existing backend
  80. pkill -f "uvicorn app.main:app" 2>/dev/null || true
  81. sleep 1
  82. # Start in background
  83. poetry run python3 -m uvicorn app.main:app \
  84. --host "$HOST" \
  85. --port "$PORT" \
  86. --log-level "$LOG_LEVEL" \
  87. 2>&1 < /dev/null | tee /tmp/backend_live.log &
  88. PID=$!
  89. echo -e "${GREEN}Backend started with PID: ${PID}${NC}"
  90. echo -e "Check logs: ${YELLOW}tail -f /tmp/backend_live.log${NC}"
  91. echo -e "Stop: ${YELLOW}pkill -f 'uvicorn app.main:app'${NC}"
  92. ;;
  93. stop)
  94. echo -e "${YELLOW}Stopping backend...${NC}"
  95. pkill -f "uvicorn app.main:app" 2>/dev/null && echo -e "${GREEN}Backend stopped${NC}" || echo -e "${YELLOW}Backend not running${NC}"
  96. ;;
  97. restart)
  98. echo -e "${YELLOW}Restarting backend...${NC}"
  99. pkill -f "uvicorn app.main:app" 2>/dev/null || true
  100. sleep 2
  101. exec "$0" background
  102. ;;
  103. status)
  104. if pgrep -f "uvicorn app.main:app" > /dev/null; then
  105. echo -e "${GREEN}Backend is running${NC}"
  106. ps aux | grep "uvicorn app.main:app" | grep -v grep
  107. else
  108. echo -e "${YELLOW}Backend is not running${NC}"
  109. fi
  110. ;;
  111. *)
  112. echo "Usage: $0 {dev|prod|background|stop|restart|status}"
  113. echo ""
  114. echo "Modes:"
  115. echo " dev - Development mode with auto-reload"
  116. echo " prod - Production mode with 4 workers"
  117. echo " background - Run in background"
  118. echo " stop - Stop backend"
  119. echo " restart - Restart backend"
  120. echo " status - Check backend status"
  121. echo ""
  122. echo "Environment variables:"
  123. echo " HOST - Bind host (default: 0.0.0.0)"
  124. echo " PORT - Bind port (default: 8000)"
  125. echo " LOG_LEVEL - Log level (default: info)"
  126. echo ""
  127. echo "Examples:"
  128. echo " $0 dev # Development mode"
  129. echo " $0 background # Background mode"
  130. echo " PORT=8001 $0 dev # Custom port"
  131. exit 1
  132. ;;
  133. esac