修复 OCR libGL.so.1 缺失:安装 libgl1 等系统依赖。

- 新增 deploy/install-ocr-deps.sh,update.sh 自动检查

- install.sh 预装 OpenGL/Mesa 库
This commit is contained in:
dekun
2026-06-28 13:57:49 +08:00
parent a145f38606
commit 1c50ebc0ec
7 changed files with 67 additions and 3 deletions
+4 -1
View File
@@ -113,7 +113,10 @@ def _process_wrong_question(question_id: uuid.UUID):
db.commit() db.commit()
except Exception as exc: except Exception as exc:
wq.status = WrongQuestionStatus.failed wq.status = WrongQuestionStatus.failed
wq.error_message = _short_error(exc, "OCR 识别失败:") msg = _short_error(exc, "OCR 识别失败:")
if "libGL" in str(exc):
msg += " 请在服务器执行: sudo bash deploy/install-ocr-deps.sh && systemctl restart grade-archive"
wq.error_message = msg
db.commit() db.commit()
return return
+5
View File
@@ -1,9 +1,14 @@
from pathlib import Path from pathlib import Path
import os
from PIL import Image from PIL import Image
from app.core.config import settings from app.core.config import settings
# 无图形界面服务器:避免 OpenCV/Paddle 依赖 X11
os.environ.setdefault("OPENCV_IO_ENABLE_OPENEXR", "0")
_ocr_engine = None _ocr_engine = None
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
# PaddleOCR / OpenCV 在无图形界面服务器上所需的系统库
set -euo pipefail
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
echo "请使用 root 运行: sudo bash deploy/install-ocr-deps.sh"
exit 1
fi
GREEN='\033[0;32m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_info "安装 OCR 依赖(libGL 等)…"
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \
libgl1 \
libglx-mesa0 \
libgbm1 \
libgomp1 \
libglib2.0-0 \
libsm6 \
libxrender1 \
libxext6 \
libxcb1 \
libfontconfig1
log_info "OCR 系统依赖已就绪"
+2 -1
View File
@@ -56,7 +56,8 @@ install_base_packages() {
python3 python3-venv python3-pip python3-dev \ python3 python3-venv python3-pip python3-dev \
build-essential libpq-dev \ build-essential libpq-dev \
postgresql postgresql-contrib \ postgresql postgresql-contrib \
libgomp1 libglib2.0-0 libsm6 libxrender1 libxext6 libgl1 libglx-mesa0 libgbm1 \
libgomp1 libglib2.0-0 libsm6 libxrender1 libxext6 libxcb1 libfontconfig1
} }
clone_or_update_repo() { clone_or_update_repo() {
+1
View File
@@ -16,5 +16,6 @@ fi
export FRONTEND_DIST="${FRONTEND_DIST:-${ROOT}/frontend/dist}" export FRONTEND_DIST="${FRONTEND_DIST:-${ROOT}/frontend/dist}"
export UPLOAD_DIR="${UPLOAD_DIR:-${ROOT}/uploads}" export UPLOAD_DIR="${UPLOAD_DIR:-${ROOT}/uploads}"
export OPENCV_IO_ENABLE_OPENEXR=0
exec python -m uvicorn app.main:app --host 0.0.0.0 --port "${WEB_PORT:-23566}" exec python -m uvicorn app.main:app --host 0.0.0.0 --port "${WEB_PORT:-23566}"
+5
View File
@@ -41,6 +41,11 @@ if command -v pm2 &>/dev/null; then
pm2 delete grade-api grade-web 2>/dev/null || true pm2 delete grade-api grade-web 2>/dev/null || true
fi fi
if [[ "${EUID:-$(id -u)}" -eq 0 ]]; then
log_info "检查 OCR 系统依赖(libGL)…"
bash "${INSTALL_DIR}/deploy/install-ocr-deps.sh"
fi
log_info "重启 systemd 服务…" log_info "重启 systemd 服务…"
systemctl restart grade-archive systemctl restart grade-archive
+22 -1
View File
@@ -215,6 +215,27 @@ bash /opt/secondary-school-grade-archive/deploy/backup.sh
--- ---
## 9. 技术支持 ## 9. OCR 报错 libGL.so.1
若错题识别失败并提示 `libGL.so.1: cannot open shared object file`,说明服务器缺少 OpenGL 运行库(PaddleOCR/OpenCV 需要)。
在服务器执行:
```bash
cd /opt/secondary-school-grade-archive
git pull
sudo bash deploy/install-ocr-deps.sh
sudo systemctl restart grade-archive
```
或执行完整更新(已包含 OCR 依赖检查):
```bash
sudo bash deploy/update.sh
```
---
## 10. 技术支持
微信 **dekun03** · 手机 **18364911125** 微信 **dekun03** · 手机 **18364911125**