|
@@ -0,0 +1,166 @@
|
|
|
+
|
|
|
+
|
|
|
+set -eu
|
|
|
+
|
|
|
+check_file() {
|
|
|
+ local target="$1"
|
|
|
+
|
|
|
+ if [ ! -f "$target" ]; then
|
|
|
+ cat <<EOF
|
|
|
+!!!
|
|
|
+!!! ERROR
|
|
|
+!!! "$target" is not a valid file, exiting...
|
|
|
+!!!
|
|
|
+EOF
|
|
|
+ exit 127
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+check_directory() {
|
|
|
+ local target="$1"
|
|
|
+
|
|
|
+ if [ ! -d "$target" ]; then
|
|
|
+ cat <<EOF
|
|
|
+!!!
|
|
|
+!!! ERROR
|
|
|
+!!! "$target" is not a valid directory, exiting...
|
|
|
+!!!
|
|
|
+EOF
|
|
|
+ exit 127
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+setup_ownership() {
|
|
|
+ local target="$1"
|
|
|
+ local type="$2"
|
|
|
+
|
|
|
+ case "$type" in
|
|
|
+ file | directory) ;;
|
|
|
+ *)
|
|
|
+ cat <<EOF
|
|
|
+!!!
|
|
|
+!!! ERROR
|
|
|
+!!! "$type" is not a valid type, exiting...
|
|
|
+!!!
|
|
|
+EOF
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+
|
|
|
+ if [ "$(stat -c %U:%G "$target")" != "searxng:searxng" ]; then
|
|
|
+ if [ "$(id -u)" -eq 0 ]; then
|
|
|
+ chown -R searxng:searxng "$target"
|
|
|
+ else
|
|
|
+ cat <<EOF
|
|
|
+!!!
|
|
|
+!!! WARNING
|
|
|
+!!! "$target" $type is not owned by "searxng"
|
|
|
+!!! This may cause issues when running SearXNG
|
|
|
+!!!
|
|
|
+!!! Run the container as root to fix this issue automatically
|
|
|
+!!! Alternatively, you can chown the $type manually:
|
|
|
+!!! $ chown -R searxng:searxng "$target"
|
|
|
+!!!
|
|
|
+EOF
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+setup_uwsgi() {
|
|
|
+ local timestamp
|
|
|
+
|
|
|
+ timestamp=$(stat -c %Y "$UWSGI_SETTINGS_PATH")
|
|
|
+
|
|
|
+ sed -i \
|
|
|
+ -e "s|workers = .*|workers = ${UWSGI_WORKERS:-%k}|g" \
|
|
|
+ -e "s|threads = .*|threads = ${UWSGI_THREADS:-4}|g" \
|
|
|
+ "$UWSGI_SETTINGS_PATH"
|
|
|
+
|
|
|
+
|
|
|
+ touch -c -d "@$timestamp" "$UWSGI_SETTINGS_PATH"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+setup_searxng() {
|
|
|
+ local timestamp
|
|
|
+
|
|
|
+ timestamp=$(stat -c %Y "$SEARXNG_SETTINGS_PATH")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ export BASE_URL="${BASE_URL%/}/"
|
|
|
+
|
|
|
+ sed -i \
|
|
|
+ -e "s|base_url: false|base_url: ${BASE_URL:-false}|g" \
|
|
|
+ -e "s/instance_name: \"SearXNG\"/instance_name: \"${INSTANCE_NAME:-SearXNG}\"/g" \
|
|
|
+ -e "s/autocomplete: \"\"/autocomplete: \"${AUTOCOMPLETE:-}\"/g" \
|
|
|
+ -e "s/ultrasecretkey/$(head -c 24 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9')/g" \
|
|
|
+ "$SEARXNG_SETTINGS_PATH"
|
|
|
+
|
|
|
+
|
|
|
+ touch -c -d "@$timestamp" "$SEARXNG_SETTINGS_PATH"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+volume_handler() {
|
|
|
+ local target="$1"
|
|
|
+
|
|
|
+
|
|
|
+ check_directory "$target"
|
|
|
+ setup_ownership "$target" "directory"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+config_handler() {
|
|
|
+ local target="$1"
|
|
|
+ local template="$2"
|
|
|
+ local new_template_target="$target.new"
|
|
|
+
|
|
|
+
|
|
|
+ if [ -f "$target" ]; then
|
|
|
+ setup_ownership "$target" "file"
|
|
|
+
|
|
|
+ if [ "$template" -nt "$target" ]; then
|
|
|
+ cp -pfT "$template" "$new_template_target"
|
|
|
+
|
|
|
+ cat <<EOF
|
|
|
+...
|
|
|
+... INFORMATION
|
|
|
+... Update available for "$target"
|
|
|
+... It is recommended to update the configuration file to ensure proper functionality
|
|
|
+...
|
|
|
+... New version placed at "$new_template_target"
|
|
|
+... Please review and merge changes
|
|
|
+...
|
|
|
+EOF
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ cat <<EOF
|
|
|
+...
|
|
|
+... INFORMATION
|
|
|
+... "$target" does not exist, creating from template...
|
|
|
+...
|
|
|
+EOF
|
|
|
+ cp -pfT "$template" "$target"
|
|
|
+ fi
|
|
|
+
|
|
|
+
|
|
|
+ check_file "$target"
|
|
|
+}
|
|
|
+
|
|
|
+echo "SearXNG $SEARXNG_VERSION"
|
|
|
+
|
|
|
+
|
|
|
+volume_handler "$CONFIG_PATH"
|
|
|
+volume_handler "$DATA_PATH"
|
|
|
+
|
|
|
+
|
|
|
+config_handler "$UWSGI_SETTINGS_PATH" "/usr/local/searxng/.template/uwsgi.ini"
|
|
|
+config_handler "$SEARXNG_SETTINGS_PATH" "/usr/local/searxng/searx/settings.yml"
|
|
|
+
|
|
|
+
|
|
|
+setup_uwsgi
|
|
|
+setup_searxng
|
|
|
+
|
|
|
+exec /usr/local/searxng/venv/bin/uwsgi --http-socket "$BIND_ADDRESS" "$UWSGI_SETTINGS_PATH"
|