OCR PipelinePaddleOCR Deployment
OCR Pipeline

PaddleOCR Deployment

Custom Docker container on VPS with triple redundancy after two container-wipe incidents

PaddleOCR Deployment

VPS: 76.13.123.120:8866 | Endpoint: /predict/ocr_system | Registry: ghcr.io/ibrahimlaeeq/paddle-ocr-stable-final:latest

Why PaddleOCR Was Problematic

Unlike other OCR engines (DocTR, Tesseract, Omniparser), PaddleOCR was built as a custom local Docker image with no registry backup. When VPS servers were updated or cleanup commands ran, the image was wiped. Registry-based images survived because Docker could re-pull them.

Incident #1 (2026-02-11): Container Wiped

  • Local-only image: paddle-ocr-stable-final:latest (no registry prefix)
  • docker system prune removed it, Docker had no external source to re-pull
  • All other services survived (DocTR from ghcr.io, Tesseract from Docker Hub, etc.)
  • Recovery: Found /root/paddle_ocr_backup.tar, loaded it, pushed to GitHub Container Registry

Incident #2 (2026-03-11): Container Wiped Again

  • Compose file still referenced local image despite registry push
  • pull_policy: never prevented auto-recovery
  • Fix: Updated compose to use ghcr.io/ibrahimlaeeq/paddle-ocr-stable-final:latest, removed pull_policy: never

Current Setup (Triple Redundancy)

  1. GitHub Container Registry: ghcr.io/ibrahimlaeeq/paddle-ocr-stable-final:latest — survives everything
  2. Local VPS image: Docker cache on VPS
  3. Backup tarball: /root/paddle_ocr_backup.tar (1.3GB)

Management

  • Coolify UI: "Paddle OCR For SynthralOS (production)"
  • Container: ocr-production-service
  • Will NOT break again after server updates