| |
| |
| |
| FROM python:3.12-slim-bullseye AS final |
| ENV PYTHONUNBUFFERED=1 \ |
| PIP_NO_CACHE_DIR=1 |
|
|
| |
| RUN useradd -m -u 1000 user |
| USER user |
| ENV HOME=/home/user \ |
| PATH=/home/user/.local/bin:$PATH |
| WORKDIR $HOME/app |
|
|
| |
| COPY --chown=user client/ $HOME/app/client/ |
| COPY --chown=user servers/ $HOME/app/servers/ |
|
|
| |
| RUN python -m venv $HOME/venvs/client \ |
| && python -m venv $HOME/venvs/retrieve \ |
| && python -m venv $HOME/venvs/review |
|
|
| |
| 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 |
|
|
| |
| 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 |
|
|
| |
| 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 |
|
|
| |
| RUN mkdir -p $HOME/app \ |
| && cat <<'EOF' > $HOME/app/start.sh |
| |
| 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 |
|
|
| |
| sleep 5 |
|
|
| |
| 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"] |