1panel
This commit is contained in:
281
install.sh
Normal file
281
install.sh
Normal file
@@ -0,0 +1,281 @@
|
||||
#!/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
|
Reference in New Issue
Block a user