diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index b7979e589653..d3c00c2b8863 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -180,7 +180,7 @@ jobs: # Get Metadata for docker_build_test step below - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-test' image id: meta_build_test - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: dspace/dspace tags: ${{ env.IMAGE_TAGS }} diff --git a/Dockerfile b/Dockerfile index 9c32ecb50cd4..9d89710fe11c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ ARG JDK_VERSION=11 # Step 1 - Run Maven Build -FROM dspace/dspace-dependencies:dspace-7_x as build +FROM dspace/dspace-dependencies:dspace-7_x AS build ARG TARGET_DIR=dspace-installer WORKDIR /app # The dspace-installer directory will be written to /install @@ -20,12 +20,15 @@ USER dspace ADD --chown=dspace . /app/ # Build DSpace (note: this build doesn't include the optional, deprecated "dspace-rest" webapp) # Copy the dspace-installer directory to /install. Clean up the build to keep the docker image small -RUN mvn --no-transfer-progress package && \ +# Maven flags here ensure that we skip building test environment and skip all code verification checks. +# These flags speed up this compilation as much as reasonably possible. +ENV MAVEN_FLAGS="-P-test-environment -Denforcer.skip=true -Dcheckstyle.skip=true -Dlicense.skip=true -Dxml.skip=true" +RUN mvn --no-transfer-progress package ${MAVEN_FLAGS} && \ mv /app/dspace/target/${TARGET_DIR}/* /install && \ mvn clean # Step 2 - Run Ant Deploy -FROM openjdk:${JDK_VERSION}-slim as ant_build +FROM eclipse-temurin:${JDK_VERSION} AS ant_build ARG TARGET_DIR=dspace-installer # COPY the /install directory from 'build' container to /dspace-src in this container COPY --from=build /install /dspace-src diff --git a/Dockerfile.cli b/Dockerfile.cli index 62e83b79ef02..8a69b32e2dc6 100644 --- a/Dockerfile.cli +++ b/Dockerfile.cli @@ -8,7 +8,7 @@ ARG JDK_VERSION=11 # Step 1 - Run Maven Build -FROM dspace/dspace-dependencies:dspace-7_x as build +FROM dspace/dspace-dependencies:dspace-7_x AS build ARG TARGET_DIR=dspace-installer WORKDIR /app # The dspace-installer directory will be written to /install @@ -24,7 +24,7 @@ RUN mvn --no-transfer-progress package && \ mvn clean # Step 2 - Run Ant Deploy -FROM openjdk:${JDK_VERSION}-slim as ant_build +FROM eclipse-temurin:${JDK_VERSION} AS ant_build ARG TARGET_DIR=dspace-installer # COPY the /install directory from 'build' container to /dspace-src in this container COPY --from=build /install /dspace-src @@ -33,9 +33,9 @@ WORKDIR /dspace-src ENV ANT_VERSION 1.10.13 ENV ANT_HOME /tmp/ant-$ANT_VERSION ENV PATH $ANT_HOME/bin:$PATH -# Need wget to install ant, and unzip for managing AIPs +# Need wget to install ant RUN apt-get update \ - && apt-get install -y --no-install-recommends wget unzip \ + && apt-get install -y --no-install-recommends wget \ && apt-get purge -y --auto-remove \ && rm -rf /var/lib/apt/lists/* # Download and install 'ant' @@ -45,10 +45,15 @@ RUN mkdir $ANT_HOME && \ RUN ant init_installation update_configs update_code # Step 3 - Run jdk -FROM openjdk:${JDK_VERSION} +FROM eclipse-temurin:${JDK_VERSION} # NOTE: DSPACE_INSTALL must align with the "dspace.dir" default configuration. ENV DSPACE_INSTALL=/dspace # Copy the /dspace directory from 'ant_build' container to /dspace in this container COPY --from=ant_build /dspace $DSPACE_INSTALL # Give java extra memory (1GB) ENV JAVA_OPTS=-Xmx1000m +# Install unzip for AIPs +RUN apt-get update \ + && apt-get install -y --no-install-recommends unzip \ + && apt-get purge -y --auto-remove \ + && rm -rf /var/lib/apt/lists/* diff --git a/Dockerfile.dependencies b/Dockerfile.dependencies index a55b323339dc..123206ea5887 100644 --- a/Dockerfile.dependencies +++ b/Dockerfile.dependencies @@ -7,7 +7,7 @@ ARG JDK_VERSION=11 # Step 1 - Run Maven Build -FROM maven:3-openjdk-${JDK_VERSION}-slim as build +FROM maven:3-eclipse-temurin-${JDK_VERSION} AS build ARG TARGET_DIR=dspace-installer WORKDIR /app # Create the 'dspace' user account & home directory @@ -15,11 +15,6 @@ RUN useradd dspace \ && mkdir -p /home/dspace \ && chown -Rv dspace: /home/dspace RUN chown -Rv dspace: /app -# Need git to support buildnumber-maven-plugin, which lets us know what version of DSpace is being run. -RUN apt-get update \ - && apt-get install -y --no-install-recommends git \ - && apt-get purge -y --auto-remove \ - && rm -rf /var/lib/apt/lists/* # Switch to dspace user & run below commands as that user USER dspace @@ -28,7 +23,10 @@ USER dspace ADD --chown=dspace . /app/ # Trigger the installation of all maven dependencies (hide download progress messages) -RUN mvn --no-transfer-progress package +# Maven flags here ensure that we skip final assembly, skip building test environment and skip all code verification checks. +# These flags speed up this installation as much as reasonably possible. +ENV MAVEN_FLAGS="-P-assembly -P-test-environment -Denforcer.skip=true -Dcheckstyle.skip=true -Dlicense.skip=true -Dxml.skip=true" +RUN mvn --no-transfer-progress install ${MAVEN_FLAGS} # Clear the contents of the /app directory (including all maven builds), so no artifacts remain. # This ensures when dspace:dspace is built, it will use the Maven local cache (~/.m2) for dependencies diff --git a/Dockerfile.test b/Dockerfile.test index 4e9b2b5b4343..031394ad256c 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -10,7 +10,7 @@ ARG JDK_VERSION=11 # Step 1 - Run Maven Build -FROM dspace/dspace-dependencies:dspace-7_x as build +FROM dspace/dspace-dependencies:dspace-7_x AS build ARG TARGET_DIR=dspace-installer WORKDIR /app # The dspace-installer directory will be written to /install @@ -27,7 +27,7 @@ RUN mvn --no-transfer-progress package -Pdspace-rest && \ mvn clean # Step 2 - Run Ant Deploy -FROM openjdk:${JDK_VERSION}-slim as ant_build +FROM eclipse-temurin:${JDK_VERSION} AS ant_build ARG TARGET_DIR=dspace-installer # COPY the /install directory from 'build' container to /dspace-src in this container COPY --from=build /install /dspace-src diff --git a/docker-compose-cli.yml b/docker-compose-cli.yml index 9c66fed6835b..6bbf9f66d97c 100644 --- a/docker-compose-cli.yml +++ b/docker-compose-cli.yml @@ -1,8 +1,12 @@ -version: "3.7" - +networks: + # Default to using network named 'dspacenet' from docker-compose.yml. + # Its full name will be prepended with the project name (e.g. "-p d7" means it will be named "d7_dspacenet") + default: + name: ${COMPOSE_PROJECT_NAME}_dspacenet + external: true services: dspace-cli: - image: "${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-dspace-7_x}" + image: "${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-dspace-cris-7_x}" container_name: dspace-cli build: context: . @@ -24,15 +28,13 @@ services: # Mount local [src]/dspace/config/ to container. This syncs your local configs with container # NOTE: Environment variables specified above will OVERRIDE any configs in local.cfg or dspace.cfg - ./dspace/config:/dspace/config + # Mount local [src]/dspace/etc/ to container. This syncs local etc files with container. + # These etc files are used to initialize DSpace-CRIS layout + - ./dspace/etc:/dspace/etc entrypoint: /dspace/bin/dspace command: help - networks: - - dspacenet tty: true stdin_open: true volumes: assetstore: - -networks: - dspacenet: diff --git a/docker-compose.yml b/docker-compose.yml index 6c1615040722..ebd4ce649a6e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: '3.7' networks: dspacenet: ipam: @@ -20,7 +19,7 @@ services: # Uncomment to set a non-default value for dspace.server.url or dspace.ui.url # dspace__P__server__P__url: http://localhost:8080/server # dspace__P__ui__P__url: http://localhost:4000 - dspace__P__name: 'DSpace Started with Docker Compose' + dspace__P__name: 'DSpace-CRIS Started with Docker Compose' # db.url: Ensure we are using the 'dspacedb' image for our database db__P__url: 'jdbc:postgresql://dspacedb:5432/dspace' # solr.server: Ensure we are using the 'dspacesolr' image for Solr @@ -29,14 +28,14 @@ services: # from the host machine. This IP range MUST correspond to the 'dspacenet' subnet defined above. proxies__P__trusted__P__ipranges: '172.23.0' LOGGING_CONFIG: /dspace/config/log4j2-container.xml - image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}" + image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-cris-7_x-test}" build: context: . dockerfile: Dockerfile.test depends_on: - dspacedb networks: - dspacenet: + - dspacenet ports: - published: 8080 target: 8080 @@ -52,22 +51,30 @@ services: # Mount local [src]/dspace/config/ to container. This syncs your local configs with container # NOTE: Environment variables specified above will OVERRIDE any configs in local.cfg or dspace.cfg - ./dspace/config:/dspace/config + # Mount local [src]/dspace/etc/ to container. This syncs local etc files with container. + # These etc files are used to initialize DSpace-CRIS layout + - ./dspace/etc:/dspace/etc # Ensure that the database is ready BEFORE starting tomcat # 1. While a TCP connection to dspacedb port 5432 is not available, continue to sleep # 2. Then, run database migration to init database tables - # 3. Finally, start Tomcat + # 3. Then, create the default Entity Types defined in cris.cfg + # 4. Then, create custom DSpace relationship types defined in correction & hide-sort configs + # 5. Finally, start Tomcat entrypoint: - /bin/bash - '-c' - | while (! /dev/null 2>&1; do sleep 1; done; /dspace/bin/dspace database migrate + /dspace/bin/dspace dsrun org.dspace.app.util.InitializeEntityTypesOnly -d + /dspace/bin/dspace dsrun org.dspace.app.util.InitializeEntities -f /dspace/config/entities/correction-relationship-types.xml + /dspace/bin/dspace dsrun org.dspace.app.util.InitializeEntities -f /dspace/config/entities/hide-sort-relationship-types.xml catalina.sh run # DSpace PostgreSQL database container dspacedb: container_name: dspacedb # Uses a custom Postgres image with pgcrypto installed - image: "${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-dspace-7_x}" + image: "${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-dspace-cris-7_x}" build: # Must build out of subdirectory to have access to install script for pgcrypto context: ./dspace/src/main/docker/dspace-postgres-pgcrypto/ @@ -87,10 +94,12 @@ services: # DSpace Solr container dspacesolr: container_name: dspacesolr - image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}" + image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-cris-7_x}" build: - context: . - dockerfile: ./dspace/src/main/docker/dspace-solr/Dockerfile + context: ./dspace/src/main/docker/dspace-solr/ + # Provide path to Solr configs necessary to build Docker image + additional_contexts: + solrconfigs: ./dspace/solr/ args: SOLR_VERSION: "${SOLR_VER:-8.11}" networks: @@ -113,14 +122,22 @@ services: - '-c' - | init-var-solr + precreate-core audit /opt/solr/server/solr/configsets/audit + cp -r /opt/solr/server/solr/configsets/audit/* audit precreate-core authority /opt/solr/server/solr/configsets/authority cp -r /opt/solr/server/solr/configsets/authority/* authority + precreate-core dedup /opt/solr/server/solr/configsets/dedup + cp -r /opt/solr/server/solr/configsets/dedup/* dedup + precreate-core nbevent /opt/solr/server/solr/configsets/nbevent + cp -r /opt/solr/server/solr/configsets/nbevent/* nbevent precreate-core oai /opt/solr/server/solr/configsets/oai cp -r /opt/solr/server/solr/configsets/oai/* oai precreate-core search /opt/solr/server/solr/configsets/search cp -r /opt/solr/server/solr/configsets/search/* search precreate-core statistics /opt/solr/server/solr/configsets/statistics cp -r /opt/solr/server/solr/configsets/statistics/* statistics + precreate-core suggestion /opt/solr/server/solr/configsets/suggestion + cp -r /opt/solr/server/solr/configsets/suggestion/* suggestion exec solr -f volumes: assetstore: diff --git a/dspace/src/main/docker-compose/README.md b/dspace/src/main/docker-compose/README.md index 35a6e6055433..f45cdb77e1fb 100644 --- a/dspace/src/main/docker-compose/README.md +++ b/dspace/src/main/docker-compose/README.md @@ -51,33 +51,49 @@ Documentation for all Dockerfiles used by these compose scripts can be found in Documentation for all Dockerfiles used by these compose scripts can be found in the ["docker" folder README](../docker/README.md) +## To build DSpace-CRIS images using code in your branch +``` +docker compose -f docker-compose.yml -f docker-compose-cli.yml build +``` -## To refresh / pull DSpace images from Dockerhub +OPTIONALLY, you can build DSpace images using a different JDK_VERSION like this: ``` -docker-compose -f docker-compose.yml -f docker-compose-cli.yml pull +docker compose -f docker-compose.yml -f docker-compose-cli.yml build --build-arg JDK_VERSION=17 ``` +Default is Java 11, but other LTS releases (e.g. 17) are also supported. + +## Install/Run DSpace-CRIS 7 REST from your current branch -## To build DSpace images using code in your branch +First, start up the containers ``` -docker-compose -f docker-compose.yml -f docker-compose-cli.yml build +docker compose -p dcris7 up -d ``` -OPTIONALLY, you can build DSpace images using a different JDK_VERSION like this: +Then, you will need to create an Administrator account to initialize the DSpace-CRIS community/collection structure. +This example creates an Admin "dspacedemo+admin@gmail.com" with a password of "dspace": ``` -docker-compose -f docker-compose.yml -f docker-compose-cli.yml build --build-arg JDK_VERSION=17 +docker compose -p dcris7 -f docker-compose-cli.yml run --rm dspace-cli create-administrator -e dspacedemo+admin@gmail.com -f Demo -l Administrator -p dspace -c en ``` -Default is Java 11, but other LTS releases (e.g. 17) are also supported. -## Run DSpace 7 REST from your current branch +Next, create the sample Community/Collection structure (using that Admin account) +``` +docker compose -p dcris7 -f docker-compose-cli.yml run --rm dspace-cli dsrun org.dspace.administer.StructBuilder -e dspacedemo+admin@gmail.com -f /dspace/config/sample-structure.xml -o - ``` -docker-compose -p d7 up -d + +Finally, initialize the layout using the provided XLS config file ``` +docker compose -p dcris7 -f docker-compose-cli.yml run --rm dspace-cli cris-layout-tool -f /dspace/etc/conftool/cris-layout-configuration.xls +``` + +## Run DSpace-CRIS 7 REST and Angular from your branch -## Run DSpace 7 REST and Angular from your branch +NOTE: If this is your first time running the DSpace-CRIS backend, make sure to follow the "Install/Run" instructions +above *first*. ``` -docker-compose -p d7 -f docker-compose.yml -f dspace/src/main/docker-compose/docker-compose-angular.yml up -d +docker compose -p dcris7 -f docker-compose.yml -f dspace/src/main/docker-compose/docker-compose-angular.yml up -d ``` +NOTE: This starts the UI in development mode. It will take a few minutes to see the UI as the Angular code needs to be compiled. ## Run DSpace REST and DSpace Angular from local branches diff --git a/dspace/src/main/docker-compose/cli.assetstore.yml b/dspace/src/main/docker-compose/cli.assetstore.yml index d6a6a4395f4e..6563aa081eb1 100644 --- a/dspace/src/main/docker-compose/cli.assetstore.yml +++ b/dspace/src/main/docker-compose/cli.assetstore.yml @@ -6,8 +6,6 @@ # http://www.dspace.org/license/ # -version: "3.7" - services: dspace-cli: environment: diff --git a/dspace/src/main/docker-compose/cli.ingest.yml b/dspace/src/main/docker-compose/cli.ingest.yml index d22a235d4fdd..6172147f1955 100644 --- a/dspace/src/main/docker-compose/cli.ingest.yml +++ b/dspace/src/main/docker-compose/cli.ingest.yml @@ -6,8 +6,6 @@ # http://www.dspace.org/license/ # -version: "3.7" - services: dspace-cli: environment: diff --git a/dspace/src/main/docker-compose/db.entities.yml b/dspace/src/main/docker-compose/db.entities.yml index 32c54a5d0bd1..2427ba5bacca 100644 --- a/dspace/src/main/docker-compose/db.entities.yml +++ b/dspace/src/main/docker-compose/db.entities.yml @@ -6,11 +6,9 @@ # http://www.dspace.org/license/ # -version: "3.7" - services: dspacedb: - image: dspace/dspace-postgres-pgcrypto:dspace-7_x-loadsql + image: dspace/dspace-postgres-pgcrypto:dspace-cris-7_x-loadsql environment: # This SQL is available from https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data - LOADSQL=https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/dspace7-entities-data.sql @@ -18,27 +16,12 @@ services: ### OVERRIDE default 'entrypoint' in 'docker-compose.yml #### # Ensure that the database is ready BEFORE starting tomcat # 1. While a TCP connection to dspacedb port 5432 is not available, continue to sleep - # 2. Then, run database migration to init database tables - # 3. (Custom for Entities) enable Entity-specific collection submission mappings in item-submission.xml - # This 'sed' command inserts the sample configurations specific to the Entities data set, see: - # https://github.com/DSpace/DSpace/blob/main/dspace/config/item-submission.xml#L36-L49 - # 4. Finally, start Tomcat + # 2. Then, run migration latest version of database tables (run with "ignored" in case this SQL data is outdated) + # 3. Finally, start Tomcat entrypoint: - /bin/bash - '-c' - | while (! /dev/null 2>&1; do sleep 1; done; - /dspace/bin/dspace database migrate - sed -i '/name-map collection-handle="default".*/a \\n \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - ' /dspace/config/item-submission.xml + /dspace/bin/dspace database migrate ignored catalina.sh run diff --git a/dspace/src/main/docker-compose/db.restore.yml b/dspace/src/main/docker-compose/db.restore.yml index fc2f30b9d8e0..dcad55c71a9d 100644 --- a/dspace/src/main/docker-compose/db.restore.yml +++ b/dspace/src/main/docker-compose/db.restore.yml @@ -6,15 +6,13 @@ # http://www.dspace.org/license/ # -version: "3.7" - # # Overrides the default "dspacedb" container behavior to load a local SQL file into PostgreSQL. # # This can be used to restore a "dspacedb" container from a pg_dump, or during upgrade to a new version of PostgreSQL. services: dspacedb: - image: dspace/dspace-postgres-pgcrypto:dspace-7_x-loadsql + image: dspace/dspace-postgres-pgcrypto:dspace-cris-7_x-loadsql environment: # Location where the dump SQL file will be available on the running container - LOCALSQL=/tmp/pgdump.sql diff --git a/dspace/src/main/docker-compose/docker-compose-angular.yml b/dspace/src/main/docker-compose/docker-compose-angular.yml index 00dde2e83187..c47d93f07784 100644 --- a/dspace/src/main/docker-compose/docker-compose-angular.yml +++ b/dspace/src/main/docker-compose/docker-compose-angular.yml @@ -6,9 +6,12 @@ # http://www.dspace.org/license/ # -version: '3.7' networks: - dspacenet: + # Default to using network named 'dspacenet' from docker-compose.yml. + # Its full name will be prepended with the project name (e.g. "-p d7" means it will be named "d7_dspacenet") + default: + name: ${COMPOSE_PROJECT_NAME}_dspacenet + external: true services: dspace-angular: container_name: dspace-angular @@ -23,9 +26,7 @@ services: DSPACE_REST_HOST: localhost DSPACE_REST_PORT: 8080 DSPACE_REST_NAMESPACE: /server - image: dspace/dspace-angular:dspace-7_x - networks: - dspacenet: + image: dspace/dspace-angular:dspace-cris-7_x ports: - published: 4000 target: 4000 diff --git a/dspace/src/main/docker-compose/docker-compose-iiif.yml b/dspace/src/main/docker-compose/docker-compose-iiif.yml index 2ab58d9014f0..6f5470e5d157 100644 --- a/dspace/src/main/docker-compose/docker-compose-iiif.yml +++ b/dspace/src/main/docker-compose/docker-compose-iiif.yml @@ -10,9 +10,12 @@ # Test environment for DSpace + Cantaloupe for IIIF support. See README for instructions. # This should NEVER be used in production scenarios. # -version: '3.7' networks: - dspacenet: + # Default to using network named 'dspacenet' from docker-compose.yml. + # Its full name will be prepended with the project name (e.g. "-p d7" means it will be named "d7_dspacenet") + default: + name: ${COMPOSE_PROJECT_NAME}_dspacenet + external: true services: dspace-iiif: container_name: dspace-iiif @@ -21,8 +24,6 @@ services: # Using UCLA Library image as it seems to be most maintained at this time. There is no official image. # https://hub.docker.com/r/uclalibrary/cantaloupe image: uclalibrary/cantaloupe:5.0.4-0 - networks: - dspacenet: ports: - '8182:8182' # For a guide of environment variables that can be used, see diff --git a/dspace/src/main/docker-compose/docker-compose-shibboleth.yml b/dspace/src/main/docker-compose/docker-compose-shibboleth.yml index 58f1527d6ccb..f7fb2dcbd1ae 100644 --- a/dspace/src/main/docker-compose/docker-compose-shibboleth.yml +++ b/dspace/src/main/docker-compose/docker-compose-shibboleth.yml @@ -10,9 +10,12 @@ # Test environment for DSpace + Shibboleth (running via mod_shib in Apache). See README for instructions. # This should NEVER be used in production scenarios. # -version: '3.7' networks: - dspacenet: + # Default to using network named 'dspacenet' from docker-compose.yml. + # Its full name will be prepended with the project name (e.g. "-p d7" means it will be named "d7_dspacenet") + default: + name: ${COMPOSE_PROJECT_NAME}_dspacenet + external: true services: dspace-shibboleth: container_name: dspace-shibboleth @@ -22,8 +25,6 @@ services: build: # Must be relative to root, so that it can be built alongside [src]/docker-compose.yml context: ./dspace/src/main/docker/dspace-shibboleth - networks: - dspacenet: ports: - published: 80 target: 80 diff --git a/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/Dockerfile b/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/Dockerfile index b2131a740262..aabf87df3eda 100644 --- a/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/Dockerfile +++ b/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/Dockerfile @@ -10,7 +10,7 @@ # docker build --build-arg POSTGRES_VERSION=13 --build-arg POSTGRES_PASSWORD=mypass ./dspace/src/main/docker/dspace-postgres-pgcrypto-curl/ # This will be published as dspace/dspace-postgres-pgcrypto:$DSPACE_VERSION-loadsql -ARG POSTGRES_VERSION=13 +ARG POSTGRES_VERSION=15 ARG POSTGRES_PASSWORD=dspace FROM postgres:${POSTGRES_VERSION} diff --git a/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/install-pgcrypto.sh b/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/install-pgcrypto.sh index 3f8e95e1044f..d8e0382010df 100644 --- a/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/install-pgcrypto.sh +++ b/dspace/src/main/docker/dspace-postgres-pgcrypto-curl/install-pgcrypto.sh @@ -23,7 +23,6 @@ then rm /tmp/dspace-db-init.sql touch $CHECKFILE - exit fi # If $LOCALSQL environment variable set, then simply run it in PostgreSQL @@ -34,15 +33,14 @@ then psql -U $POSTGRES_USER < ${LOCALSQL} touch $CHECKFILE - exit fi # Then, setup pgcrypto on this database psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL -- Create a new schema in this database named "extensions" (or whatever you want to name it) - CREATE SCHEMA extensions; + CREATE SCHEMA IF NOT EXISTS extensions; -- Enable this extension in this new schema - CREATE EXTENSION pgcrypto SCHEMA extensions; + CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions; -- Update your database's "search_path" to also search the new "extensions" schema. -- You are just appending it on the end of the existing comma-separated list. ALTER DATABASE dspace SET search_path TO "\$user",public,extensions; diff --git a/dspace/src/main/docker/dspace-postgres-pgcrypto/Dockerfile b/dspace/src/main/docker/dspace-postgres-pgcrypto/Dockerfile index 7dde1a6bfd1c..2298cd4e76ea 100644 --- a/dspace/src/main/docker/dspace-postgres-pgcrypto/Dockerfile +++ b/dspace/src/main/docker/dspace-postgres-pgcrypto/Dockerfile @@ -10,7 +10,7 @@ # docker build --build-arg POSTGRES_VERSION=13 --build-arg POSTGRES_PASSWORD=mypass ./dspace/src/main/docker/dspace-postgres-pgcrypto/ # This will be published as dspace/dspace-postgres-pgcrypto:$DSPACE_VERSION -ARG POSTGRES_VERSION=13 +ARG POSTGRES_VERSION=15 ARG POSTGRES_PASSWORD=dspace FROM postgres:${POSTGRES_VERSION} diff --git a/dspace/src/main/docker/dspace-postgres-pgcrypto/install-pgcrypto.sh b/dspace/src/main/docker/dspace-postgres-pgcrypto/install-pgcrypto.sh index 65405aa7bdb6..67c4539b5a46 100644 --- a/dspace/src/main/docker/dspace-postgres-pgcrypto/install-pgcrypto.sh +++ b/dspace/src/main/docker/dspace-postgres-pgcrypto/install-pgcrypto.sh @@ -11,9 +11,9 @@ set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL -- Create a new schema in this database named "extensions" (or whatever you want to name it) - CREATE SCHEMA extensions; + CREATE SCHEMA IF NOT EXISTS extensions; -- Enable this extension in this new schema - CREATE EXTENSION pgcrypto SCHEMA extensions; + CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions; -- Update your database's "search_path" to also search the new "extensions" schema. -- You are just appending it on the end of the existing comma-separated list. ALTER DATABASE dspace SET search_path TO "\$user",public,extensions; diff --git a/dspace/src/main/docker/dspace-solr/Dockerfile b/dspace/src/main/docker/dspace-solr/Dockerfile index 9fe9adf9440f..18cf3be6b7a4 100644 --- a/dspace/src/main/docker/dspace-solr/Dockerfile +++ b/dspace/src/main/docker/dspace-solr/Dockerfile @@ -14,22 +14,36 @@ ARG SOLR_VERSION=8.11 FROM solr:${SOLR_VERSION}-slim -ENV AUTHORITY_CONFIGSET_PATH=/opt/solr/server/solr/configsets/authority/conf \ +ENV AUDIT_CONFIGSET_PATH=/opt/solr/server/solr/configsets/audit/conf \ + AUTHORITY_CONFIGSET_PATH=/opt/solr/server/solr/configsets/authority/conf \ + DEDUP_CONFIGSET_PATH=/opt/solr/server/solr/configsets/dedup/conf \ + NBEVENT_CONFIGSET_PATH=/opt/solr/server/solr/configsets/nbevent/conf \ OAI_CONFIGSET_PATH=/opt/solr/server/solr/configsets/oai/conf \ SEARCH_CONFIGSET_PATH=/opt/solr/server/solr/configsets/search/conf \ - STATISTICS_CONFIGSET_PATH=/opt/solr/server/solr/configsets/statistics/conf + STATISTICS_CONFIGSET_PATH=/opt/solr/server/solr/configsets/statistics/conf \ + SUGGESTION_CONFIGSET_PATH=/opt/solr/server/solr/configsets/suggestion/conf USER root -RUN mkdir -p $AUTHORITY_CONFIGSET_PATH && \ +RUN mkdir -p $AUDIT_CONFIGSET_PATH && \ + mkdir -p $AUTHORITY_CONFIGSET_PATH && \ + mkdir -p $DEDUP_CONFIGSET_PATH && \ + mkdir -p $NBEVENT_CONFIGSET_PATH && \ mkdir -p $OAI_CONFIGSET_PATH && \ mkdir -p $SEARCH_CONFIGSET_PATH && \ - mkdir -p $STATISTICS_CONFIGSET_PATH - -COPY dspace/solr/authority/conf/* $AUTHORITY_CONFIGSET_PATH/ -COPY dspace/solr/oai/conf/* $OAI_CONFIGSET_PATH/ -COPY dspace/solr/search/conf/* $SEARCH_CONFIGSET_PATH/ -COPY dspace/solr/statistics/conf/* $STATISTICS_CONFIGSET_PATH/ + mkdir -p $STATISTICS_CONFIGSET_PATH && \ + mkdir -p $SUGGESTION_CONFIGSET_PATH + +# NOTE: "solrconfigs" MUST be passed in by docker-compose via "additional_contexts" +# OR via "docker build --build-context solrconfigs=[path-to-dspace/solr]" +COPY --from=solrconfigs audit/conf/* $AUDIT_CONFIGSET_PATH/ +COPY --from=solrconfigs authority/conf/* $AUTHORITY_CONFIGSET_PATH/ +COPY --from=solrconfigs dedup/conf/* $DEDUP_CONFIGSET_PATH/ +COPY --from=solrconfigs nbevent/conf/* $NBEVENT_CONFIGSET_PATH/ +COPY --from=solrconfigs oai/conf/* $OAI_CONFIGSET_PATH/ +COPY --from=solrconfigs search/conf/* $SEARCH_CONFIGSET_PATH/ +COPY --from=solrconfigs statistics/conf/* $STATISTICS_CONFIGSET_PATH/ +COPY --from=solrconfigs suggestion/conf/* $SUGGESTION_CONFIGSET_PATH/ RUN chown -R solr:solr /opt/solr/server/solr/configsets