diff --git a/README.md b/README.md index eea74ae7e..fbbb2c50c 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,12 @@ In your workdir: docker compose --profile frontend build docker compose --profile backend build ``` +If you want to build the application with Solr 9, you can use the `solr9` and `backend` profiles: + +``` +LSS_SOLR_HOST=solr-lss-dev-solr9 docker compose --profile backend --profile solr9 build +``` + ## Step 4: Build assets Build the CSS and JavaScript for `firebird-common` and `pt`: @@ -57,6 +63,12 @@ docker compose --profile frontend up docker compose --profile backend up ``` +If you want to build the application with Solr 9, you can use the `solr9` and `backend` profiles: + +``` +LSS_SOLR_HOST=solr-lss-dev-solr9 docker compose --profile backend --profile solr9 up +``` + In your browser: * catalog: `http://localhost:8080/Search/Home` diff --git a/apache/000-default.conf b/apache/000-default.conf index 66fef5891..ac7de405d 100644 --- a/apache/000-default.conf +++ b/apache/000-default.conf @@ -26,6 +26,13 @@ Listen 8080 SetEnv PTSEARCH_SOLR http://solr-ptsearch:8983/solr/ptsearch SetEnv PTSEARCH_SOLR_BASIC_AUTH "" + +# docker-compose.yml/apache.yml set the variables LSS_SOLR_ENGINE_URL_A/LSS_SOLR_ENGINE_URL_B with +# solr URL. We should add these variables here so the CGI process can access them. +# Use PassEnv to pass the environment variables to the CGI process so we can manage both Solr 6 and Solr 9 URLs + PassEnv LSS_SOLR_ENGINE_URL_A + PassEnv LSS_SOLR_ENGINE_URL_B + PassEnv LSS_SOLR_BASIC_AUTH Options Indexes FollowSymLinks diff --git a/common/docker/apache.yml b/common/docker/apache.yml index 2b6be167b..f71a6a365 100644 --- a/common/docker/apache.yml +++ b/common/docker/apache.yml @@ -19,6 +19,10 @@ services: environment: - SDRROOT=/htapps/babel - SDRDATAROOT=/sdr1 + - LSS_SOLR_ENGINE_URL_A=http://${LSS_SOLR_HOST:-solr-lss-dev}:8983/solr/core-x + - LSS_SOLR_ENGINE_URL_B=http://${LSS_SOLR_HOST:-solr-lss-dev}:8983/solr/core-y + # This is the basic auth for Solr. The default 'admin:solrRocks' credential + - LSS_SOLR_BASIC_AUTH=YWRtaW46c29sclJvY2tz healthcheck: interval: 5s timeout: 10s diff --git a/common/docker/perl.yml b/common/docker/perl.yml index 4fb2c2a32..ab95ba006 100644 --- a/common/docker/perl.yml +++ b/common/docker/perl.yml @@ -16,6 +16,10 @@ services: - MARIADB_USER=ht_web - HTDEV=test - PERL5LIB=/htapps/babel/mdp-lib + - LSS_SOLR_ENGINE_URL_A=http://${LSS_SOLR_HOST:-solr-lss-dev}:8983/solr/core-x + - LSS_SOLR_ENGINE_URL_B=http://${LSS_SOLR_HOST:-solr-lss-dev}:8983/solr/core-y + # This is the basic auth for Solr. The default 'admin:solrRocks' credential + - LSS_SOLR_BASIC_AUTH=YWRtaW46c29sclJvY2tz depends_on: mysql-sdr: condition: service_healthy diff --git a/common/docker/solr.yml b/common/docker/solr.yml index 9ed3af339..22c9a79fd 100644 --- a/common/docker/solr.yml +++ b/common/docker/solr.yml @@ -12,18 +12,56 @@ services: # This is another core service image: solr:6.6.6-alpine ports: - - "8983:8983" + - "8983:8983" user: ${CURRENT_USER} volumes: - - ${BABEL_HOME}/lss_solr_configs/solr6_standalone/lss-dev/core-x:/opt/solr/server/solr/core-x - - ${BABEL_HOME}/lss_solr_configs/solr6_standalone/lss-dev/core-y:/opt/solr/server/solr/core-y - - ${BABEL_HOME}/lss_solr_configs/solr6_standalone:/opt/lss_solr_configs - - ${BABEL_HOME}/lss_solr_configs/solr6_standalone/lib:/opt/solr/server/solr/lib - - ${BABEL_HOME}/logs/solr:/opt/solr/server/logs + - ${BABEL_HOME}/lss_solr_configs/solr6_standalone/lss-dev/core-x:/opt/solr/server/solr/core-x + - ${BABEL_HOME}/lss_solr_configs/solr6_standalone/lss-dev/core-y:/opt/solr/server/solr/core-y + - ${BABEL_HOME}/lss_solr_configs/solr6_standalone:/opt/lss_solr_configs + - ${BABEL_HOME}/lss_solr_configs/solr6_standalone/lib:/opt/solr/server/solr/lib + - ${BABEL_HOME}/logs/solr:/opt/solr/server/logs healthcheck: <<: *healthcheck-defaults test: "ping -c 1 solr-lss-dev:8983" - + solr-lss-dev-solr-solr9: + image: ghcr.io/hathitrust/full-text-search-cloud:solr9-shards-docker + container_name: solr-lss-dev-solr9 + ports: + - "8981:8983" + environment: + - ZK_HOST=zoo1:2181 + - SOLR_OPTS=-XX:-UseLargePages + - SOLR_MODULES=analysis-extras + volumes: + - solr1_data:/var/solr + command: [ "sh", "-c", "solr-foreground & sleep 150 && export SOLR_AUTHENTICATION_OPTS=-Dbasicauth=admin:solrRocks && solr create_collection -d /opt/solr/core-x -c core-x -shards 1 -replicationFactor 1 -p 8983 && wait" ] + healthcheck: + <<: *healthcheck-defaults + test: [ "CMD-SHELL", "curl -s -u admin:solrRocks 'http://solr-lss-dev-solr9:8983/solr/admin/collections?action=CLUSTERSTATUS&collection=core-x' | grep -q '\"state\":\"active\"'" ] + interval: 30s + start_period: 30s + timeout: 30s + retries: 10 + zoo1: # Zookeeper run in standalone mode for development and testing purposes. In production, we would use a Zookeeper ensemble for high availability. + image: zookeeper:3.9.0 + container_name: zoo1 + restart: always + hostname: zoo1 + ports: + - 2181:2181 + environment: + ZOO_MY_ID: 1 + ZOO_SERVERS: server.1=zoo1:2888:3888;2181 + ZOO_4LW_COMMANDS_WHITELIST: mntr,conf,ruok + volumes: + - zoo1_data:/data + healthcheck: + <<: *healthcheck-defaults + test: [ "CMD", "nc", "-z", "-w", "2", "localhost", "2181" ] # Check if ZooKeeper is listening on port 2181 + interval: 30s + start_period: 30s + timeout: 30s + retries: 10 solr-ptsearch: # This is a core service build: ../../ptsearch-solr #TODO: Build from image in ghcr.io @@ -35,3 +73,6 @@ services: healthcheck: <<: *healthcheck-defaults test: "curl -f --retry-connrefused http://solr-ptsearch:8983/solr/ptsearch/admin/ping" +volumes: + solr1_data: null + zoo1_data: null \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 67a477254..d47ece9d8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -98,7 +98,7 @@ services: - ${BABEL_HOME}/catalog:/app working_dir: /app command: composer install - + # This is Solr 6 solr-lss-dev: extends: file: common/docker/solr.yml @@ -107,6 +107,23 @@ services: - backend - stage_item + zoo1: + extends: + file: common/docker/solr.yml + service: zoo1 + profiles: + - solr9 + + solr-lss-dev-solr9: + extends: + file: common/docker/solr.yml + service: solr-lss-dev-solr-solr9 + profiles: + - solr9 + depends_on: + zoo1: + condition: service_healthy + solr-ptsearch: extends: file: common/docker/solr.yml @@ -155,3 +172,5 @@ services: volumes: gem_cache: + solr1_data: + zoo1_data: diff --git a/ls/lib/Config/docker-local.conf b/ls/lib/Config/docker-local.conf index cde40d830..71433ef7a 100644 --- a/ls/lib/Config/docker-local.conf +++ b/ls/lib/Config/docker-local.conf @@ -1,5 +1,6 @@ num_shards_list = 1 -mbooks_solr_engines = http://solr-lss-dev:8983/solr/core-x -A_mbooks_solr_engines = http://solr-lss-dev:8983/solr/core-x -B_mbooks_solr_engines = http://solr-lss-dev:8983/solr/core-y +mbooks_solr_engines = ENV[LSS_SOLR_ENGINE_URL_A] +A_mbooks_solr_engines = ENV[LSS_SOLR_ENGINE_URL_A] +B_mbooks_solr_engines = ENV[LSS_SOLR_ENGINE_URL_B] +solr_basic_auth_token = ENV[LSS_SOLR_BASIC_AUTH] # debug_enabled = 1 diff --git a/ls/lib/LS/Searcher/Facets.pm b/ls/lib/LS/Searcher/Facets.pm index 8866007f0..528841d13 100644 --- a/ls/lib/LS/Searcher/Facets.pm +++ b/ls/lib/LS/Searcher/Facets.pm @@ -57,7 +57,7 @@ sub __Solr_result { my ($C, $query_string, $rs, $AB) = @_; my $url = $self->__get_Solr_select_url($C, $query_string, $AB); - my $req = $self->__get_request_object($url); + my $req = $self->__get_request_object($url, $C); my $ua = $self->__create_user_agent(); if (DEBUG('query')) { diff --git a/mdp-lib/Institutions.pm b/mdp-lib/Institutions.pm index 189da5300..662f5179b 100644 --- a/mdp-lib/Institutions.pm +++ b/mdp-lib/Institutions.pm @@ -329,7 +329,7 @@ sub get_idp_list { $seen{$$hash_ref{inst_id}} = 1; my $host = $ENV{'HTTP_HOST'} || 'localhost'; - my $idp_url = $hash_ref->{template}; + my $idp_url = $hash_ref->{template} // ''; $idp_url =~ s,___HOST___,$host,; $idp_url =~ s,&,&,;