#!/bin/bash # =========================================== # TODO管理系統 - 生產環境部署腳本 (Linux/Mac) # =========================================== echo "" echo "========================================" echo "TODO管理系統 - 生產環境部署" echo "========================================" echo "" # 檢查Docker是否運行 echo "[INFO] 檢查Docker狀態..." if ! docker info >/dev/null 2>&1; then echo "[ERROR] Docker未運行,請啟動Docker後再執行此腳本" exit 1 fi echo "[SUCCESS] Docker運行正常" # 停止現有容器 echo "" echo "[INFO] 停止現有容器..." docker stop todo-backend-prod todo-frontend-prod 2>/dev/null || true docker rm todo-backend-prod todo-frontend-prod 2>/dev/null || true # 建置Docker鏡像 echo "" echo "[INFO] 建置Docker鏡像..." echo "[INFO] 建置後端鏡像..." if ! docker build -t todolist-backend:latest ./backend; then echo "[ERROR] 後端鏡像建置失敗" exit 1 fi echo "[SUCCESS] 後端鏡像建置完成" echo "[INFO] 建置前端鏡像..." if ! docker build -t todo-frontend:latest --build-arg NEXT_PUBLIC_API_URL=http://localhost:12011 ./frontend; then echo "[ERROR] 前端鏡像建置失敗" exit 1 fi echo "[SUCCESS] 前端鏡像建置完成" # 啟動服務 echo "" echo "[INFO] 啟動生產環境服務..." if ! docker-compose -f docker-compose.prod.yml up -d; then echo "[ERROR] 服務啟動失敗" exit 1 fi # 等待服務啟動 echo "[INFO] 等待服務啟動..." sleep 10 # 檢查服務狀態 echo "" echo "[INFO] 檢查服務狀態..." docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep todo- # 健康檢查 echo "" echo "[INFO] 執行健康檢查..." echo "[INFO] 檢查後端API..." if curl -s -f http://localhost:12011/api/health >/dev/null 2>&1; then echo "[SUCCESS] 後端API響應正常" else echo "[WARNING] 後端API可能尚未完全啟動,請稍後手動檢查" fi echo "[INFO] 檢查前端..." if curl -s -f http://localhost:12012 >/dev/null 2>&1; then echo "[SUCCESS] 前端響應正常" else echo "[WARNING] 前端可能尚未完全啟動,請稍後手動檢查" fi echo "" echo "========================================" echo "部署完成!" echo "========================================" echo "" echo "服務地址:" echo " 前端: http://localhost:12012" echo " 後端API: http://localhost:12011" echo "" echo "" echo "管理指令:" echo " 查看日誌: docker-compose -f docker-compose.prod.yml logs -f" echo " 停止服務: docker-compose -f docker-compose.prod.yml down" echo " 重啟服務: docker-compose -f docker-compose.prod.yml restart" echo ""