From 046daf442acdae158ce82709b65e7a0ba5bbd6c9 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 23 Oct 2025 19:06:27 +0530 Subject: [PATCH 1/4] feat(docker): update searxng build script --- Dockerfile | 52 +++++++++++++++++++++++++-------------------------- entrypoint.sh | 30 ++++++++++++++++++----------- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/Dockerfile b/Dockerfile index b219660..b94fc3d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,22 +17,11 @@ RUN yarn build FROM node:24.5.0-slim -RUN apt-get update && \ - apt-get install -y \ - python3 \ - python3-pip \ - python3-venv \ - python3-dev \ - sqlite3 \ - git \ - build-essential \ - libxslt-dev \ - zlib1g-dev \ - libffi-dev \ - libssl-dev \ - uwsgi \ - uwsgi-plugin-python3 \ - curl \ +RUN apt-get update && apt-get install -y \ + python3-dev python3-babel python3-venv python-is-python3 \ + uwsgi uwsgi-plugin-python3 \ + git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev \ + curl sudo \ && rm -rf /var/lib/apt/lists/* WORKDIR /home/perplexica @@ -45,28 +34,39 @@ COPY drizzle ./drizzle RUN mkdir /home/perplexica/uploads -RUN useradd --system --home-dir /usr/local/searxng --shell /bin/sh searxng - -WORKDIR /usr/local/searxng -RUN git clone https://github.com/searxng/searxng.git . && \ - python3 -m venv venv && \ - . venv/bin/activate && \ - pip install --upgrade pip setuptools wheel pyyaml && \ - pip install -r requirements.txt && \ - pip install uwsgi +RUN useradd --shell /bin/bash --system \ + --home-dir "/usr/local/searxng" \ + --comment 'Privacy-respecting metasearch engine' \ + searxng +RUN mkdir "/usr/local/searxng" RUN mkdir -p /etc/searxng +RUN chown -R "searxng:searxng" "/usr/local/searxng" + COPY searxng/settings.yml /etc/searxng/settings.yml COPY searxng/limiter.toml /etc/searxng/limiter.toml COPY searxng/uwsgi.ini /etc/searxng/uwsgi.ini +RUN chown -R searxng:searxng /etc/searxng -RUN chown -R searxng:searxng /usr/local/searxng /etc/searxng +USER searxng + +RUN git clone "https://github.com/searxng/searxng" \ + "/usr/local/searxng/searxng-src" + +RUN python3 -m venv "/usr/local/searxng/searx-pyenv" +RUN "/usr/local/searxng/searx-pyenv/bin/pip" install --upgrade pip setuptools wheel pyyaml msgspec +RUN cd "/usr/local/searxng/searxng-src" && \ + "/usr/local/searxng/searx-pyenv/bin/pip" install --use-pep517 --no-build-isolation -e . + +USER root WORKDIR /home/perplexica COPY entrypoint.sh ./entrypoint.sh RUN chmod +x ./entrypoint.sh RUN sed -i 's/\r$//' ./entrypoint.sh || true +RUN echo "searxng ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + EXPOSE 3000 8080 ENV SEARXNG_API_URL=http://localhost:8080 diff --git a/entrypoint.sh b/entrypoint.sh index 48ee169..1d15d1c 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,24 +1,32 @@ #!/bin/sh set -e -cd /usr/local/searxng -export SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml - -# Start SearXNG in background with all output redirected to /dev/null -/usr/local/searxng/venv/bin/uwsgi \ - --http-socket 0.0.0.0:8080 \ - --ini /etc/searxng/uwsgi.ini \ - --virtualenv /usr/local/searxng/venv \ - --disable-logging > /dev/null 2>&1 & - echo "Starting SearXNG..." + +sudo -H -u searxng bash -c "cd /usr/local/searxng/searxng-src && export SEARXNG_SETTINGS_PATH='/etc/searxng/settings.yml' && export FLASK_APP=searx/webapp.py && /usr/local/searxng/searx-pyenv/bin/python -m flask run --host=0.0.0.0 --port=8080" & +SEARXNG_PID=$! + +echo "Waiting for SearXNG to be ready..." sleep 5 +COUNTER=0 +MAX_TRIES=30 until curl -s http://localhost:8080 > /dev/null 2>&1; do + COUNTER=$((COUNTER+1)) + if [ $COUNTER -ge $MAX_TRIES ]; then + echo "Warning: SearXNG health check timeout, but continuing..." + break + fi sleep 1 done -echo "SearXNG started successfully" + +if curl -s http://localhost:8080 > /dev/null 2>&1; then + echo "SearXNG started successfully (PID: $SEARXNG_PID)" +else + echo "SearXNG may not be fully ready, but continuing (PID: $SEARXNG_PID)" +fi cd /home/perplexica echo "Starting Perplexica..." + exec node server.js \ No newline at end of file From 0856896aff79573c9acdbbafa5f4becca9b3275f Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 30 Oct 2025 17:21:40 +0530 Subject: [PATCH 2/4] feat(settings): fix text size, enhance UI --- .../Settings/Sections/Models/AddModelDialog.tsx | 8 ++++---- .../Sections/Models/AddProviderDialog.tsx | 8 ++++---- .../Settings/Sections/Models/ModelProvider.tsx | 16 ++++++++-------- .../Settings/Sections/Models/ModelSelect.tsx | 4 ++-- .../Settings/Sections/Models/Section.tsx | 4 ++-- .../Sections/Models/UpdateProviderDialog.tsx | 6 +++--- src/components/Settings/SettingsDialogue.tsx | 2 +- src/components/Settings/SettingsField.tsx | 12 ++++++------ 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/components/Settings/Sections/Models/AddModelDialog.tsx b/src/components/Settings/Sections/Models/AddModelDialog.tsx index 7df98de..009e1f2 100644 --- a/src/components/Settings/Sections/Models/AddModelDialog.tsx +++ b/src/components/Settings/Sections/Models/AddModelDialog.tsx @@ -97,7 +97,7 @@ const AddModel = ({ >
-

+

Add new {type === 'chat' ? 'chat' : 'embedding'} model

@@ -115,7 +115,7 @@ const AddModel = ({ setModelName(e.target.value)} - className="w-full rounded-lg border border-light-200 dark:border-dark-200 bg-light-primary dark:bg-dark-primary px-4 py-3 text-sm text-black/80 dark:text-white/80 placeholder:text-black/40 dark:placeholder:text-white/40 focus-visible:outline-none focus-visible:border-light-300 dark:focus-visible:border-dark-300 transition-colors disabled:cursor-not-allowed disabled:opacity-60" + className="w-full rounded-lg border border-light-200 dark:border-dark-200 bg-light-primary dark:bg-dark-primary px-4 py-3 text-[13px] text-black/80 dark:text-white/80 placeholder:text-black/40 dark:placeholder:text-white/40 focus-visible:outline-none focus-visible:border-light-300 dark:focus-visible:border-dark-300 transition-colors disabled:cursor-not-allowed disabled:opacity-60" placeholder="e.g., GPT-4" type="text" required @@ -128,7 +128,7 @@ const AddModel = ({ setModelKey(e.target.value)} - className="w-full rounded-lg border border-light-200 dark:border-dark-200 bg-light-primary dark:bg-dark-primary px-4 py-3 text-sm text-black/80 dark:text-white/80 placeholder:text-black/40 dark:placeholder:text-white/40 focus-visible:outline-none focus-visible:border-light-300 dark:focus-visible:border-dark-300 transition-colors disabled:cursor-not-allowed disabled:opacity-60" + className="w-full rounded-lg border border-light-200 dark:border-dark-200 bg-light-primary dark:bg-dark-primary px-4 py-3 text-[13px] text-black/80 dark:text-white/80 placeholder:text-black/40 dark:placeholder:text-white/40 focus-visible:outline-none focus-visible:border-light-300 dark:focus-visible:border-dark-300 transition-colors disabled:cursor-not-allowed disabled:opacity-60" placeholder="e.g., gpt-4" type="text" required @@ -140,7 +140,7 @@ const AddModel = ({