#!/bin/bash # 3D 店內導引 Demo - 啟動伺服器腳本 # 使用方式: ./start-server.sh [dev|prod] SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # PID 檔案位置 PID_FILE="$SCRIPT_DIR/.server.pid" LOG_FILE="$SCRIPT_DIR/.server.log" # 檢查是否已經在執行 if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "伺服器已在執行中 (PID: $PID)" echo "請先執行 ./stop-server.sh 關閉伺服器" exit 1 else # 清理過期的 PID 檔案 rm -f "$PID_FILE" fi fi # 取得本機 IP get_local_ip() { # 嘗試不同方式取得 IP ip route get 1 2>/dev/null | awk '{print $7; exit}' || \ hostname -I 2>/dev/null | awk '{print $1}' || \ ifconfig 2>/dev/null | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -1 || \ echo "無法取得" } LOCAL_IP=$(get_local_ip) PORT=3000 # 判斷模式 MODE=${1:-dev} echo "==========================================" echo " 3D 店內導引 Demo 伺服器" echo "==========================================" echo "" if [ "$MODE" = "prod" ]; then echo "模式: 生產環境 (使用建構後的靜態檔案)" echo "" echo "正在建構專案..." npm run build > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "建構失敗!請檢查錯誤訊息。" exit 1 fi echo "建構完成,啟動預覽伺服器..." nohup npm run preview:host > "$LOG_FILE" 2>&1 & else echo "模式: 開發環境 (支援熱更新)" echo "" echo "正在啟動開發伺服器..." nohup npm run dev:host > "$LOG_FILE" 2>&1 & fi # 儲存 PID SERVER_PID=$! echo $SERVER_PID > "$PID_FILE" # 等待伺服器啟動 sleep 2 # 檢查是否成功啟動 if ps -p "$SERVER_PID" > /dev/null 2>&1; then echo "" echo "伺服器啟動成功!" echo "" echo "==========================================" echo " 存取網址" echo "==========================================" echo "" echo " 本機存取: http://localhost:$PORT" echo " 遠端存取: http://$LOCAL_IP:$PORT" echo "" echo "==========================================" echo "" echo "PID: $SERVER_PID" echo "日誌檔案: $LOG_FILE" echo "" echo "關閉伺服器: ./stop-server.sh" echo "" else echo "伺服器啟動失敗!" echo "請檢查日誌: cat $LOG_FILE" rm -f "$PID_FILE" exit 1 fi