93 lines
2.6 KiB
Bash
93 lines
2.6 KiB
Bash
#!/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 "" |