diff --git a/docker-compose-keycloak.yml b/docker-compose-keycloak.yml deleted file mode 100644 index 9ef10c92c..000000000 --- a/docker-compose-keycloak.yml +++ /dev/null @@ -1,210 +0,0 @@ -version: '2' - -services: - alfresco: - image: alfresco/alfresco-content-repository-community:latest - mem_limit: 1500m - depends_on: - - auth - environment: - HOST_IP: ${HOST_IP} - JAVA_OPTS: ' - -Ddb.driver=org.postgresql.Driver - -Ddb.username=alfresco - -Ddb.password=alfresco - -Ddb.url=jdbc:postgresql://postgres:5432/alfresco - -Dsolr.host=solr6 - -Dsolr.port=8983 - -Dsolr.secureComms=none - -Dsolr.base.url=/solr - -Dindex.subsystem.name=solr6 - -Dshare.host=localhost - -Dalfresco.port=8080 - -Daos.baseUrlOverwrite=http://${HOST_IP}:8080/alfresco/aos - -Dmessaging.broker.url="failover:(nio://activemq:61616)?timeout=3000&jms.useCompression=true" - -Ddeployment.method=DOCKER_COMPOSE - -Dcsrf.filter.enabled=false - -Xms1g -Xmx1g - - -Dlocal.transform.service.enabled=true - -DlocalTransform.pdfrenderer.url=http://alfresco-pdf-renderer:8090/ - -DlocalTransform.imagemagick.url=http://imagemagick:8090/ - -DlocalTransform.libreoffice.url=http://libreoffice:8090/ - -DlocalTransform.tika.url=http://tika:8090/ - -DlocalTransform.misc.url=http://transform-misc:8090/ - - -Dlegacy.transform.service.enabled=true - -Dalfresco-pdf-renderer.url=http://alfresco-pdf-renderer:8090/ - -Djodconverter.url=http://libreoffice:8090/ - -Dimg.url=http://imagemagick:8090/ - -Dtika.url=http://tika:8090/ - -Dtransform.misc.url=http://transform-misc:8090/ - - -Dauthentication.chain=identity-service1:identity-service,alfrescoNtlm1:alfrescoNtlm - -Didentity-service.enable-basic-auth=true - -Didentity-service.authentication.validation.failure.silent=false - -Didentity-service.auth-server-url=http://${HOST_IP}:8085/auth - -Didentity-service.realm=alfresco - -Didentity-service.resource=alfresco - ' - networks: - - internal - ports: - - 8080:8080 #Browser port - - alfresco-pdf-renderer: - image: alfresco/alfresco-pdf-renderer:2.1.0-EA4 - environment: - JAVA_OPTS: ' -Xms256m -Xmx256m' - networks: - - internal - ports: - - 8090:8090 - - imagemagick: - image: alfresco/alfresco-imagemagick:2.1.0-EA4 - environment: - JAVA_OPTS: ' -Xms256m -Xmx256m' - networks: - - internal - ports: - - 8091:8090 - - libreoffice: - image: alfresco/alfresco-libreoffice:2.1.0-EA4 - environment: - JAVA_OPTS: ' -Xms256m -Xmx256m' - networks: - - internal - ports: - - 8092:8090 - - tika: - image: alfresco/alfresco-tika:2.1.0-EA4 - environment: - JAVA_OPTS: ' -Xms256m -Xmx256m' - networks: - - internal - ports: - - 8093:8090 - - transform-misc: - image: alfresco/alfresco-transform-misc:2.1.0-EA4 - environment: - JAVA_OPTS: ' -Xms256m -Xmx256m' - networks: - - internal - ports: - - 8094:8090 - - share: - image: alfresco/alfresco-share:6.1.0-RC3 - mem_limit: 1g - depends_on: - - alfresco - environment: - - REPO_HOST=alfresco - - REPO_PORT=8080 - - 'CATALINA_OPTS= -Xms500m -Xmx500m' - networks: - - internal - ports: - - 8083:8080 - - postgres: - image: postgres:10.1 - mem_limit: 1500m - environment: - - POSTGRES_PASSWORD=alfresco - - POSTGRES_USER=alfresco - - POSTGRES_DB=alfresco - command: postgres -c max_connections=300 -c log_min_messages=LOG - networks: - - internal - ports: - - 5432:5432 - - solr6: - image: alfresco/alfresco-search-services:1.3.0-RC2 - mem_limit: 2500m - depends_on: - - alfresco - environment: - #Solr needs to know how to register itself with Alfresco - - SOLR_ALFRESCO_HOST=alfresco - - SOLR_ALFRESCO_PORT=8080 - #Alfresco needs to know how to call solr - - SOLR_SOLR_HOST=solr6 - - SOLR_SOLR_PORT=8983 - #Create the default alfresco and archive cores - - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive - - 'SOLR_JAVA_MEM=-Xms2g -Xmx2g' - networks: - - internal - ports: - - 8983:8983 #Browser port - - activemq: - image: alfresco/alfresco-activemq:5.15.6 - mem_limit: 2048m - networks: - - internal - ports: - - 8161:8161 # Web Console - - 5672:5672 # AMQP - - 61616:61616 # OpenWire - - 61613:61613 # STOMP - - content-app: - image: alfresco/alfresco-content-app:latest - build: . - environment: - # BASEPATH: ./ - APP_CONFIG_OAUTH2_HOST: ${APP_CONFIG_OAUTH2_HOST} - APP_CONFIG_AUTH_TYPE: ${APP_CONFIG_AUTH_TYPE} - APP_CONFIG_OAUTH2_CLIENTID: ${APP_CONFIG_OAUTH2_CLIENTID} - APP_CONFIG_OAUTH2_REDIRECT_SILENT_IFRAME_URI: ${APP_CONFIG_OAUTH2_REDIRECT_SILENT_IFRAME_URI} - APP_CONFIG_OAUTH2_REDIRECT_LOGIN: ${APP_CONFIG_OAUTH2_REDIRECT_LOGIN} - APP_CONFIG_OAUTH2_REDIRECT_LOGOUT: ${APP_CONFIG_OAUTH2_REDIRECT_LOGOUT} - networks: - - internal - depends_on: - - alfresco - ports: - - 4001:80 - # volumes: - # - ./app.config.json:/usr/share/nginx/html/app.config.json - # - ./nginx.conf:/etc/nginx/conf.d/default.conf - - proxy: - image: nginx:stable-alpine - depends_on: - - content-app - - alfresco - volumes: - - ./docker/proxy/nginx.conf:/etc/nginx/conf.d/default.conf - networks: - - internal - links: - - content-app - - alfresco - - share - ports: - - 8080:8080 - - auth: - image: jboss/keycloak:4.8.3.Final - volumes: - - ./docker/auth/alfresco-realm.json:/tmp/alfresco-realm.json - networks: - - internal - environment: - - KEYCLOAK_USER=admin - - KEYCLOAK_PASSWORD=admin - - KEYCLOAK_IMPORT=/tmp/alfresco-realm.json - - DB_VENDOR=h2 - ports: - - 8085:8080 - -networks: - internal: diff --git a/docker-compose.yml b/docker-compose.yml index a110f11ad..8eb77ff1e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,8 @@ services: alfresco: image: alfresco/alfresco-content-repository-community:latest mem_limit: 1500m + depends_on: + - auth volumes: - ./docker/acs-cm:/usr/local/tomcat/shared/classes/alfresco/extension environment: @@ -37,6 +39,14 @@ services: -Dtika.url=http://tika:8090/ -Dtransform.misc.url=http://transform-misc:8090/ -Dcsrf.filter.enabled=false + + -Didentity-service.enable-basic-auth=true + -Didentity-service.authentication.validation.failure.silent=false + -Didentity-service.auth-server-url=http://${HOST_IP}:8085/auth + -Didentity-service.realm=alfresco + -Didentity-service.resource=alfresco + + ${AIMS_PROPS} -Xms1500m -Xmx1500m ' @@ -132,6 +142,15 @@ services: build: . depends_on: - alfresco + environment: + BASE_PATH: ./ + APP_CONFIG_OAUTH2_HOST: ${APP_CONFIG_OAUTH2_HOST} + APP_CONFIG_AUTH_TYPE: ${APP_CONFIG_AUTH_TYPE} + APP_CONFIG_OAUTH2_CLIENTID: ${APP_CONFIG_OAUTH2_CLIENTID} + APP_CONFIG_OAUTH2_REDIRECT_SILENT_IFRAME_URI: ${APP_CONFIG_OAUTH2_REDIRECT_SILENT_IFRAME_URI} + APP_CONFIG_OAUTH2_REDIRECT_LOGIN: ${APP_CONFIG_OAUTH2_REDIRECT_LOGIN} + APP_CONFIG_OAUTH2_REDIRECT_LOGOUT: ${APP_CONFIG_OAUTH2_REDIRECT_LOGOUT} + APP_BASE_SHARE_URL: '{protocol}//{hostname}{:port}/content-app/#/preview/s' ports: - 4001:8080 @@ -148,3 +167,15 @@ services: - alfresco - share - content-app + + auth: + image: jboss/keycloak:4.8.3.Final + volumes: + - ./docker/auth/alfresco-realm.json:/tmp/alfresco-realm.json + environment: + - KEYCLOAK_USER=admin + - KEYCLOAK_PASSWORD=admin + - KEYCLOAK_IMPORT=/tmp/alfresco-realm.json + - DB_VENDOR=h2 + ports: + - 8085:8080 diff --git a/docker/proxy/nginx.conf b/docker/proxy/nginx.conf index 25f275517..a98763ab3 100644 --- a/docker/proxy/nginx.conf +++ b/docker/proxy/nginx.conf @@ -26,7 +26,11 @@ http { proxy_pass_header Set-Cookie; location / { - proxy_pass http://content-app:8080; + proxy_pass http://alfresco:8080; + } + + location /content-app/ { + proxy_pass http://content-app:8080/; } location /alfresco/ { diff --git a/package.json b/package.json index ad138615e..bb73e46c7 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,12 @@ "lint": "ng lint && npm run spellcheck && npm run format:check && npm run e2e.typecheck", "wd:update": "webdriver-manager update --gecko=false $VERSION_CHROME", "e2e.typecheck": "tsc -p ./e2e/tsconfig.e2e.typecheck.json", - "e2e": "npm run wd:update && protractor --baseUrl=${TEST_BASE_URL:-http://localhost:8080} $SUITE", + "e2e": "npm run wd:update && protractor --baseUrl=${TEST_BASE_URL:-http://localhost:8080/content-app} $SUITE", "e2e.local": "npm run wd:update && protractor --baseUrl=http://localhost:4200 $SUITE", - "wait:app": "wait-on http://localhost:8080/alfresco/ -t 1000000 && wait-on http://localhost:8080 -t 400000", - "start:docker": "docker-compose up -d --build && npm run wait:app", - "stop:docker": "docker-compose stop", - "e2e:docker": "npm run start:docker && npm run e2e && npm run stop:docker", + "wait:app": "wait-on http://${HOST_IP:-localhost}:${HOST_PORT:-8080}/alfresco/ -t 1000000 && wait-on http://${HOST_IP:-localhost}:${HOST_PORT:-8080}/content-app/ -t 400000", + "start:docker": "./start.sh && npm run wait:app", + "stop:docker": "./start.sh -d", + "e2e:docker": "./start.sh && npm run e2e && ./start.sh -d", "spellcheck": "cspell '{src,e2e,projects}/**/*.ts'", "inspect.bundle": "ng build app --prod --stats-json && npx webpack-bundle-analyzer dist/app/stats.json", "format:check": "prettier --check \"src/{app,environments}/**/*.{ts,js,css,scss,html}\"", diff --git a/start.sh b/start.sh new file mode 100755 index 000000000..34de17fc8 --- /dev/null +++ b/start.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash + +show_help() { + echo "Usage: ./start.sh" + echo "" + echo "-k or --keycloak if you want to use keycloak as identity provider" + echo "-d or --down delete all container" + echo "-hi or --host-ip set the host ip" + echo "-hp or --host-port set the host port. Default 8080" + echo "-w or --wait wait for backend. Default true" + echo "-h or --help" +} + +set_keycloak(){ + KEYCLOAK="true" +} + +down(){ + docker-compose down + exit 0 +} + +set_host_ip(){ + SET_HOST_IP=$1 +} + +set_host_port(){ + HOST_PORT=$1 +} + +set_wait(){ + WAIT=$1 +} + +# Defaults +WAIT="true" +SET_HOST_IP="" +HOST_PORT="8080" +KEYCLOAK="false" +AIMS_PROPS="" + +while [[ $1 == -* ]]; do + case "$1" in + -h|--help|-\?) show_help; exit 0;; + -k|--keycloak) set_keycloak; shift;; + -d|--down) down; shift;; + -w|--wait) set_wait $2; shift 2;; + -hi|--host-ip) set_host_ip $2; shift 2;; + -hp|--host-port) set_host_port $2; shift 2;; + -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; + esac +done + +if [ -n "${SET_HOST_IP}" ];then + export HOST_IP=${SET_HOST_IP} +else + echo "No HOST_IP set, try to figure out on its own ..." + export HOST_IP=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1) +fi +echo "HOST_IP: ${HOST_IP}" + +URL_FRAGMENT="content-app" +export APP_URL="http://${HOST_IP}:${HOST_PORT}/${URL_FRAGMENT}" +echo "Content Workspace: ${APP_URL}" + +if [[ $KEYCLOAK == "true" ]]; then + export APP_CONFIG_AUTH_TYPE="OAUTH" + export APP_CONFIG_OAUTH2_HOST="http://${HOST_IP}:8085/auth/realms/alfresco" + echo "Realm: ${APP_CONFIG_OAUTH2_HOST}" + export APP_CONFIG_OAUTH2_CLIENTID="alfresco" + export APP_CONFIG_OAUTH2_IMPLICIT_FLOW=true + export APP_CONFIG_OAUTH2_SILENT_LOGIN=true + export APP_CONFIG_OAUTH2_REDIRECT_SILENT_IFRAME_URI="${APP_URL}assets/silent-refresh.html" + export APP_CONFIG_OAUTH2_REDIRECT_LOGIN="/$URL_FRAGMENT/" + export APP_CONFIG_OAUTH2_REDIRECT_LOGOUT="/$URL_FRAGMENT/logout" + # export APP_BASE_SHARE_URL="${APP_URL}#/preview/s" + + AIMS_PROPS="-Dauthentication.chain=identity-service1:identity-service,alfrescoNtlm1:alfrescoNtlm" +fi + +echo "Start docker compose" +export AIMS_PROPS=${AIMS_PROPS} +docker-compose up -d --build + +if [[ $WAIT == "true" ]]; then + echo "http://${HOST_IP:-localhost}:${HOST_PORT:-8080}/$URL_FRAGMENT/" + echo "Waiting for the app ..." + HOST_IP=$HOST_IP HOST_PORT=$HOST_PORT npm run wait:app + if [ $? == 1 ]; then + echo "Waiting failed -> exit 1" + exit 1 + fi +fi