#!/usr/bin/env bash set -euo pipefail INSTALL_DIR="${INSTALL_DIR:-/opt/secondary-school-grade-archive}" BRANCH="${BRANCH:-main}" PIP_MIRROR="${PIP_MIRROR:-https://pypi.tuna.tsinghua.edu.cn/simple}" GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $*"; } log_error() { echo -e "${RED}[ERROR]${NC} $*" >&2; } # shellcheck source=proxy.sh source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/proxy.sh" cd "${INSTALL_DIR}" || exit 1 find "${INSTALL_DIR}" -name "*.sh" -exec sed -i 's/\r$//' {} + chmod +x deploy/start.sh setup_deploy_proxy log_info "拉取最新代码…" git fetch origin git checkout "${BRANCH}" 2>/dev/null || true git pull origin "${BRANCH}" if [[ ! -f "${INSTALL_DIR}/frontend/dist/index.html" ]]; then log_error "未找到 frontend/dist/index.html" log_error "请先在开发机构建前端并推送到仓库: cd frontend && npm run build && git add frontend/dist && git push" exit 1 fi log_info "更新后端依赖…" cd backend source venv/bin/activate pip install -r requirements.txt --progress-bar on -i "${PIP_MIRROR}" deactivate if command -v pm2 &>/dev/null; then pm2 delete grade-api grade-web 2>/dev/null || true fi log_info "重启 systemd 服务…" systemctl restart grade-archive log_info "更新完成 — 访问端口见 .env 中 WEB_PORT(默认 23566)"