Spaces:
Paused
Paused
Add debug Dockerfile with better error handling and logging
Browse files- Dockerfile +52 -28
- embedding_api.py +4 -1
Dockerfile
CHANGED
|
@@ -7,6 +7,7 @@ RUN apt-get update && apt-get install -y \
|
|
| 7 |
python3.11-venv \
|
| 8 |
git \
|
| 9 |
build-essential \
|
|
|
|
| 10 |
&& rm -rf /var/lib/apt/lists/*
|
| 11 |
|
| 12 |
# Create a non-root user (required by HF Spaces)
|
|
@@ -27,42 +28,65 @@ COPY --chown=user hono-proxy $HOME/app/hono-proxy
|
|
| 27 |
RUN python3.11 -m venv $HOME/venv
|
| 28 |
ENV PATH="$HOME/venv/bin:$PATH"
|
| 29 |
|
| 30 |
-
# Install Python dependencies
|
| 31 |
-
RUN pip install --upgrade pip
|
| 32 |
-
|
|
|
|
| 33 |
|
| 34 |
-
# Install pnpm and Node dependencies
|
| 35 |
RUN npm install -g pnpm
|
| 36 |
WORKDIR $HOME/app/hono-proxy
|
| 37 |
-
RUN pnpm install
|
| 38 |
|
| 39 |
-
# Copy Vespa certificates
|
| 40 |
RUN mkdir -p $HOME/.vespa/il-infra.colpali-server.default
|
| 41 |
-
COPY --chown=user vespa-certs/* $HOME/.vespa/il-infra.colpali-server.default/ ||
|
| 42 |
|
| 43 |
-
# Create
|
| 44 |
WORKDIR $HOME/app
|
| 45 |
-
RUN
|
| 46 |
-
\
|
| 47 |
-
|
| 48 |
-
echo "Starting
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
\
|
| 52 |
-
#
|
| 53 |
-
|
| 54 |
-
\
|
| 55 |
-
|
| 56 |
-
echo
|
| 57 |
-
|
| 58 |
-
\
|
| 59 |
-
|
| 60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
|
| 62 |
-
|
|
|
|
|
|
|
| 63 |
|
| 64 |
-
# Expose HF Spaces port
|
| 65 |
EXPOSE 7860
|
| 66 |
|
| 67 |
-
# Run
|
| 68 |
-
CMD ["./start-backend.sh"]
|
|
|
|
| 7 |
python3.11-venv \
|
| 8 |
git \
|
| 9 |
build-essential \
|
| 10 |
+
curl \
|
| 11 |
&& rm -rf /var/lib/apt/lists/*
|
| 12 |
|
| 13 |
# Create a non-root user (required by HF Spaces)
|
|
|
|
| 28 |
RUN python3.11 -m venv $HOME/venv
|
| 29 |
ENV PATH="$HOME/venv/bin:$PATH"
|
| 30 |
|
| 31 |
+
# Install Python dependencies with error handling
|
| 32 |
+
RUN pip install --upgrade pip && \
|
| 33 |
+
pip install -r requirements_embedding.txt || \
|
| 34 |
+
(echo "Failed to install Python dependencies" && exit 1)
|
| 35 |
|
| 36 |
+
# Install pnpm and Node dependencies
|
| 37 |
RUN npm install -g pnpm
|
| 38 |
WORKDIR $HOME/app/hono-proxy
|
| 39 |
+
RUN pnpm install || (echo "Failed to install Node dependencies" && exit 1)
|
| 40 |
|
| 41 |
+
# Copy Vespa certificates
|
| 42 |
RUN mkdir -p $HOME/.vespa/il-infra.colpali-server.default
|
| 43 |
+
COPY --chown=user vespa-certs/* $HOME/.vespa/il-infra.colpali-server.default/ || echo "Warning: Vespa certs not found"
|
| 44 |
|
| 45 |
+
# Create a more robust startup script
|
| 46 |
WORKDIR $HOME/app
|
| 47 |
+
RUN echo '#!/bin/bash' > start-backend.sh && \
|
| 48 |
+
echo 'set -e' >> start-backend.sh && \
|
| 49 |
+
echo '' >> start-backend.sh && \
|
| 50 |
+
echo 'echo "Starting backend services..."' >> start-backend.sh && \
|
| 51 |
+
echo 'echo "Environment variables:"' >> start-backend.sh && \
|
| 52 |
+
echo 'env | grep -E "VESPA|HF_|HUGGING" || true' >> start-backend.sh && \
|
| 53 |
+
echo '' >> start-backend.sh && \
|
| 54 |
+
echo '# Start embedding API with logging' >> start-backend.sh && \
|
| 55 |
+
echo 'echo "Starting ColPali embedding API on port 8001..."' >> start-backend.sh && \
|
| 56 |
+
echo 'python embedding_api.py 2>&1 | tee embedding.log &' >> start-backend.sh && \
|
| 57 |
+
echo 'EMBED_PID=$!' >> start-backend.sh && \
|
| 58 |
+
echo '' >> start-backend.sh && \
|
| 59 |
+
echo '# Wait and check if embedding API started' >> start-backend.sh && \
|
| 60 |
+
echo 'sleep 10' >> start-backend.sh && \
|
| 61 |
+
echo 'if ! kill -0 $EMBED_PID 2>/dev/null; then' >> start-backend.sh && \
|
| 62 |
+
echo ' echo "ERROR: Embedding API failed to start"' >> start-backend.sh && \
|
| 63 |
+
echo ' cat embedding.log' >> start-backend.sh && \
|
| 64 |
+
echo ' exit 1' >> start-backend.sh && \
|
| 65 |
+
echo 'fi' >> start-backend.sh && \
|
| 66 |
+
echo '' >> start-backend.sh && \
|
| 67 |
+
echo '# Test embedding API' >> start-backend.sh && \
|
| 68 |
+
echo 'curl -f http://localhost:8001/health || echo "Warning: Embedding API health check failed"' >> start-backend.sh && \
|
| 69 |
+
echo '' >> start-backend.sh && \
|
| 70 |
+
echo '# Start Hono proxy' >> start-backend.sh && \
|
| 71 |
+
echo 'echo "Starting Hono proxy on port 7860..."' >> start-backend.sh && \
|
| 72 |
+
echo 'cd hono-proxy' >> start-backend.sh && \
|
| 73 |
+
echo 'export PORT=7860' >> start-backend.sh && \
|
| 74 |
+
echo 'export CORS_ORIGIN="*"' >> start-backend.sh && \
|
| 75 |
+
echo 'export EMBEDDING_API_URL="http://localhost:8001"' >> start-backend.sh && \
|
| 76 |
+
echo 'export VESPA_ENDPOINT="${VESPA_ENDPOINT:-https://f5acf536.ed2ceb09.z.vespa-app.cloud}"' >> start-backend.sh && \
|
| 77 |
+
echo 'npx tsx src/index.ts 2>&1 | tee ../hono.log' >> start-backend.sh && \
|
| 78 |
+
echo '' >> start-backend.sh && \
|
| 79 |
+
echo '# If we get here, Hono exited' >> start-backend.sh && \
|
| 80 |
+
echo 'echo "Hono proxy exited, killing embedding service..."' >> start-backend.sh && \
|
| 81 |
+
echo 'kill $EMBED_PID 2>/dev/null || true' >> start-backend.sh && \
|
| 82 |
+
chmod +x start-backend.sh
|
| 83 |
|
| 84 |
+
# Add health check
|
| 85 |
+
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
|
| 86 |
+
CMD curl -f http://localhost:7860/api/health || exit 1
|
| 87 |
|
| 88 |
+
# Expose HF Spaces port
|
| 89 |
EXPOSE 7860
|
| 90 |
|
| 91 |
+
# Run with better error handling
|
| 92 |
+
CMD ["bash", "-c", "./start-backend.sh || (echo 'Startup failed, showing logs:' && cat *.log 2>/dev/null && exit 1)"]
|
embedding_api.py
CHANGED
|
@@ -23,7 +23,10 @@ if hf_token:
|
|
| 23 |
os.environ["HF_TOKEN"] = hf_token
|
| 24 |
|
| 25 |
# Setup logging
|
| 26 |
-
logging.basicConfig(
|
|
|
|
|
|
|
|
|
|
| 27 |
logger = logging.getLogger(__name__)
|
| 28 |
|
| 29 |
# Initialize FastAPI
|
|
|
|
| 23 |
os.environ["HF_TOKEN"] = hf_token
|
| 24 |
|
| 25 |
# Setup logging
|
| 26 |
+
logging.basicConfig(
|
| 27 |
+
level=logging.INFO,
|
| 28 |
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
| 29 |
+
)
|
| 30 |
logger = logging.getLogger(__name__)
|
| 31 |
|
| 32 |
# Initialize FastAPI
|