110 lines
3.1 KiB
Bash
110 lines
3.1 KiB
Bash
#!/bin/bash
|
||
|
||
# PANJIT Document Translator V2 - 生產環境部署腳本
|
||
# Author: PANJIT IT Team
|
||
# Created: 2025-01-01
|
||
|
||
set -e
|
||
|
||
echo "🚀 PANJIT Document Translator V2 - 生產環境部署"
|
||
echo "=================================================="
|
||
|
||
# 檢查是否存在生產環境配置文件
|
||
if [ ! -f ".env.production" ]; then
|
||
echo "❌ 錯誤:找不到 .env.production 文件"
|
||
echo "請先複製 .env.production 並設置正確的生產環境配置"
|
||
exit 1
|
||
fi
|
||
|
||
# 檢查是否存在 API 配置文件
|
||
if [ ! -f "api.txt" ]; then
|
||
echo "❌ 錯誤:找不到 api.txt 文件"
|
||
echo "請確保 Dify API 配置文件存在"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ 配置文件檢查完成"
|
||
|
||
# 停止現有容器 (如果存在)
|
||
echo "🔄 停止現有容器..."
|
||
docker-compose -f docker-compose.prod.yml down --remove-orphans
|
||
|
||
# 清理舊映像 (可選)
|
||
read -p "是否清理舊的 Docker 映像? (y/N): " clean_images
|
||
if [[ $clean_images =~ ^[Yy]$ ]]; then
|
||
echo "🧹 清理舊映像..."
|
||
docker system prune -f
|
||
docker image prune -f
|
||
fi
|
||
|
||
# 構建新映像
|
||
echo "🔨 構建生產環境映像..."
|
||
docker-compose -f docker-compose.prod.yml build --no-cache
|
||
|
||
# 創建必要的目錄
|
||
echo "📁 創建必要的目錄..."
|
||
mkdir -p uploads cache logs
|
||
|
||
# 設置權限
|
||
chmod 755 uploads cache logs
|
||
|
||
# 啟動服務
|
||
echo "🚀 啟動生產環境服務..."
|
||
docker-compose -f docker-compose.prod.yml up -d
|
||
|
||
# 等待資料庫服務啟動
|
||
echo "⏳ 等待資料庫服務啟動..."
|
||
sleep 10
|
||
|
||
# 執行認證系統資料庫初始化 (新架構)
|
||
echo "📊 執行認證系統資料庫初始化..."
|
||
docker-compose -f docker-compose.prod.yml exec -T app python run_create_schema.py
|
||
|
||
# 等待服務啟動
|
||
echo "⏳ 等待服務啟動..."
|
||
sleep 30
|
||
|
||
# 檢查服務狀態
|
||
echo "🔍 檢查服務狀態..."
|
||
docker-compose -f docker-compose.prod.yml ps
|
||
|
||
# 檢查健康狀態
|
||
echo "🏥 檢查應用健康狀態..."
|
||
max_attempts=10
|
||
attempt=1
|
||
|
||
while [ $attempt -le $max_attempts ]; do
|
||
if curl -s http://localhost:12010/api/health | grep -q "healthy"; then
|
||
echo "✅ 應用程式啟動成功!"
|
||
break
|
||
else
|
||
echo "⏳ 等待應用程式啟動... (嘗試 $attempt/$max_attempts)"
|
||
sleep 10
|
||
((attempt++))
|
||
fi
|
||
done
|
||
|
||
if [ $attempt -gt $max_attempts ]; then
|
||
echo "❌ 應用程式啟動失敗"
|
||
echo "請檢查日誌:"
|
||
docker-compose -f docker-compose.prod.yml logs app
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "🎉 生產環境部署完成!"
|
||
echo "=================================================="
|
||
echo "📊 服務狀態:"
|
||
docker-compose -f docker-compose.prod.yml ps
|
||
echo ""
|
||
echo "🌐 應用程式訪問地址:http://localhost:12010"
|
||
echo "🔧 API 健康檢查:http://localhost:12010/api/health"
|
||
echo ""
|
||
echo "📝 日誌查看命令:"
|
||
echo " - 應用程式日誌:docker-compose -f docker-compose.prod.yml logs -f app"
|
||
echo " - Worker 日誌:docker-compose -f docker-compose.prod.yml logs -f celery-worker"
|
||
echo " - Nginx 日誌:docker-compose -f docker-compose.prod.yml logs -f nginx"
|
||
echo ""
|
||
echo "🛑 停止服務命令:docker-compose -f docker-compose.prod.yml down"
|
||
echo ""
|
||
echo "✅ 部署完成!系統已準備好在生產環境中運行。" |