#!/bin/bash ############################################################################### # PANJIT Document Translator - 一鍵安裝腳本 # 用於 1Panel 環境部署 # # 此腳本會: # 1. 檢查 Python 版本 # 2. 安裝所有 Python 依賴套件 # 3. 建立必要目錄 # 4. 驗證關鍵配置 # # Author: PANJIT IT Team # Created: 2025-10-03 ############################################################################### set -e # 發生錯誤時立即退出 # 顏色定義 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日誌函數 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 顯示橫幅 show_banner() { echo "" echo "╔═══════════════════════════════════════════════════════════╗" echo "║ PANJIT Document Translator - 環境安裝腳本 ║" echo "║ 適用於 1Panel 環境部署 ║" echo "╚═══════════════════════════════════════════════════════════╝" echo "" } # 檢查 Python 版本 check_python() { log_info "檢查 Python 版本..." if ! command -v python3 &> /dev/null; then log_error "找不到 python3,請先安裝 Python 3.10+" exit 1 fi PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}') PYTHON_MAJOR=$(echo $PYTHON_VERSION | cut -d. -f1) PYTHON_MINOR=$(echo $PYTHON_VERSION | cut -d. -f2) if [ "$PYTHON_MAJOR" -lt 3 ] || ([ "$PYTHON_MAJOR" -eq 3 ] && [ "$PYTHON_MINOR" -lt 10 ]); then log_error "Python 版本過低: $PYTHON_VERSION (需要 3.10+)" exit 1 fi log_success "Python 版本: $PYTHON_VERSION ✓" } # 檢查 pip check_pip() { log_info "檢查 pip..." if ! command -v pip3 &> /dev/null; then log_error "找不到 pip3,請先安裝 pip" exit 1 fi PIP_VERSION=$(pip3 --version | awk '{print $2}') log_success "pip 版本: $PIP_VERSION ✓" } # 升級 pip upgrade_pip() { log_info "升級 pip 到最新版本..." pip3 install --upgrade pip --quiet log_success "pip 升級完成 ✓" } # 安裝 Python 依賴 install_dependencies() { log_info "安裝 Python 依賴套件..." echo "" if [ ! -f "requirements.txt" ]; then log_error "找不到 requirements.txt 檔案" exit 1 fi # 顯示將要安裝的套件數量 PACKAGE_COUNT=$(grep -c "^[^#]" requirements.txt || true) log_info "將安裝 $PACKAGE_COUNT 個套件(這可能需要幾分鐘)..." echo "" # 安裝依賴(使用清華鏡像加速) if pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 2>&1 | tee /tmp/pip_install.log; then log_success "所有依賴套件安裝完成 ✓" else log_warning "使用清華鏡像安裝失敗,嘗試使用官方源..." if pip3 install -r requirements.txt 2>&1 | tee /tmp/pip_install.log; then log_success "所有依賴套件安裝完成 ✓" else log_error "依賴套件安裝失敗,請檢查 /tmp/pip_install.log" exit 1 fi fi echo "" } # 建立必要目錄 create_directories() { log_info "建立必要目錄..." DIRECTORIES=( "uploads" "logs" "static" ) for dir in "${DIRECTORIES[@]}"; do if [ ! -d "$dir" ]; then mkdir -p "$dir" log_success "建立目錄: $dir ✓" else log_info "目錄已存在: $dir" fi done # 設定目錄權限 chmod 755 uploads logs static log_success "目錄權限設定完成 ✓" echo "" } # 檢查環境變數檔案 check_env_file() { log_info "檢查環境變數配置..." if [ -f ".env" ]; then log_success "找到 .env 檔案 ✓" # 檢查關鍵配置項 REQUIRED_VARS=( "DATABASE_URL" "REDIS_URL" "LDAP_SERVER" "SMTP_SERVER" ) MISSING_VARS=() for var in "${REQUIRED_VARS[@]}"; do if ! grep -q "^${var}=" .env; then MISSING_VARS+=("$var") fi done if [ ${#MISSING_VARS[@]} -gt 0 ]; then log_warning "以下環境變數未設定:" for var in "${MISSING_VARS[@]}"; do echo " - $var" done else log_success "關鍵環境變數已配置 ✓" fi else log_warning "找不到 .env 檔案" log_info "請參考 .env.example 建立 .env 檔案" fi echo "" } # 檢查 api.txt check_api_file() { log_info "檢查 Dify API 配置..." if [ -f "api.txt" ]; then log_success "找到 api.txt 檔案 ✓" # 檢查必要配置 if grep -q "translation_api:" api.txt && grep -q "ocr_api:" api.txt; then log_success "Dify API 配置完整 ✓" else log_warning "api.txt 配置可能不完整,請檢查" fi else log_warning "找不到 api.txt 檔案(Dify API 配置)" log_info "如需翻譯功能,請建立 api.txt 並配置 API 金鑰" fi echo "" } # 驗證安裝 verify_installation() { log_info "驗證安裝..." # 檢查關鍵套件 CRITICAL_PACKAGES=( "flask" "celery" "redis" "pymysql" "ldap3" ) for package in "${CRITICAL_PACKAGES[@]}"; do if python3 -c "import ${package}" 2>/dev/null; then log_success "套件 ${package} 安裝成功 ✓" else log_error "套件 ${package} 安裝失敗" exit 1 fi done echo "" } # 顯示後續步驟 show_next_steps() { echo "" echo "╔═══════════════════════════════════════════════════════════╗" echo "║ 安裝完成!後續步驟: ║" echo "╚═══════════════════════════════════════════════════════════╝" echo "" echo "1. 📝 修改環境變數中的安全金鑰:" echo " nano .env" echo " # 修改 SECRET_KEY 和 JWT_SECRET_KEY" echo "" echo "2. ✅ 確認 API 配置(已預設好):" echo " cat api.txt" echo "" echo "3. 🚀 在 1Panel 介面設定:" echo " 命令執行: python3 start.py" echo " 端口映射: 12010" echo "" echo "4. ✅ 驗證服務:" echo " curl http://localhost:12010/api/health" echo "" echo "📚 詳細說明請參考 README.md" echo "" } # 主函數 main() { show_banner log_info "開始安裝環境..." echo "" # 執行檢查和安裝 check_python check_pip upgrade_pip echo "" install_dependencies create_directories check_env_file check_api_file verify_installation log_success "=========================================" log_success " 所有安裝步驟完成!" log_success "=========================================" show_next_steps } # 執行主函數 main