diff --git a/build/install/common/build-backend.sh b/build/install/common/build-backend.sh index 9adac24e12..627a422a47 100644 --- a/build/install/common/build-backend.sh +++ b/build/install/common/build-backend.sh @@ -42,11 +42,12 @@ done echo "== BACK-END-BUILD ==" cd ${SRC_PATH} -dotnet build ASC.Web.sln ${ARGS} +dotnet build ASC.Web.slnf ${ARGS} -# Array of names backend services in directory common (Nodejs) -services_name_backend_nodejs=(ASC.Thumbnails) +# Array of names backend services in directory common (Nodejs) +services_name_backend_nodejs=() +services_name_backend_nodejs+=(ASC.Thumbnails) services_name_backend_nodejs+=(ASC.UrlShortener) services_name_backend_nodejs+=(ASC.Socket.IO) services_name_backend_nodejs+=(ASC.SsoAuth) diff --git a/build/install/common/publish-backend.sh b/build/install/common/publish-backend.sh index 64afc5cc7c..d79cf64726 100644 --- a/build/install/common/publish-backend.sh +++ b/build/install/common/publish-backend.sh @@ -56,6 +56,7 @@ while [ "$1" != "" ]; do done # Array of names server in directory products +servers_products_name_backend=() servers_products_name_backend+=(ASC.Files) servers_products_name_backend+=(ASC.People) @@ -68,20 +69,19 @@ for i in ${!servers_products_name_backend[@]}; do done # Array of names backend services -services_name_backend=(ASC.ApiSystem) +services_name_backend=() services_name_backend+=(ASC.Data.Backup) -services_name_backend+=(ASC.Data.Storage.Encryption) services_name_backend+=(ASC.Files.Service) -services_name_backend+=(ASC.Data.Storage.Migration) services_name_backend+=(ASC.Notify) -services_name_backend+=(ASC.Socket.IO.Svc) services_name_backend+=(ASC.Studio.Notify) services_name_backend+=(ASC.TelegramService) -services_name_backend+=(ASC.Thumbnails.Svc) services_name_backend+=(ASC.UrlShortener.Svc) services_name_backend+=(ASC.Web.Api) services_name_backend+=(ASC.Web.Studio) -services_name_backend+=(ASC.SsoAuth.Svc) +#services_name_backend+=(ASC.Thumbnails.Svc) +services_name_backend+=(ASC.Data.Backup.BackgroundTasks) +services_name_backend+=(ASC.ClearEvents) +services_name_backend+=(ASC.Webhooks.Service) # Publish backend services for i in ${!services_name_backend[@]}; do @@ -91,8 +91,9 @@ for i in ${!services_name_backend[@]}; do dotnet publish -c Release --self-contained ${SELF_CONTAINED} ${ARGS} -o ${BUILD_PATH}/services/${services_name_backend[$i]}/service/ done -# Array of names backend services in directory common (Nodejs) -services_name_backend_nodejs=(ASC.Thumbnails) +# Array of names backend services in directory common (Nodejs) +services_name_backend_nodejs=() +#services_name_backend_nodejs+=(ASC.Thumbnails) services_name_backend_nodejs+=(ASC.UrlShortener) services_name_backend_nodejs+=(ASC.Socket.IO) services_name_backend_nodejs+=(ASC.SsoAuth) diff --git a/build/install/docker/.env b/build/install/docker/.env index 7f7c941349..7414cd93b6 100644 --- a/build/install/docker/.env +++ b/build/install/docker/.env @@ -29,7 +29,7 @@ ELK_HOST=${CONTAINER_PREFIX}elasticsearch # app service environment # - APP_DOTNET_ENV=test + ENV_EXTENSION=none APP_CORE_BASE_DOMAIN=localhost APP_CORE_MACHINEKEY=your_core_machinekey @@ -74,13 +74,13 @@ SERVICE_STORAGE_MIGRATION=${STORAGE_MIGRATION_HOST}:${SERVICE_PORT} SERVICE_NOTIFY=${NOTIFY_HOST}:${SERVICE_PORT} SERVICE_PEOPLE_SERVER=${PEOPLE_SERVER_HOST}:${SERVICE_PORT} - SERVICE_SOCKET=${SOCKET_HOST}:9899 + SERVICE_SOCKET=${SOCKET_HOST}:${SERVICE_PORT} SERVICE_STUDIO_NOTIFY=${STUDIO_NOTIFY_HOST}:${SERVICE_PORT} SERVICE_TELEGRAM_SERVICE=${TELEGRAM_SERVICE_HOST}:${SERVICE_PORT} - SERVICE_THUMBNAILS=${THUMBNAILS_HOST}:9800 - SERVICE_URLSHORTENER=${URLSHORTENER_HOST}:9999 + SERVICE_THUMBNAILS=${THUMBNAILS_HOST}:${SERVICE_PORT} + SERVICE_URLSHORTENER=${URLSHORTENER_HOST}:${SERVICE_PORT} SERVICE_API=${API_HOST}:${SERVICE_PORT} SERVICE_STUDIO=${STUDIO_HOST}:${SERVICE_PORT} - SERVICE_SSOAUTH=${SSOAUTH_HOST}:9834 + SERVICE_SSOAUTH=${SSOAUTH_HOST}:${SERVICE_PORT} NETWORK_NAME=${PRODUCT} diff --git a/build/install/docker/Dockerfile.app b/build/install/docker/Dockerfile.app index 451a0fffdf..375f550ecb 100644 --- a/build/install/docker/Dockerfile.app +++ b/build/install/docker/Dockerfile.app @@ -1,4 +1,3 @@ -### STAGE 1: Base image ###### ARG SRC_PATH=/app/onlyoffice/src ARG BUILD_PATH=/var/www ARG REPO_SDK=mcr.microsoft.com/dotnet/sdk @@ -7,7 +6,7 @@ ARG REPO_RUN=mcr.microsoft.com/dotnet/aspnet ARG REPO_RUN_TAG=6.0 FROM $REPO_SDK:$REPO_SDK_TAG AS base -ARG RELEASE_DATE="2016-06-21" +ARG RELEASE_DATE="2016-06-22" ARG DEBIAN_FRONTEND=noninteractive ARG PRODUCT_VERSION=0.0.0 ARG BUILD_NUMBER=0 @@ -43,7 +42,11 @@ RUN echo ${GIT_BRANCH} && \ git clone --recurse-submodules -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/AppServer.git ${SRC_PATH} RUN cd ${SRC_PATH} && \ - mkdir -p /app/onlyoffice/config/ && cp -rf config/* /app/onlyoffice/config/ && \ + # mkdir -p /app/onlyoffice/config/ && cp -rf config/* /app/onlyoffice/config/ && \ + mkdir -p /app/onlyoffice/ && \ + find config/ -maxdepth 1 -name "*.json" | grep -v test | xargs tar -cvf config.tar && \ + tar -C "/app/onlyoffice/" -xvf config.tar && \ + cp config/*.config /app/onlyoffice/config/ && \ mkdir -p /etc/nginx/conf.d && cp -f config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \ mkdir -p /etc/nginx/includes/ && cp -f config/nginx/includes/onlyoffice*.conf /etc/nginx/includes/ && \ sed -i "s/\"number\".*,/\"number\": \"${PRODUCT_VERSION}.${BUILD_NUMBER}\",/g" /app/onlyoffice/config/appsettings.json && \ @@ -56,48 +59,64 @@ RUN cd ${SRC_PATH} && \ rm -rf ${SRC_PATH}/common/* && \ rm -rf ${SRC_PATH}/web/ASC.Web.Core/* && \ rm -rf ${SRC_PATH}/web/ASC.Web.Studio/* && \ - rm -rf ${SRC_PATH}/products/ASC.Calendar/Server/* && \ - rm -rf ${SRC_PATH}/products/ASC.CRM/Server/* && \ rm -rf ${SRC_PATH}/products/ASC.Files/Server/* && \ rm -rf ${SRC_PATH}/products/ASC.Files/Service/* && \ - rm -rf ${SRC_PATH}/products/ASC.Mail/Server/* && \ - rm -rf ${SRC_PATH}/products/ASC.People/Server/* && \ - rm -rf ${SRC_PATH}/products/ASC.Projects/Server/* - + rm -rf ${SRC_PATH}/products/ASC.People/Server/* + COPY config/mysql/conf.d/mysql.cnf /etc/mysql/conf.d/mysql.cnf RUN rm -rf /var/lib/apt/lists/* -### STAGE 2: Build ### FROM $REPO_RUN:$REPO_RUN_TAG as builder ARG BUILD_PATH +ARG SRC_PATH ENV BUILD_PATH=${BUILD_PATH} - -COPY --from=base /app/onlyoffice/config/*.json /app/onlyoffice/config/ -COPY --from=base /app/onlyoffice/config/*.config /app/onlyoffice/config/ +ENV SRC_PATH=${SRC_PATH} # add defualt user and group for no-root run -RUN mkdir -p /var/log/onlyoffice && \ +RUN echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null && \ + mkdir -p /var/log/onlyoffice && \ + mkdir -p /app/onlyoffice/data && \ + addgroup --system --gid 107 onlyoffice && \ + adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \ + chown onlyoffice:onlyoffice /app/onlyoffice -R && \ + chown onlyoffice:onlyoffice /var/log -R && \ + chown onlyoffice:onlyoffice /var/www -R && \ + apt-get -y update && \ + apt-get -y upgrade && \ + apt-get install -yq sudo nano curl vim python3-pip && \ + apt-get install -yq libgdiplus && \ + pip3 install --upgrade jsonpath-ng multipledispatch + +COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/ + +#USER onlyoffice +EXPOSE 5050 +ENTRYPOINT ["python3", "docker-entrypoint.py"] + +FROM node:14-slim as nodeBuild +ARG BUILD_PATH +ARG SRC_PATH +ENV BUILD_PATH=${BUILD_PATH} +ENV SRC_PATH=${SRC_PATH} + +RUN echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null && \ + mkdir -p /var/log/onlyoffice && \ mkdir -p /app/onlyoffice/data && \ addgroup --system --gid 107 onlyoffice && \ adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \ chown onlyoffice:onlyoffice /app/onlyoffice -R && \ chown onlyoffice:onlyoffice /var/log -R && \ - chown onlyoffice:onlyoffice /var/www -R -RUN echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null && \ + chown onlyoffice:onlyoffice /var/www -R && \ apt-get -y update && \ apt-get -y upgrade && \ - apt-get install -yq sudo nano curl vim && \ - curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - && \ - apt-get install -y nodejs && \ - apt-get install -yq libgdiplus - -#USER onlyoffice + apt-get install -yq sudo nano curl vim python3-pip && \ + pip3 install --upgrade jsonpath-ng multipledispatch + +COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/ + EXPOSE 5050 - -ENTRYPOINT ["./docker-entrypoint.sh"] - -### STAGE 3: Run ### +ENTRYPOINT ["python3", "docker-entrypoint.py"] ## Nginx image ## FROM nginx AS web @@ -139,42 +158,52 @@ RUN chown nginx:nginx /etc/nginx/* -R && \ sed -i 's/localhost:5003/$service_studio/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/localhost:5023/$service_calendar/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/localhost:9899/$service_socket/' /etc/nginx/conf.d/onlyoffice.conf && \ + sed -i 's/localhost:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/localhost:5022/$service_mail/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/localhost:9999/$service_urlshortener/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf -## ASC.ApiSystem ## -FROM builder AS api_system -WORKDIR ${BUILD_PATH}/services/apisystem/ +## ASC.Webhooks.Service ## +FROM builder AS webhooks-wervice +WORKDIR ${BUILD_PATH}/services/ASC.Webhooks.Service/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ApiSystem/service . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Webhooks.Service/ . -CMD ["ASC.ApiSystem.dll", "ASC.ApiSystem"] +CMD ["ASC.Webhooks.Service.dll", "ASC.Webhooks.Service"] + +## ASC.ClearEvents ## +FROM builder AS clear-events +WORKDIR ${BUILD_PATH}/services/ASC.ClearEvents/ + +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ClearEvents/ . + +CMD ["ASC.ClearEvents.dll", "ASC.ClearEvents"] + +## ASC.Data.Backup.BackgroundTasks ## +FROM builder AS backup_background +WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/ + +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/ . + +CMD ["ASC.Data.Backup.BackgroundTasks.dll", "ASC.Data.Backup.BackgroundTasks"] ## ASC.Data.Backup ## FROM builder AS backup -WORKDIR ${BUILD_PATH}/services/backup/ +WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup/service . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup/service/ . -CMD ["ASC.Data.Backup.dll", "ASC.Data.Backup", "core:products:folder=/var/www/products/", "core:products:subfolder=server"] - -## ASC.Data.Storage.Encryption ## -FROM builder AS data_storage_encryption -WORKDIR ${BUILD_PATH}/services/storage.encryption/ - -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Storage.Encryption/service/ . - -CMD ["ASC.Data.Storage.Encryption.dll", "ASC.Data.Storage.Encryption"] +CMD ["ASC.Data.Backup.dll", "ASC.Data.Backup"] ## ASC.Files ## FROM builder AS files WORKDIR ${BUILD_PATH}/products/ASC.Files/server/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/products/ASC.Files/server/ . CMD ["ASC.Files.dll", "ASC.Files"] @@ -183,113 +212,91 @@ CMD ["ASC.Files.dll", "ASC.Files"] FROM builder AS files_services WORKDIR ${BUILD_PATH}/products/ASC.Files/service/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files.Service/service/ . -CMD ["ASC.Files.Service.dll", "ASC.Files.Service", "core:products:folder=/var/www/products/", "core:products:subfolder=server", "disable_elastic=true"] - -## ASC.Data.Storage.Migration ## -FROM builder AS data_storage_migration -WORKDIR ${BUILD_PATH}/services/storage.migration/service/ - -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Storage.Migration/service/ . - -CMD ["ASC.Data.Storage.Migration.dll", "ASC.Data.Storage.Migration"] +CMD ["ASC.Files.Service.dll", "ASC.Files.Service"] ## ASC.Notify ## FROM builder AS notify -WORKDIR ${BUILD_PATH}/services/notify/service +WORKDIR ${BUILD_PATH}/services/ASC.Notify/service -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Notify/service/ . -CMD ["ASC.Notify.dll", "ASC.Notify", "core:products:folder=/var/www/products/", "core:products:subfolder=server"] +CMD ["ASC.Notify.dll", "ASC.Notify"] ## ASC.People ## FROM builder AS people_server WORKDIR ${BUILD_PATH}/products/ASC.People/server/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/products/ASC.People/server/ . CMD ["ASC.People.dll", "ASC.People"] -## ASC.Socket.IO.Svc ## -FROM builder AS socket -WORKDIR ${BUILD_PATH}/services/socket.io.svc/ +## ASC.Socket.IO ## +FROM nodeBuild AS socket +WORKDIR ${BUILD_PATH}/services/ASC.Socket.IO/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Socket.IO.Svc/service/ . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Socket.IO/service/ ${BUILD_PATH}/ASC.Socket.IO/ +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Socket.IO/service/ . -CMD ["ASC.Socket.IO.Svc.dll", "ASC.Socket.IO.Svc"] +CMD ["server.js", "ASC.Socket.IO"] ## ASC.Studio.Notify ## FROM builder AS studio_notify -WORKDIR ${BUILD_PATH}/services/studio.notify/service/ +WORKDIR ${BUILD_PATH}/services/ASC.Studio.Notify/service/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Studio.Notify/service/ . -CMD ["ASC.Studio.Notify.dll", "ASC.Studio.Notify", "core:products:folder=/var/www/products/", "core:products:subfolder=server"] +CMD ["ASC.Studio.Notify.dll", "ASC.Studio.Notify"] ## ASC.TelegramService ## FROM builder AS telegram_service -WORKDIR ${BUILD_PATH}/services/telegram/ +WORKDIR ${BUILD_PATH}/services/ASC.TelegramService/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.TelegramService/service/ . CMD ["ASC.TelegramService.dll", "ASC.TelegramService"] -## ASC.Thumbnails.Svc ## -FROM builder AS thumbnails -WORKDIR ${BUILD_PATH}/services/thumb/service/ +## ASC.UrlShortener ## +FROM nodeBuild AS urlshortener +WORKDIR ${BUILD_PATH}/services/ASC.UrlShortener/service/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Thumbnails.Svc/service/ . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Thumbnails/service/ ${BUILD_PATH}/services/thumb/client +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.UrlShortener/service/ . -CMD ["ASC.Thumbnails.Svc.dll", "ASC.Thumbnails.Svc"] - -## ASC.UrlShortener.Svc ## -FROM builder AS urlshortener -WORKDIR ${BUILD_PATH}/services/urlshortener/service/ - -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.UrlShortener.Svc/service/ . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.UrlShortener/service/ ${BUILD_PATH}/services/urlshortener/client - -CMD ["ASC.UrlShortener.Svc.dll", "ASC.UrlShortener.Svc"] +CMD ["index.js", "ASC.UrlShortener"] ## ASC.Web.Api ## FROM builder AS api -WORKDIR ${BUILD_PATH}/studio/api/ +WORKDIR ${BUILD_PATH}/studio/ASC.Web.Api/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.Api/service/ . CMD ["ASC.Web.Api.dll", "ASC.Web.Api"] ## ASC.Web.Studio ## FROM builder AS studio -WORKDIR ${BUILD_PATH}/studio/server/ +WORKDIR ${BUILD_PATH}/studio/ASC.Web.Studio/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.Studio/service/ . CMD ["ASC.Web.Studio.dll", "ASC.Web.Studio"] ## ASC.SsoAuth ## -FROM builder AS ssoauth -WORKDIR ${BUILD_PATH}/services/ASC.SsoAuth.Svc/ +FROM nodeBuild AS ssoauth +WORKDIR ${BUILD_PATH}/services/ASC.SsoAuth/ -COPY --chown=onlyoffice:onlyoffice docker-entrypoint.sh . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.SsoAuth.Svc/service/ . -COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.SsoAuth/service/ ${BUILD_PATH}/ASC.SsoAuth/ +COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py +COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.SsoAuth/service/ . -CMD ["ASC.SsoAuth.Svc.dll", "ASC.SsoAuth.Svc"] +CMD ["app.js", "ASC.SsoAuth"] ## image for k8s bin-share ## FROM busybox:latest AS bin_share @@ -305,10 +312,6 @@ RUN mkdir -p /app/appserver/ASC.Files/server && \ COPY bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh COPY --from=base /var/www/products/ASC.Files/server/ /app/appserver/ASC.Files/server/ COPY --from=base /var/www/products/ASC.People/server/ /app/appserver/ASC.People/server/ -# COPY --from=base /var/www/products/ASC.CRM/server/ /app/appserver/ASC.CRM/server/ -# COPY --from=base /var/www/products/ASC.Projects/server/ /app/appserver/ASC.Projects/server/ -# COPY --from=base /var/www/products/ASC.Calendar/server/ /app/appserver/ASC.Calendar/server/ -# COPY --from=base /var/www/products/ASC.Mail/server/ /app/appserver/ASC.Mail/server/ ENTRYPOINT ["./app/docker-entrypoint.sh"] ## image for k8s wait-bin-share ## diff --git a/build/install/docker/appserver.yml b/build/install/docker/appserver.yml index 172e407351..b3f31a5c2e 100644 --- a/build/install/docker/appserver.yml +++ b/build/install/docker/appserver.yml @@ -49,22 +49,12 @@ services: expose: - "9200" - "9300" - - onlyoffice-api-system: - <<: *x-service-base - image: "${REPO}/${STATUS}appserver-api-system:${DOCKER_TAG}" - container_name: ${API_SYSTEM_HOST} - + onlyoffice-backup: <<: *x-service-base image: "${REPO}/${STATUS}appserver-backup:${DOCKER_TAG}" container_name: ${BACKUP_HOST} - onlyoffice-storage-encryption: - <<: *x-service-base - image: "${REPO}/${STATUS}appserver-storage-encryption:${DOCKER_TAG}" - container_name: ${STORAGE_ENCRYPTION_HOST} - onlyoffice-files: <<: *x-service-base image: "${REPO}/${STATUS}appserver-files:${DOCKER_TAG}" @@ -74,11 +64,6 @@ services: <<: *x-service-base image: "${REPO}/${STATUS}appserver-files-services:${DOCKER_TAG}" container_name: ${FILES_SERVICES_HOST} - - onlyoffice-storage-migration: - <<: *x-service-base - image: "${REPO}/${STATUS}appserver-storage-migration:${DOCKER_TAG}" - container_name: ${STORAGE_MIGRATION_HOST} onlyoffice-people-server: <<: *x-service-base @@ -103,13 +88,13 @@ services: image: "${REPO}/${STATUS}appserver-telegram-service:${DOCKER_TAG}" container_name: ${TELEGRAM_SERVICE_HOST} - onlyoffice-thumbnails: - <<: *x-service-base - image: "${REPO}/${STATUS}appserver-thumbnails:${DOCKER_TAG}" - container_name: ${THUMBNAILS_HOST} - expose: - - ${SERVICE_PORT} - - "9800" + # onlyoffice-thumbnails: + # <<: *x-service-base + # image: "${REPO}/${STATUS}appserver-thumbnails:${DOCKER_TAG}" + # container_name: ${THUMBNAILS_HOST} + # expose: + # - ${SERVICE_PORT} + # - "9800" onlyoffice-urlshortener: <<: *x-service-base @@ -148,28 +133,22 @@ services: ports: - 8092:8092 depends_on: - - onlyoffice-api-system - onlyoffice-backup - - onlyoffice-storage-encryption - onlyoffice-files - onlyoffice-files-services - - onlyoffice-storage-migration - onlyoffice-people-server - onlyoffice-socket - onlyoffice-studio-notify - onlyoffice-telegram-service - - onlyoffice-thumbnails + # - onlyoffice-thumbnails - onlyoffice-urlshortener - onlyoffice-api - onlyoffice-studio - onlyoffice-ssoauth environment: - - SERVICE_API_SYSTEM=${SERVICE_API_SYSTEM} - SERVICE_BACKUP=${SERVICE_BACKUP} - - SERVICE_STORAGE_ENCRYPTION=${SERVICE_STORAGE_ENCRYPTION} - SERVICE_FILES=${SERVICE_FILES} - SERVICE_FILES_SERVICES=${SERVICE_FILES_SERVICES} - - SERVICE_STORAGE_MIGRATION=${SERVICE_STORAGE_MIGRATION} - SERVICE_NOTIFY=${SERVICE_NOTIFY} - SERVICE_PEOPLE_SERVER=${SERVICE_PEOPLE_SERVER} - SERVICE_SOCKET=${SERVICE_SOCKET} diff --git a/build/install/docker/build.yml b/build/install/docker/build.yml index 9f8862841d..04d6afae1f 100644 --- a/build/install/docker/build.yml +++ b/build/install/docker/build.yml @@ -1,13 +1,27 @@ version: "3.8" services: - onlyoffice-api-system: + onlyoffice-backup-background-tasks: build: context: ./ dockerfile: "${DOCKERFILE}" - target: api_system - image: "${REPO}/${STATUS}appserver-api-system:${DOCKER_TAG}" - + target: backup_background + image: "${REPO}/${STATUS}appserver-backup-background:${DOCKER_TAG}" + + onlyoffice-clear-events: + build: + context: ./ + dockerfile: "${DOCKERFILE}" + target: clear-events + image: "${REPO}/${STATUS}appserver-clear-events:${DOCKER_TAG}" + + onlyoffice-webhooks-wervice: + build: + context: ./ + dockerfile: "${DOCKERFILE}" + target: webhooks-wervice + image: "${REPO}/${STATUS}appserver-webhooks-wervice:${DOCKER_TAG}" + onlyoffice-backup: build: context: ./ @@ -15,13 +29,6 @@ services: target: backup image: "${REPO}/${STATUS}appserver-backup:${DOCKER_TAG}" - onlyoffice-storage-encryption: - build: - context: ./ - dockerfile: "${DOCKERFILE}" - target: data_storage_encryption - image: "${REPO}/${STATUS}appserver-storage-encryption:${DOCKER_TAG}" - onlyoffice-files: build: context: ./ @@ -36,13 +43,6 @@ services: target: files_services image: "${REPO}/${STATUS}appserver-files-services:${DOCKER_TAG}" - onlyoffice-storage-migration: - build: - context: ./ - dockerfile: "${DOCKERFILE}" - target: data_storage_migration - image: "${REPO}/${STATUS}appserver-storage-migration:${DOCKER_TAG}" - onlyoffice-notify: build: context: ./ @@ -78,13 +78,6 @@ services: target: telegram_service image: "${REPO}/${STATUS}appserver-telegram-service:${DOCKER_TAG}" - onlyoffice-thumbnails: - build: - context: ./ - dockerfile: "${DOCKERFILE}" - target: thumbnails - image: "${REPO}/${STATUS}appserver-thumbnails:${DOCKER_TAG}" - onlyoffice-urlshortener: build: context: ./ diff --git a/build/install/docker/config/nginx/templates/upstream.conf.template b/build/install/docker/config/nginx/templates/upstream.conf.template index 4dc32e21ab..d364ff08fe 100644 --- a/build/install/docker/config/nginx/templates/upstream.conf.template +++ b/build/install/docker/config/nginx/templates/upstream.conf.template @@ -95,6 +95,11 @@ map $SERVICE_STUDIO $service_studio { $SERVICE_STUDIO $SERVICE_STUDIO; } +map $SERVICE_SSOAUTH $service_sso { + volatile; + $SERVICE_SSOAUTH $SERVICE_SSOAUTH; +} + map $DOCUMENT_SERVER $document_server { volatile; $DOCUMENT_SERVER $DOCUMENT_SERVER; diff --git a/build/install/docker/docker-entrypoint.py b/build/install/docker/docker-entrypoint.py new file mode 100755 index 0000000000..8f285e4dc3 --- /dev/null +++ b/build/install/docker/docker-entrypoint.py @@ -0,0 +1,171 @@ +import json, sys, os +from jsonpath_ng import jsonpath, parse +from os import environ +from multipledispatch import dispatch + +filePath = None +saveFilePath = None +jsonValue = None + +PRODUCT = os.environ["PRODUCT"] if environ.get("PRODUCT") else "onlyoffice" +BASE_DIR = os.environ["BASE_DIR"] if environ.get("BASE_DIR") else "/app/" + PRODUCT +ENV_EXTENSION = os.environ["ENV_EXTENSION"] if environ.get("ENV_EXTENSION") else "none" +PROXY_HOST = os.environ["PROXY_HOST"] if environ.get("PROXY_HOST") else "proxy" +SERVICE_PORT = os.environ["SERVICE_PORT"] if environ.get("SERVICE_PORT") else "5050" +URLS = os.environ["URLS"] if environ.get("URLS") else "http://0.0.0.0:" +PATH_TO_CONF = os.environ["PATH_TO_CONF"] if environ.get("PATH_TO_CONF") else "/app/" + PRODUCT + "/config" +LOG_DIR = os.environ["LOG_DIR"] if environ.get("LOG_DIR") else "/var/log/" + PRODUCT +ROUTER_HOST = os.environ["ROUTER_HOST"] if environ.get("ROUTER_HOST") else "localhost" + +MYSQL_HOST = os.environ["MYSQL_HOST"] if environ.get("MYSQL_HOST") else "localhost" +MYSQL_DATABASE = os.environ["MYSQL_DATABASE"] if environ.get("MYSQL_DATABASE") else "onlyoffice" +MYSQL_USER = os.environ["MYSQL_USER"] if environ.get("MYSQL_USER") else "onlyoffice_user" +MYSQL_PASSWORD = os.environ["MYSQL_PASSWORD"] if environ.get("MYSQL_PASSWORD") else "onlyoffice_pass" +DATABASE_MIGRATION = os.environ["DATABASE_MIGRATION"] if environ.get("DATABASE_MIGRATION") else "false" + +APP_CORE_BASE_DOMAIN = os.environ["APP_CORE_BASE_DOMAIN"] if environ.get("APP_CORE_BASE_DOMAIN") else "localhost" +APP_CORE_MACHINEKEY = os.environ["APP_CORE_MACHINEKEY"] if environ.get("APP_CORE_MACHINEKEY") else "your_core_machinekey" +APP_URL_PORTAL = os.environ["APP_URL_PORTAL"] if environ.get("APP_URL_PORTAL") else "http://" + ROUTER_HOST + ":8092" +APP_STORAGE_ROOT = os.environ["APP_STORAGE_ROOT"] if environ.get("APP_STORAGE_ROOT") else BASE_DIR + "/data/" + +DOCUMENT_SERVER_JWT_SECRET = os.environ["DOCUMENT_SERVER_JWT_SECRET"] if environ.get("DOCUMENT_SERVER_JWT_SECRET") else "your_jwt_secret" +DOCUMENT_SERVER_JWT_HEADER = os.environ["DOCUMENT_SERVER_JWT_HEADER"] if environ.get("DOCUMENT_SERVER_JWT_HEADER") else "AuthorizationJwt" +DOCUMENT_SERVER_URL_PUBLIC = os.environ["DOCUMENT_SERVER_URL_PUBLIC"] if environ.get("DOCUMENT_SERVER_URL_PUBLIC") else "/ds-vpath/" +DOCUMENT_SERVER_URL_INTERNAL = os.environ["DOCUMENT_SERVER_URL_INTERNAL"] if environ.get("DOCUMENT_SERVER_URL_INTERNAL") else "http://onlyoffice-document-server/" + +ELK_SHEME = os.environ["ELK_SHEME"] if environ.get("ELK_SHEME") else "http" +ELK_HOST = os.environ["ELK_HOST"] if environ.get("ELK_HOST") else "onlyoffice-elasticsearch" +ELK_PORT = os.environ["ELK_PORT"] if environ.get("ELK_PORT") else "9200" +ELK_THREADS = os.environ["ELK_THREADS"] if environ.get("ELK_THREADS") else "1" + +KAFKA_HOST = os.environ["KAFKA_HOST"] if environ.get("KAFKA_HOST") else "kafka:9092" +RUN_FILE = sys.argv[1] if sys.argv[1] else "none" +LOG_FILE = sys.argv[2] if sys.argv[2] else "none" + +class RunServices: + def __init__(self, SERVICE_PORT, PATH_TO_CONF): + self.SERVICE_PORT = SERVICE_PORT + self.PATH_TO_CONF = PATH_TO_CONF + @dispatch(str) + def RunService(self, RUN_FILE): + os.system("node " + RUN_FILE + " --app.port=" + self.SERVICE_PORT +\ + " --app.appsettings=" + self.PATH_TO_CONF) + return 1 + + @dispatch(str, str) + def RunService(self, RUN_FILE, ENV_EXTENSION): + if ENV_EXTENSION == "none": + self.RunService(RUN_FILE) + os.system("node " + RUN_FILE + " --app.port=" + self.SERVICE_PORT +\ + " --app.appsettings=" + self.PATH_TO_CONF +\ + " --app.environment=" + ENV_EXTENSION) + return 1 + + @dispatch(str, str, str) + def RunService(self, RUN_FILE, ENV_EXTENSION, LOG_FILE): + data = RUN_FILE.split(".") + if data[-1] != "dll": + self.RunService(RUN_FILE, ENV_EXTENSION) + elif ENV_EXTENSION == "none": + os.system("dotnet " + RUN_FILE + " --urls=" + URLS + self.SERVICE_PORT +\ + " --$STORAGE_ROOT=" + APP_STORAGE_ROOT +\ + " --pathToConf=" + self.PATH_TO_CONF +\ + " --log:dir=" + LOG_DIR +\ + " --log:name=" + LOG_FILE +\ + " core:products:folder=/var/www/products/" +\ + " core:products:subfolder=server") + else: + os.system("dotnet " + RUN_FILE + " --urls=" + URLS + self.SERVICE_PORT +\ + " --$STORAGE_ROOT=" + APP_STORAGE_ROOT +\ + " --pathToConf=" + self.PATH_TO_CONF +\ + " --log:dir=" + LOG_DIR +\ + " --log:name=" + LOG_FILE +\ + " --ENVIRONMENT=" + ENV_EXTENSION +\ + " core:products:folder=/var/www/products/" +\ + " core:products:subfolder=server") + +def openJsonFile(filePath): + try: + with open(filePath, 'r') as f: + return json.load(f) + except FileNotFoundError as e: + return False + except IOError as e: + return False + +def parseJsonValue(jsonValue): + data = jsonValue.split("=") + data[0] = "$." + data[0].strip() + data[1] = data[1].replace(" ", "") + + return data + +def updateJsonData(jsonData, jsonKey, jsonUpdateValue): + jsonpath_expr = parse(jsonKey) + jsonpath_expr.find(jsonData) + jsonpath_expr.update(jsonData, jsonUpdateValue) + + return jsonData + +def writeJsonFile(jsonFile, jsonData, indent=4): + with open(jsonFile, 'w') as f: + f.write(json.dumps(jsonData, ensure_ascii=False, indent=indent)) + + return 1 + +#filePath = sys.argv[1] +saveFilePath = filePath +#jsonValue = sys.argv[2] + +filePath = "/app/onlyoffice/config/appsettings.json" +jsonData = openJsonFile(filePath) +#jsonUpdateValue = parseJsonValue(jsonValue) +updateJsonData(jsonData, "$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false",) +updateJsonData(jsonData,"$.core.base-domain", APP_CORE_BASE_DOMAIN) +updateJsonData(jsonData,"$.core.machinekey", APP_CORE_MACHINEKEY) +updateJsonData(jsonData,"$.core.products.subfolder", "server") +updateJsonData(jsonData,"$.web.hub.internal", "http://onlyoffice-socket:" + SERVICE_PORT + "/") +updateJsonData(jsonData,"$.web.url-shortener.internal", "http://onlyoffice-urlshortener:" + SERVICE_PORT + "/") +updateJsonData(jsonData,"$.files.docservice.url.portal", APP_URL_PORTAL) +updateJsonData(jsonData,"$.files.docservice.url.public", DOCUMENT_SERVER_URL_PUBLIC) +updateJsonData(jsonData,"$.files.docservice.url.internal", DOCUMENT_SERVER_URL_INTERNAL) +updateJsonData(jsonData,"$.files.docservice.secret.value", DOCUMENT_SERVER_JWT_SECRET) +updateJsonData(jsonData,"$.files.docservice.secret.header", DOCUMENT_SERVER_JWT_HEADER) +updateJsonData(jsonData,"$.migration.enabled", DATABASE_MIGRATION) +writeJsonFile(filePath, jsonData) + +filePath = "/app/onlyoffice/config/elastic.json" +jsonData = openJsonFile(filePath) +updateJsonData(jsonData,"$.elastic.Scheme", ELK_SHEME) +updateJsonData(jsonData,"$.elastic.Host", ELK_HOST) +updateJsonData(jsonData,"$.elastic.Port", ELK_PORT) +updateJsonData(jsonData,"$.elastic.Threads", ELK_THREADS) +writeJsonFile(filePath, jsonData) + +filePath = "/app/onlyoffice/config/kafka.json" +jsonData = openJsonFile(filePath) +jsonData.update({"kafka": {"BootstrapServers": KAFKA_HOST}}) +writeJsonFile(filePath, jsonData) + +filePath = "/app/onlyoffice/config/socket.json" +jsonData = openJsonFile(filePath) +updateJsonData(jsonData,"$.socket.port", SERVICE_PORT) +writeJsonFile(filePath, jsonData) + +filePath = "/app/onlyoffice/config/ssoauth.json" +jsonData = openJsonFile(filePath) +updateJsonData(jsonData,"$.ssoauth.port", SERVICE_PORT) +writeJsonFile(filePath, jsonData) + +filePath = "/app/onlyoffice/config/rabbitmq.json" +jsonData = openJsonFile(filePath) +updateJsonData(jsonData,"$.RabbitMQ.Hostname", "onlyoffice-rebbitmq") +writeJsonFile(filePath, jsonData) + +filePath = "/app/onlyoffice/config/redis.json" +jsonData = openJsonFile(filePath) +updateJsonData(jsonData,"$.Redis.Hosts.[0].Host", "onlyoffice-redis") +writeJsonFile(filePath, jsonData) + +run = RunServices(SERVICE_PORT, PATH_TO_CONF) +run.RunService(RUN_FILE, ENV_EXTENSION, LOG_FILE) \ No newline at end of file diff --git a/build/install/docker/docker-entrypoint.sh b/build/install/docker/docker-entrypoint.sh index 838aceea1a..d6290a1c3e 100755 --- a/build/install/docker/docker-entrypoint.sh +++ b/build/install/docker/docker-entrypoint.sh @@ -1,33 +1,38 @@ -#!/bin/bash +#!/bin/bash PARAMETERS=${PARAMETERS:-""} # read parameters if [ -n "$1" ]; then - DOTNET_RUN="${1}"; + RUN_COMMAND="${1}"; shift fi if [ -n "$1" ]; then - DOTNET_LOG_NAME="${1}"; + RUN_FILE="${1}"; + shift +fi + +if [ -n "$1" ]; then + NAME_SERVICE="${1}"; shift fi while [ "$1" != "" ]; do - PARAMETERS="$PARAMETERS --${1}"; + PARAMETERS="$PARAMETERS ${1}"; + echo $PARAMETERS shift done -echo "#-------------------------------------#" -echo "Run ${DOTNET_RUN}" -echo "#-------------------------------------#" - +echo "Executing -- ${NAME_SERVICE}" + PRODUCT=${PRODUCT:-"onlyoffice"} -BASE_DIR="/app/${PRODUCT}" +ENV_EXTENSION=${ENV_EXTENSION:-"test"} PROXY_HOST=${PROXY_HOST:-"proxy"} + SHEME=${SHEME:-"http"} SERVICE_PORT=${SERVICE_PORT:-"5050"} - URLS=${URLS:-"${SHEME}://0.0.0.0:${SERVICE_PORT}"} -PATH_TO_CONF=${PATH_TO_CONF:-"${BASE_DIR}/config"} + +PATH_TO_CONF=${PATH_TO_CONF:-"/app/${PRODUCT}/config"} LOG_DIR=${LOG_DIR:-"/var/log/${PRODUCT}"} MYSQL_HOST=${MYSQL_HOST:-"mysql-server"} @@ -35,7 +40,6 @@ MYSQL_DATABASE=${MYSQL_DATABASE:-${PRODUCT}} MYSQL_USER=${MYSQL_USER:-"${PRODUCT}_user"} MYSQL_PASSWORD=${MYSQL_PASSWORD:-"${PRODUCT}_pass"} -APP_DOTNET_ENV=${APP_DOTNET_ENV:-"test"} APP_CORE_BASE_DOMAIN=${APP_CORE_BASE_DOMAIN:-"localhost"} APP_URL_PORTAL=${APP_URL_PORTAL:-"${SHEME}://${PROXY_HOST}:8092"} @@ -56,23 +60,53 @@ KAFKA_HOST=${KAFKA_HOST:-"kafka"}":9092" APP_STORAGE_ROOT=${APP_STORAGE_ROOT:-"${BASE_DIR}/data/"} -sed -i "s!Server=.*;Pooling=!Server=${MYSQL_HOST};Port=3306;Database=${MYSQL_DATABASE};User ID=${MYSQL_USER};Password=${MYSQL_PASSWORD};Pooling=!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"base-domain\".*,!\"base-domain\": \"${APP_CORE_BASE_DOMAIN}\",!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"machinekey\".*,!\"machinekey\": \"${APP_CORE_MACHINEKEY}\",!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"public\".*,!\"public\": \"${DOCUMENT_SERVER_URL_PUBLIC}\",!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"internal\".*,!\"internal\": \"${DOCUMENT_SERVER_URL_INTERNAL}\",!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"portal\".*!\"portal\": \"${APP_URL_PORTAL}\",!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "0,/\"value\"/s!\"value\".*,!\"value\": \"${DOCUMENT_SERVER_JWT_SECRET}\",!" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"header\".*!\"header\": \"${DOCUMENT_SERVER_JWT_HEADER}\"!" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json -sed -i "s!\"core\".*{!\"migration\": {\n\"enabled\": \"${DATABASE_MIGRATION}\"\n},\n\"core\": {!g" ${PATH_TO_CONF}/appsettings.${APP_DOTNET_ENV}.json +# function modifyJsonConfigFile { +# if [ -f $1 ] +# then +# pathToJsonConfig=$1 +# else +# echo "Can't find configure file $1" +# return $? +# fi + +# for i in ${!arrayJsonConfig[@]}; do +# python appsettings-jsonpath.py "${pathToJsonConfig}" "${arrayJsonConfig[$i]}" +# done + +# return 1 +# } + +# arrayJsonConfig=("ConnectionStrings.default.connectionString = Server=${MYSQL_HOST};\ +# Port=3306;\ +# Database=${MYSQL_DATABASE};\ +# User ID=${MYSQL_USER};\ +# Password=${MYSQL_PASSWORD};\ +# Pooling=true;\ +# Character Set=utf8;\ +# AutoEnlist=false;\ +# SSL Mode=none;\ +# AllowPublicKeyRetrieval=True;\ +# ConnectionReset=false") + +# modifyJsonConfigFile ${PATH_TO_CONF}/appsettings.json + +sed -i "s!Server=.*;Pooling=!Server=${MYSQL_HOST};Port=3306;Database=${MYSQL_DATABASE};User ID=${MYSQL_USER};Password=${MYSQL_PASSWORD};Pooling=!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"base-domain\".*,!\"base-domain\": \"${APP_CORE_BASE_DOMAIN}\",!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"machinekey\".*,!\"machinekey\": \"${APP_CORE_MACHINEKEY}\",!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"public\".*,!\"public\": \"${DOCUMENT_SERVER_URL_PUBLIC}\",!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"internal\".*,!\"internal\": \"${DOCUMENT_SERVER_URL_INTERNAL}\",!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"portal\".*!\"portal\": \"${APP_URL_PORTAL}\",!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "0,/\"value\"/s!\"value\".*,!\"value\": \"${DOCUMENT_SERVER_JWT_SECRET}\",!" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"header\".*!\"header\": \"${DOCUMENT_SERVER_JWT_HEADER}\"!" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json +sed -i "s!\"core\".*{!\"migration\": {\n\"enabled\": \"${DATABASE_MIGRATION}\"\n},\n\"core\": {!g" ${PATH_TO_CONF}/appsettings.${ENV_EXTENSION}.json sed -i "s!\"Scheme\".*!\"Scheme\": \"${ELK_SHEME}\",!g" ${PATH_TO_CONF}/elastic.json sed -i "s!\"Host\".*!\"Host\": \"${ELK_HOST}\",!g" ${PATH_TO_CONF}/elastic.json sed -i "s!\"Port\".*!\"Port\": \"${ELK_PORT}\",!g" ${PATH_TO_CONF}/elastic.json sed -i "s!\"Threads\".*!\"Threads\": \"${ELK_THREADS}\"!g" ${PATH_TO_CONF}/elastic.json -sed -i "s!\"subfolder\".*!\"subfolder\": \"server\",!g" ${PATH_TO_CONF}/appsettings.services.json -sed -i "s!\"BootstrapServers\".*!\"BootstrapServers\": \"${KAFKA_HOST}\"!g" ${PATH_TO_CONF}/kafka.${APP_DOTNET_ENV}.json +#sed -i "s!\"subfolder\".*!\"subfolder\": \"server\",!g" ${PATH_TO_CONF}/appsettings.services.json +sed -i "s!\"BootstrapServers\".*!\"BootstrapServers\": \"${KAFKA_HOST}\"!g" ${PATH_TO_CONF}/kafka.${ENV_EXTENSION}.json sed -i "s!\"path\".*!\"path\": \"../../ASC.Socket.IO\"!g" ${PATH_TO_CONF}/socket.${APP_DOTNET_ENV}.json diff --git a/build/install/docker/hooks/build b/build/install/docker/hooks/build index bc21f3759b..6b9ecaafbf 100644 --- a/build/install/docker/hooks/build +++ b/build/install/docker/hooks/build @@ -6,4 +6,6 @@ docker-compose -f build.yml build \ --build-arg PRODUCT_VERSION=$PRODUCT_VERSION \ --build-arg BUILD_NUMBER=$BUILD_NUMBER \ --build-arg BUILD_ARGS=$BUILD_ARGS \ - --build-arg DEPLOY_ARGS=$DEPLOY_ARGS + --build-arg DEPLOY_ARGS=$DEPLOY_ARGS \ + --build-arg REPO_SDK_TAG=$REPO_SDK_TAG \ + --build-arg REPO_RUN_TAG=$REPO_RUN_TAG diff --git a/build/install/docker/rabbitmq-redis.yml b/build/install/docker/rabbitmq-redis.yml new file mode 100644 index 0000000000..37adda8bfe --- /dev/null +++ b/build/install/docker/rabbitmq-redis.yml @@ -0,0 +1,21 @@ +version: '3' +services: + onlyoffice-redis: + image: redis:7 + container_name: onlyoffice-redis + restart: always + expose: + - "6379" + + onlyoffice-rebbitmq: + image: rabbitmq:3 + container_name: onlyoffice-rebbitmq + restart: always + expose: + - "5672" + - "80" + +networks: + default: + external: + name: ${NETWORK_NAME} diff --git a/config/ssoauth.json b/config/ssoauth.json index 43116351f1..db3463886b 100644 --- a/config/ssoauth.json +++ b/config/ssoauth.json @@ -1,6 +1,6 @@ { "ssoauth": { "path": "../../ASC.SsoAuth", - "port": "9834", + "port": "9834" } -} \ No newline at end of file +}