|
@@ -9,6 +9,8 @@ SEARXNG_UWSGI_USE_SOCKET="${SEARXNG_UWSGI_USE_SOCKET:-true}"
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
|
|
# shellcheck source=utils/lib_redis.sh
|
|
# shellcheck source=utils/lib_redis.sh
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib_redis.sh"
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib_redis.sh"
|
|
|
|
+# shellcheck source=utils/lib_valkey.sh
|
|
|
|
+source "$(dirname "${BASH_SOURCE[0]}")/lib_valkey.sh"
|
|
# shellcheck source=utils/brand.sh
|
|
# shellcheck source=utils/brand.sh
|
|
source "${REPO_ROOT}/utils/brand.sh"
|
|
source "${REPO_ROOT}/utils/brand.sh"
|
|
|
|
|
|
@@ -119,8 +121,8 @@ usage() {
|
|
# shellcheck disable=SC1117
|
|
# shellcheck disable=SC1117
|
|
cat <<EOF
|
|
cat <<EOF
|
|
usage:
|
|
usage:
|
|
- $(basename "$0") install [all|user|pyenv|settings|uwsgi|redis|nginx|apache|searxng-src|packages|buildhost]
|
|
|
|
- $(basename "$0") remove [all|user|pyenv|settings|uwsgi|redis|nginx|apache]
|
|
|
|
|
|
+ $(basename "$0") install [all|user|pyenv|settings|uwsgi|valkey|nginx|apache|searxng-src|packages|buildhost]
|
|
|
|
+ $(basename "$0") remove [all|user|pyenv|settings|uwsgi|valkey|nginx|apache]
|
|
$(basename "$0") instance [cmd|update|check|localtest|inspect]
|
|
$(basename "$0") instance [cmd|update|check|localtest|inspect]
|
|
install|remove:
|
|
install|remove:
|
|
all : complete (de-) installation of the SearXNG service
|
|
all : complete (de-) installation of the SearXNG service
|
|
@@ -128,9 +130,12 @@ install|remove:
|
|
pyenv : virtualenv (python) in ${SEARXNG_PYENV}
|
|
pyenv : virtualenv (python) in ${SEARXNG_PYENV}
|
|
settings : settings from ${SEARXNG_SETTINGS_PATH}
|
|
settings : settings from ${SEARXNG_SETTINGS_PATH}
|
|
uwsgi : SearXNG's uWSGI app ${SEARXNG_UWSGI_APP}
|
|
uwsgi : SearXNG's uWSGI app ${SEARXNG_UWSGI_APP}
|
|
- redis : build & install or remove a local redis server ${REDIS_HOME}/run/redis.sock
|
|
|
|
nginx : HTTP site ${NGINX_APPS_AVAILABLE}/${NGINX_SEARXNG_SITE}
|
|
nginx : HTTP site ${NGINX_APPS_AVAILABLE}/${NGINX_SEARXNG_SITE}
|
|
apache : HTTP site ${APACHE_SITES_AVAILABLE}/${APACHE_SEARXNG_SITE}
|
|
apache : HTTP site ${APACHE_SITES_AVAILABLE}/${APACHE_SEARXNG_SITE}
|
|
|
|
+install:
|
|
|
|
+ valkey : install a local valkey server
|
|
|
|
+remove:
|
|
|
|
+ redis : remove a local redis server ${REDIS_HOME}/run/redis.sock
|
|
install:
|
|
install:
|
|
searxng-src : clone ${GIT_URL} into ${SEARXNG_SRC}
|
|
searxng-src : clone ${GIT_URL} into ${SEARXNG_SRC}
|
|
packages : installs packages from OS package manager required by SearXNG
|
|
packages : installs packages from OS package manager required by SearXNG
|
|
@@ -194,7 +199,7 @@ main() {
|
|
buildhost) searxng.install.buildhost;;
|
|
buildhost) searxng.install.buildhost;;
|
|
nginx) searxng.nginx.install;;
|
|
nginx) searxng.nginx.install;;
|
|
apache) searxng.apache.install;;
|
|
apache) searxng.apache.install;;
|
|
- redis) searxng.install.redis;;
|
|
|
|
|
|
+ valkey) searxng.install.valkey;;
|
|
*) usage "$_usage"; exit 42;;
|
|
*) usage "$_usage"; exit 42;;
|
|
esac
|
|
esac
|
|
;;
|
|
;;
|
|
@@ -208,6 +213,7 @@ main() {
|
|
uwsgi) searxng.remove.uwsgi;;
|
|
uwsgi) searxng.remove.uwsgi;;
|
|
apache) searxng.apache.remove;;
|
|
apache) searxng.apache.remove;;
|
|
remove) searxng.nginx.remove;;
|
|
remove) searxng.nginx.remove;;
|
|
|
|
+ valkey) searxng.remove.valkey;;
|
|
redis) searxng.remove.redis;;
|
|
redis) searxng.remove.redis;;
|
|
*) usage "$_usage"; exit 42;;
|
|
*) usage "$_usage"; exit 42;;
|
|
esac
|
|
esac
|
|
@@ -259,7 +265,7 @@ main() {
|
|
searxng.install.all() {
|
|
searxng.install.all() {
|
|
rst_title "SearXNG installation" part
|
|
rst_title "SearXNG installation" part
|
|
|
|
|
|
- local redis_url
|
|
|
|
|
|
+ local valkey_url
|
|
|
|
|
|
rst_title "SearXNG"
|
|
rst_title "SearXNG"
|
|
searxng.install.packages
|
|
searxng.install.packages
|
|
@@ -277,8 +283,8 @@ searxng.install.all() {
|
|
searxng.install.uwsgi
|
|
searxng.install.uwsgi
|
|
wait_key
|
|
wait_key
|
|
|
|
|
|
- rst_title "Redis DB"
|
|
|
|
- searxng.install.redis.db
|
|
|
|
|
|
+ rst_title "Valkey DB"
|
|
|
|
+ searxng.install.valkey.db
|
|
|
|
|
|
rst_title "HTTP Server"
|
|
rst_title "HTTP Server"
|
|
searxng.install.http.site
|
|
searxng.install.http.site
|
|
@@ -289,77 +295,35 @@ searxng.install.all() {
|
|
fi
|
|
fi
|
|
}
|
|
}
|
|
|
|
|
|
-searxng.install.redis.db() {
|
|
|
|
- local redis_url
|
|
|
|
|
|
+searxng.install.valkey.db() {
|
|
|
|
+ local valkey_url
|
|
|
|
|
|
- redis_url=$(searxng.instance.get_setting redis.url)
|
|
|
|
- rst_para "\
|
|
|
|
-In your instance, redis DB connector is configured at:
|
|
|
|
|
|
+ valkey_url=$(searxng.instance.get_setting valkey.url)
|
|
|
|
|
|
- ${redis_url}
|
|
|
|
|
|
+ if [ "${valkey_url}" = "False" ]; then
|
|
|
|
+ rst_para "valkey DB connector is not configured in your instance"
|
|
|
|
+ else
|
|
|
|
+ rst_para "\
|
|
|
|
+In your instance, valkey DB connector is configured at:
|
|
|
|
+
|
|
|
|
+ ${valkey_url}
|
|
"
|
|
"
|
|
- if searxng.instance.exec python -c "from searx import redisdb; redisdb.initialize() or exit(42)"; then
|
|
|
|
- info_msg "SearXNG instance is able to connect redis DB."
|
|
|
|
- return
|
|
|
|
|
|
+ if searxng.instance.exec python -c "from searx import valkeydb; valkeydb.initialize() or exit(42)"; then
|
|
|
|
+ info_msg "SearXNG instance is able to connect valkey DB."
|
|
|
|
+ return
|
|
|
|
+ fi
|
|
fi
|
|
fi
|
|
- if ! [[ ${redis_url} = unix://${REDIS_HOME}/run/redis.sock* ]]; then
|
|
|
|
- err_msg "SearXNG instance can't connect redis DB / check redis & your settings"
|
|
|
|
|
|
+
|
|
|
|
+ if ! [[ ${valkey_url} = valkey://localhost:6379/* ]]; then
|
|
|
|
+ err_msg "SearXNG instance can't connect valkey DB / check valkey & your settings"
|
|
return
|
|
return
|
|
fi
|
|
fi
|
|
- rst_para ".. but this redis DB is not installed yet."
|
|
|
|
|
|
+ rst_para ".. but this valkey DB is not installed yet."
|
|
|
|
|
|
- case $DIST_ID-$DIST_VERS in
|
|
|
|
- fedora-*)
|
|
|
|
- # Fedora runs uWSGI in emperor-tyrant mode: in Tyrant mode the
|
|
|
|
- # Emperor will run the vassal using the UID/GID of the vassal
|
|
|
|
- # configuration file [1] (user and group of the app .ini file).
|
|
|
|
- #
|
|
|
|
- # HINT: without option ``emperor-tyrant-initgroups=true`` in
|
|
|
|
- # ``/etc/uwsgi.ini`` the process won't get the additional groups,
|
|
|
|
- # but this option is not available in 2.0.x branch [2][3] / on
|
|
|
|
- # fedora35 there is v2.0.20 installed --> no way to get additional
|
|
|
|
- # groups on fedora's tyrant mode.
|
|
|
|
- #
|
|
|
|
- # ERROR:searx.redisdb: [searxng (993)] can't connect redis DB ...
|
|
|
|
- # ERROR:searx.redisdb: Error 13 connecting to unix socket: /usr/local/searxng-redis/run/redis.sock. Permission denied.
|
|
|
|
- # ERROR:searx.plugins.limiter: init limiter DB failed!!!
|
|
|
|
- #
|
|
|
|
- # $ ps -aef | grep '/usr/sbin/uwsgi --ini searxng.ini'
|
|
|
|
- # searxng 93 92 0 12:43 ? 00:00:00 /usr/sbin/uwsgi --ini searxng.ini
|
|
|
|
- # searxng 186 93 0 12:44 ? 00:00:01 /usr/sbin/uwsgi --ini searxng.ini
|
|
|
|
- #
|
|
|
|
- # Additional groups:
|
|
|
|
- #
|
|
|
|
- # $ groups searxng
|
|
|
|
- # searxng : searxng searxng-redis
|
|
|
|
- #
|
|
|
|
- # Here you can see that the additional "Groups" of PID 186 are unset
|
|
|
|
- # (missing gid of searxng-redis)
|
|
|
|
- #
|
|
|
|
- # $ cat /proc/186/task/186/status
|
|
|
|
- # ...
|
|
|
|
- # Uid: 993 993 993 993
|
|
|
|
- # Gid: 993 993 993 993
|
|
|
|
- # FDSize: 128
|
|
|
|
- # Groups:
|
|
|
|
- # ...
|
|
|
|
- #
|
|
|
|
- # [1] https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting
|
|
|
|
- # [2] https://github.com/unbit/uwsgi/issues/2099
|
|
|
|
- # [3] https://github.com/unbit/uwsgi/pull/752
|
|
|
|
-
|
|
|
|
- rst_para "\
|
|
|
|
-Fedora uses emperor-tyrant mode / in this mode we had a lot of trouble with
|
|
|
|
-sockets and permissions of the vasals. We recommend to setup a redis DB
|
|
|
|
-and using redis:// TCP protocol in the settings.yml configuration."
|
|
|
|
- ;;
|
|
|
|
- *)
|
|
|
|
- if ask_yn "Do you want to install the redis DB now?" Yn; then
|
|
|
|
- searxng.install.redis
|
|
|
|
- uWSGI_restart "$SEARXNG_UWSGI_APP"
|
|
|
|
- fi
|
|
|
|
- ;;
|
|
|
|
- esac
|
|
|
|
|
|
+ if ask_yn "Do you want to install the valkey DB now?" Yn; then
|
|
|
|
+ searxng.install.valkey
|
|
|
|
+ uWSGI_restart "$SEARXNG_UWSGI_APP"
|
|
|
|
+ fi
|
|
}
|
|
}
|
|
|
|
|
|
searxng.install.http.site() {
|
|
searxng.install.http.site() {
|
|
@@ -380,16 +344,16 @@ searxng.install.http.site() {
|
|
}
|
|
}
|
|
|
|
|
|
searxng.remove.all() {
|
|
searxng.remove.all() {
|
|
- local redis_url
|
|
|
|
|
|
+ local valkey_url
|
|
|
|
|
|
rst_title "De-Install SearXNG (service)"
|
|
rst_title "De-Install SearXNG (service)"
|
|
if ! ask_yn "Do you really want to deinstall SearXNG?"; then
|
|
if ! ask_yn "Do you really want to deinstall SearXNG?"; then
|
|
return
|
|
return
|
|
fi
|
|
fi
|
|
|
|
|
|
- redis_url=$(searxng.instance.get_setting redis.url)
|
|
|
|
- if ! [[ ${redis_url} = unix://${REDIS_HOME}/run/redis.sock* ]]; then
|
|
|
|
- searxng.remove.redis
|
|
|
|
|
|
+ valkey_url=$(searxng.instance.get_setting valkey.url)
|
|
|
|
+ if ! [[ ${valkey_url} = unix://${VALKEY_HOME}/run/valkey.sock* ]]; then
|
|
|
|
+ searxng.remove.valkey
|
|
fi
|
|
fi
|
|
|
|
|
|
searxng.remove.uwsgi
|
|
searxng.remove.uwsgi
|
|
@@ -642,19 +606,18 @@ searxng.remove.uwsgi() {
|
|
uWSGI_remove_app "${SEARXNG_UWSGI_APP}"
|
|
uWSGI_remove_app "${SEARXNG_UWSGI_APP}"
|
|
}
|
|
}
|
|
|
|
|
|
-searxng.install.redis() {
|
|
|
|
- rst_title "SearXNG (install redis)"
|
|
|
|
- redis.build
|
|
|
|
- redis.install
|
|
|
|
- redis.addgrp "${SERVICE_USER}"
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
searxng.remove.redis() {
|
|
searxng.remove.redis() {
|
|
rst_title "SearXNG (remove redis)"
|
|
rst_title "SearXNG (remove redis)"
|
|
redis.rmgrp "${SERVICE_USER}"
|
|
redis.rmgrp "${SERVICE_USER}"
|
|
redis.remove
|
|
redis.remove
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+searxng.install.valkey() {
|
|
|
|
+ rst_title "SearXNG (install valkey)"
|
|
|
|
+ valkey.install
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
searxng.instance.localtest() {
|
|
searxng.instance.localtest() {
|
|
rst_title "Test SearXNG instance locally" section
|
|
rst_title "Test SearXNG instance locally" section
|
|
rst_para "Activate debug mode, start a minimal SearXNG "\
|
|
rst_para "Activate debug mode, start a minimal SearXNG "\
|
|
@@ -690,11 +653,11 @@ To install uWSGI use::
|
|
die 42 "SearXNG's uWSGI app not available"
|
|
die 42 "SearXNG's uWSGI app not available"
|
|
fi
|
|
fi
|
|
|
|
|
|
- if ! searxng.instance.exec python -c "from searx import redisdb; redisdb.initialize() or exit(42)"; then
|
|
|
|
|
|
+ if ! searxng.instance.exec python -c "from searx import valkeydb; valkeydb.initialize() or exit(42)"; then
|
|
rst_para "\
|
|
rst_para "\
|
|
-The configured redis DB is not available: If your server is public to the
|
|
|
|
|
|
+The configured valkey DB is not available: If your server is public to the
|
|
internet, you should setup a bot protection to block excessively bot queries.
|
|
internet, you should setup a bot protection to block excessively bot queries.
|
|
-Bot protection requires a redis DB. About bot protection visit the official
|
|
|
|
|
|
+Bot protection requires a valkey DB. About bot protection visit the official
|
|
SearXNG documentation and query for the word 'limiter'.
|
|
SearXNG documentation and query for the word 'limiter'.
|
|
"
|
|
"
|
|
fi
|
|
fi
|