File size: 2,553 Bytes
82bf89e d56083c 82bf89e d56083c 82bf89e d56083c 82bf89e d56083c 82bf89e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# =========================
# Simple Python 3.12 environment
# =========================
FROM python:3.12-slim-bullseye AS final
ENV PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
# Create user
RUN useradd -m -u 1000 user
USER user
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
WORKDIR $HOME/app
# Copy application code
COPY --chown=user client/ $HOME/app/client/
COPY --chown=user servers/ $HOME/app/servers/
# Create independent virtual environments for each service
RUN python -m venv $HOME/venvs/client \
&& python -m venv $HOME/venvs/retrieve \
&& python -m venv $HOME/venvs/review
# Install client dependencies
RUN $HOME/venvs/client/bin/pip install --no-cache-dir -U pip \
&& $HOME/venvs/client/bin/pip install --no-cache-dir -r $HOME/app/client/requirements.txt
# Install Retrieve dependencies
RUN $HOME/venvs/retrieve/bin/pip install --no-cache-dir -U pip \
&& $HOME/venvs/retrieve/bin/pip install --no-cache-dir -r $HOME/app/servers/Retrieve/requirements.txt \
&& $HOME/venvs/retrieve/bin/pip install --no-cache-dir -U crawl4ai \
&& $HOME/venvs/retrieve/bin/crawl4ai-setup || true \
&& $HOME/venvs/retrieve/bin/crawl4ai-doctor || true
# Install Review dependencies
RUN $HOME/venvs/review/bin/pip install --no-cache-dir -U pip \
&& $HOME/venvs/review/bin/pip install --no-cache-dir -r $HOME/app/servers/Review/requirements.txt
# Generate startup script
RUN mkdir -p $HOME/app \
&& cat <<'EOF' > $HOME/app/start.sh
#!/bin/bash
set -e
cd "$HOME/app"
start_service() {
local name="$1"
local dir="$2"
local py="$3"
(
cd "$dir"
while true; do
echo "[startup] Starting $name (Python 3.12)…"
set +e
"$py" main.py
exit_code=$?
set -e
if [ $exit_code -eq 0 ]; then
echo "[$name] exited normally"
break
else
echo "[$name] crashed with code $exit_code, restarting in 10s..."
sleep 10
fi
done
) &
}
if [ -d "servers/Retrieve" ]; then
start_service "Retrieve" "servers/Retrieve" "$HOME/venvs/retrieve/bin/python"
fi
if [ -d "servers/Review" ]; then
start_service "Review" "servers/Review" "$HOME/venvs/review/bin/python"
fi
# Wait for backend services to start
sleep 5
# Start frontend Streamlit
echo "[startup] Starting Streamlit client (Python 3.12)…"
cd "$HOME/app/client"
export PORT="${PORT:-7860}"
exec "$HOME/venvs/client/bin/python" -m streamlit run app.py --server.port="$PORT" --server.address=0.0.0.0
EOF
RUN chmod +x $HOME/app/start.sh
EXPOSE 7860
CMD ["/bin/bash", "/home/user/app/start.sh"] |