From 22e26b5b7c1eb7f7c874f362a0779f89a84ae156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Maciusiak?= <158472457+pmacius@users.noreply.github.com> Date: Tue, 23 Jul 2024 12:20:06 +0200 Subject: [PATCH] OPSEXP-2735 Add search enterprise all-in-one image Dockerfile (#5) --- .github/workflows/build_and_test.yml | 34 +++- docker-bake.hcl | 29 ++- docker-compose/docker-compose-components.yml | 204 +++++++++++++++++++ docker-compose/docker-compose.yml | 16 +- search/enterprise/README.md | 13 ++ search/enterprise/common/Dockerfile | 2 +- search/enterprise/common/artifacts.json | 7 + 7 files changed, 284 insertions(+), 21 deletions(-) create mode 100644 docker-compose/docker-compose-components.yml diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 48239ff0..523a55a2 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -37,12 +37,44 @@ jobs: - name: Show all images run: docker images + - name: Docker save the images produced by the bake action with the name consisting alfresco + run: | + docker save -o /tmp/alfresco-docker-images.tar $(docker images --format "{{.Repository}}:{{.Tag}}" | grep alfresco) + + - name: Upload image as a tar for next job + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # 4.3.4 + with: + name: ${{ github.run_number }} + path: /tmp/alfresco-docker-images.tar + + compose-test: + name: compose-test ${{ matrix.docker-compose-file }} + needs: build-test + runs-on: ubuntu-latest + strategy: + matrix: + docker-compose-file: [docker-compose.yml, docker-compose-components.yml] + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@2ad185228a349d19414702819e06df9fa4314287 # 3.4.0 + + - name: Download artifacts + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # 4.1.8 + with: + path: /tmp + name: "${{ github.run_number }}" + + - name: Load Docker images + run: | + ls -1 /tmp/*.tar | xargs --no-run-if-empty -L 1 docker load -i + docker image ls -a + - name: Verify docker-compose uses: Alfresco/alfresco-build-tools/.github/actions/dbp-charts/verify-compose@v5.34.0 timeout-minutes: 10 with: compose_pull: false - compose_file_path: docker-compose/docker-compose.yml + compose_file_path: docker-compose/${{ matrix.docker-compose-file }} quay_username: ${{ secrets.QUAY_USERNAME }} quay_password: ${{ secrets.QUAY_PASSWORD }} diff --git a/docker-bake.hcl b/docker-bake.hcl index 84543e2e..b1064ce4 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -155,11 +155,28 @@ target "repository" { target "search_liveindexing" { matrix = { - liveindexing = ["metadata", "path", "content"] + liveindexing = [ + { + artifact = "alfresco-elasticsearch-live-indexing-metadata", + name = "metadata" + }, + { + artifact = "alfresco-elasticsearch-live-indexing-path", + name = "path" + }, + { + artifact = "alfresco-elasticsearch-live-indexing-content", + name = "content" + }, + { + artifact = "alfresco-elasticsearch-live-indexing", + name = "all-in-one" + } + ] } - name = "search_liveindexing-${liveindexing}" + name = "${liveindexing.artifact}" args = { - LIVEINDEXING = "${liveindexing}" + LIVEINDEXING = "${liveindexing.artifact}" } dockerfile = "./search/enterprise/common/Dockerfile" inherits = ["java_base"] @@ -167,9 +184,9 @@ target "search_liveindexing" { java_base = "target:java_base" } labels = { - "org.opencontainers.image.title" = "${PRODUCT_LINE} Enterprise Search - ${liveindexing}" - "org.opencontainers.image.description" = "${PRODUCT_LINE} Enterprise Search - ${liveindexing} live indexing" + "org.opencontainers.image.title" = "${PRODUCT_LINE} Enterprise Search - ${liveindexing.name}" + "org.opencontainers.image.description" = "${PRODUCT_LINE} Enterprise Search - ${liveindexing.name} live indexing" } - tags = ["alfresco-elasticsearch-live-indexing-${liveindexing}:latest"] + tags = ["${liveindexing.artifact}:latest"] output = ["type=docker"] } diff --git a/docker-compose/docker-compose-components.yml b/docker-compose/docker-compose-components.yml new file mode 100644 index 00000000..fbb63eb2 --- /dev/null +++ b/docker-compose/docker-compose-components.yml @@ -0,0 +1,204 @@ +version: "2" +services: + alfresco: + image: quay.io/alfresco/alfresco-content-repository:23.2.2 + mem_limit: 1900m + environment: + JAVA_TOOL_OPTIONS: >- + -Dencryption.keystore.type=JCEKS + -Dencryption.cipherAlgorithm=DESede/CBC/PKCS5Padding + -Dencryption.keyAlgorithm=DESede + -Dencryption.keystore.location=/usr/local/tomcat/shared/classes/alfresco/extension/keystore/keystore + -Dmetadata-keystore.password=mp6yc0UD9e + -Dmetadata-keystore.aliases=metadata + -Dmetadata-keystore.metadata.password=oKIWzVdEdA + -Dmetadata-keystore.metadata.algorithm=DESede + JAVA_OPTS: >- + -Ddb.driver=org.postgresql.Driver + -Ddb.username=alfresco + -Ddb.password=alfresco + -Ddb.url=jdbc:postgresql://postgres:5432/alfresco + -Dindex.subsystem.name=elasticsearch + -Delasticsearch.createIndexIfNotExists=true + -Delasticsearch.host=elasticsearch + -Delasticsearch.port=9200 + -Dshare.host=127.0.0.1 + -Dshare.port=8080 + -Dalfresco.host=localhost + -Dalfresco.port=8080 + -Dcsrf.filter.enabled=false + -Daos.baseUrlOverwrite=http://localhost:8080/alfresco/aos + -Dmessaging.broker.url="failover:(nio://activemq:61616)?timeout=3000&jms.useCompression=true" + -Ddeployment.method=DOCKER_COMPOSE + -Dtransform.service.enabled=true + -Dtransform.service.url=http://transform-router:8095 + -Dsfs.url=http://shared-file-store:8099/ + -DlocalTransform.core-aio.url=http://transform-core-aio:8090/ + -Ddsync.service.uris=http://localhost:9090/alfresco + -XX:MinRAMPercentage=50 + -XX:MaxRAMPercentage=80 + healthcheck: + test: + - CMD + - curl + - -f + - http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/probes/-ready- + interval: 30s + timeout: 3s + retries: 3 + start_period: 1m + transform-router: + mem_limit: 512m + image: quay.io/alfresco/alfresco-transform-router:4.1.2 + environment: + JAVA_OPTS: >- + -XX:MinRAMPercentage=50 + -XX:MaxRAMPercentage=80 + ACTIVEMQ_URL: nio://activemq:61616 + CORE_AIO_URL: http://transform-core-aio:8090 + FILE_STORE_URL: >- + http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file + ports: + - "8095:8095" + depends_on: + - activemq + transform-core-aio: + image: alfresco/alfresco-transform-core-aio:5.1.2 + mem_limit: 1536m + environment: + JAVA_OPTS: >- + -XX:MinRAMPercentage=50 + -XX:MaxRAMPercentage=80 + ACTIVEMQ_URL: nio://activemq:61616 + FILE_STORE_URL: >- + http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file + ports: + - "8090:8090" + depends_on: + - activemq + shared-file-store: + image: quay.io/alfresco/alfresco-shared-file-store:4.1.2 + mem_limit: 512m + environment: + JAVA_OPTS: >- + -XX:MinRAMPercentage=50 + -XX:MaxRAMPercentage=80 + scheduler.content.age.millis: 86400000 + scheduler.cleanup.interval: 86400000 + ports: + - "8099:8099" + volumes: + - shared-file-store-volume:/tmp/Alfresco/sfs + share: + image: quay.io/alfresco/alfresco-share:23.2.1 + mem_limit: 1g + environment: + REPO_HOST: "alfresco" + REPO_PORT: "8080" + JAVA_OPTS: >- + -XX:MinRAMPercentage=50 + -XX:MaxRAMPercentage=80 + -Dalfresco.host=localhost + -Dalfresco.port=8080 + -Dalfresco.context=alfresco + -Dalfresco.protocol=http + postgres: + image: postgres:14.4 + mem_limit: 512m + environment: + - POSTGRES_PASSWORD=alfresco + - POSTGRES_USER=alfresco + - POSTGRES_DB=alfresco + command: postgres -c max_connections=300 -c log_min_messages=LOG + ports: + - "5432:5432" + elasticsearch: + image: elasticsearch:7.10.1 + environment: + - xpack.security.enabled=false + - discovery.type=single-node + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + cap_add: + - IPC_LOCK + ports: + - 9200:9200 + - 9300:9300 + activemq: + image: alfresco/alfresco-activemq:5.18-jre17-rockylinux8 + mem_limit: 1g + ports: + - "8161:8161" # Web Console + - "5672:5672" # AMQP + - "61616:61616" # OpenWire + - "61613:61613" # STOMP + digital-workspace: + image: quay.io/alfresco/alfresco-digital-workspace:4.4.1 + mem_limit: 128m + environment: + APP_CONFIG_PROVIDER: "ECM" + APP_CONFIG_AUTH_TYPE: "BASIC" + BASE_PATH: ./ + APP_CONFIG_PLUGIN_PROCESS_SERVICE: "false" + APP_CONFIG_PLUGIN_MICROSOFT_ONLINE: "false" + APP_BASE_SHARE_URL: "http://localhost:8080/workspace/#/preview/s" + control-center: + image: quay.io/alfresco/alfresco-control-center:8.4.1 + mem_limit: 128m + environment: + APP_CONFIG_PROVIDER: "ECM" + APP_CONFIG_AUTH_TYPE: "BASIC" + BASE_PATH: ./ + proxy: + image: alfresco/alfresco-acs-nginx:3.4.2 + mem_limit: 128m + ports: + - "8080:8080" + depends_on: + - digital-workspace + - alfresco + - share + - control-center + sync-service: + image: quay.io/alfresco/service-sync:4.0.1 + mem_limit: 1g + environment: + JAVA_OPTS: >- + -Dsql.db.driver=org.postgresql.Driver + -Dsql.db.url=jdbc:postgresql://postgres:5432/alfresco + -Dsql.db.username=alfresco + -Dsql.db.password=alfresco + -Dmessaging.broker.host=activemq + -Drepo.hostname=alfresco + -Drepo.port=8080 + -Ddw.server.applicationConnectors[0].type=http + -XX:MinRAMPercentage=50 + -XX:MaxRAMPercentage=80 + ports: + - "9090:9090" + live-indexing-metadata: + image: alfresco-elasticsearch-live-indexing-metadata:latest + environment: + SPRING_ELASTICSEARCH_REST_URIS: http://elastic:9200 + SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 + live-indexing-path: + image: alfresco-elasticsearch-live-indexing-path:latest + environment: + SPRING_ELASTICSEARCH_REST_URIS: http://elasticsearch:9200 + SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 + live-indexing-content: + image: alfresco-elasticsearch-live-indexing-content:latest + environment: + SPRING_ELASTICSEARCH_REST_URIS: http://elasticsearch:9200 + SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 + ALFRESCO_SHAREDFILESTORE_BASEURL: http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file +volumes: + shared-file-store-volume: + driver_opts: + type: tmpfs + device: tmpfs diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index fbb63eb2..5a4b3a30 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -181,22 +181,12 @@ services: -XX:MaxRAMPercentage=80 ports: - "9090:9090" - live-indexing-metadata: - image: alfresco-elasticsearch-live-indexing-metadata:latest - environment: - SPRING_ELASTICSEARCH_REST_URIS: http://elastic:9200 - SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 - live-indexing-path: - image: alfresco-elasticsearch-live-indexing-path:latest - environment: - SPRING_ELASTICSEARCH_REST_URIS: http://elasticsearch:9200 - SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 - live-indexing-content: - image: alfresco-elasticsearch-live-indexing-content:latest + live-indexing: + image: alfresco-elasticsearch-live-indexing:latest environment: SPRING_ELASTICSEARCH_REST_URIS: http://elasticsearch:9200 SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 - ALFRESCO_SHAREDFILESTORE_BASEURL: http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file + ALFRESCO_SHAREDFILESTORE_BASEURL: http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file/ volumes: shared-file-store-volume: driver_opts: diff --git a/search/enterprise/README.md b/search/enterprise/README.md index db3ba187..53673e00 100644 --- a/search/enterprise/README.md +++ b/search/enterprise/README.md @@ -48,3 +48,16 @@ live-indexing-content: - `SPRING_ELASTICSEARCH_REST_URIS` - Elasticsearch server, by default `http://elasticsearch:9200` - `SPRING_ACTIVEMQ_BROKERURL` - Alfresco ActiveMQ, by default `nio://activemq:61616` - `ALFRESCO_SHAREDFILESTORE_BASEURL` - Alfresco Shared FileStore endpoint, by default `http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file/` + +## all-in-one + +```yaml + +live-indexing: + image: alfresco-enterprise-search-aio:YOUR-TAG + environment: + SPRING_ELASTICSEARCH_REST_URIS: http://elasticsearch:9200 + SPRING_ACTIVEMQ_BROKERURL: nio://activemq:61616 + ALFRESCO_SHAREDFILESTORE_BASEURL: http://shared-file-store:8099/alfresco/api/-default-/private/sfs/versions/1/file/ + +``` diff --git a/search/enterprise/common/Dockerfile b/search/enterprise/common/Dockerfile index d01c5b87..d525d755 100644 --- a/search/enterprise/common/Dockerfile +++ b/search/enterprise/common/Dockerfile @@ -4,7 +4,7 @@ ARG LIVEINDEXING ENV PORT=8080 EXPOSE 8080 -ADD search/enterprise/common/*${LIVEINDEXING}*-app.jar /opt/app.jar +ADD search/enterprise/common/${LIVEINDEXING}*-app.jar /opt/app.jar HEALTHCHECK --interval=30s --timeout=3s --retries=3 --start-period=1m \ CMD curl -f http://localhost:8080/actuator/health || exit 1 diff --git a/search/enterprise/common/artifacts.json b/search/enterprise/common/artifacts.json index 8ef90155..00d9f279 100644 --- a/search/enterprise/common/artifacts.json +++ b/search/enterprise/common/artifacts.json @@ -21,6 +21,13 @@ "path": "search/enterprise/common", "classifier": "-app.jar", "group": "org.alfresco" + }, + { + "name": "alfresco-elasticsearch-live-indexing", + "version": "4.0.1", + "path": "search/enterprise/common", + "classifier": "-app.jar", + "group": "org.alfresco" } ] }