From 4779217f02f3aff587d6d96a128607860d0d0000 Mon Sep 17 00:00:00 2001 From: p4u1 Date: Fri, 15 Dec 2023 19:22:50 +0100 Subject: [PATCH] feat: add fulltextsearch using elasticsearch --- .env.sample | 3 ++ README.md | 38 +++++++++++++++++++++++++ abra.sh | 10 +++++++ compose.fulltextsearch.yaml | 55 +++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 compose.fulltextsearch.yaml diff --git a/.env.sample b/.env.sample index 00da3fd..62d5ce3 100644 --- a/.env.sample +++ b/.env.sample @@ -62,3 +62,6 @@ DEFAULT_QUOTA="10 GB" # AUTHENTIK_DOMAIN=authentik.example.com # SECRET_AUTHENTIK_SECRET_VERSION=v1 # SECRET_AUTHENTIK_ID_VERSION=v1 + +#COMPOSE_FILE="$COMPOSE_FILE:compose.fulltextsearch.yml" +#SECRET_ELASTICSEARCH_PASSWORD_VERSION=v1 diff --git a/README.md b/README.md index 2f7d17a..f84e292 100644 --- a/README.md +++ b/README.md @@ -244,3 +244,41 @@ docker exec -u www-data $(docker ps -f name=foo_com_app -q) ./occ preview:pre-ge ``` This app will improve performance of image browsing at the cost of storage space. + +## Fulltextsearch using elasticsearch + +1. Uncomment the following lines in your env file: +``` +#COMPOSE_FILE="$COMPOSE_FILE:compose.fulltextsearch.yml" +#SECRET_ELASTICSEARCH_PASSWORD_VERSION=v1 +``` + +2. Generate the secret for elasticsearch: +```bash +abra app secret generate elasticsearch_password v1 +``` + +3. Deploy your app: +```bash +abra app deploy +``` + +4. Install the apps and configure them: +``` +abra app cmd app install_fulltextsearch +``` + +5. You might need to configure the files_fulltextsearch app. run this command to check its settings: +``` +abra app cmd app run_occ '"config:list files_fulltextsearch" +``` + +6. You can check if the nextcloud can connect to elasticsearch: +``` +abra app cmd app run_occ '"fulltextsearch:test"' +``` + +And you can populate the index manually and check if any errors occur: +``` +abra app cmd app run_occ '"fulltextsearch:index"' +``` diff --git a/abra.sh b/abra.sh index 4686f71..f2db206 100644 --- a/abra.sh +++ b/abra.sh @@ -70,6 +70,16 @@ install_collabora() { set_app_config richdocuments wopi_url "$COLLABORA_URL" } +install_fulltextsearch() { + install_apps fulltextsearch + install_apps fulltextsearch_elasticsearch + install_apps files_fulltextsearch + set_app_config fulltextsearch search_platform "OCA\\FullTextSearch_Elasticsearch\\Platform\\ElasticSearchPlatform" + set_app_config fulltextsearch_elasticsearch elastic_host "http://elastic:$(cat /run/secrets/elasticsearch_password)@elasticsearch:9200/" + set_app_config fulltextsearch_elasticsearch elastic_index "nextcloud" + set_app_config files_fulltextsearch files_local "1" +} + set_default_quota() { set_app_config files default_quota "$DEFAULT_QUOTA" } diff --git a/compose.fulltextsearch.yaml b/compose.fulltextsearch.yaml new file mode 100644 index 0000000..b898a4a --- /dev/null +++ b/compose.fulltextsearch.yaml @@ -0,0 +1,55 @@ +version: "3.8" + +services: + elasticsearch: + image: "docker.elastic.co/elasticsearch/elasticsearch:8.11.3" + environment: + - cluster.name=docker-cluster + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - discovery.type=single-node + # Disable authentication and ssl completely + # - xpack.security.enabled=false + # Use this to enable Basic Authentication: + - xpack.security.enabled=true + - xpack.security.http.ssl.enabled=false + - ELASTIC_PASSWORD_FILE=/var/run/secrets/elasticsearch_password + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - elasticsearch:/usr/share/elasticsearch/data + networks: + - internal + secrets: + - source: elasticsearch_password + uid: "1000" + gid: "1000" + mode: 0600 + + searchindexer: + image: nextcloud:27.1.3-fpm + volumes: + - nextcloud:/var/www/html/ + - nextapps:/var/www/html/custom_apps:cached + - nextdata:/var/www/html/data:cached + - nextconfig:/var/www/html/config:cached + - ${EXTRA_VOLUME} + networks: + - internal + entrypoint: su -p www-data -s /bin/sh -c '/var/www/html/occ fulltextsearch:live' + + # Add the secret to the app service so it is avaiable in the + # install_fulltextsearch command + app: + secrets: + - elasticsearch_password + +secrets: + elasticsearch_password: + external: true + name: ${STACK_NAME}_elasticsearch_password_${SECRET_ELASTICSEARCH_PASSWORD_VERSION} + +volumes: + elasticsearch: