Develop docker building feature
This commit is contained in:
parent
08f5298912
commit
7f896858e2
139
.github/workflows/build-runtime-images.yml
vendored
Normal file
139
.github/workflows/build-runtime-images.yml
vendored
Normal file
@ -0,0 +1,139 @@
|
||||
name: build docker runtime images
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'hotfix/v**'
|
||||
- 'release/v**'
|
||||
- 'feature/docker-dev'
|
||||
paths:
|
||||
- '/build/install/docker/Dockerfile.runtime'
|
||||
- '.github/workflows/build-runtime-images.yml'
|
||||
- 'config/*'
|
||||
- '/build/install/docker/config/nginx/**'
|
||||
env:
|
||||
REPOSITORY_NAME: "onlyoffice"
|
||||
TAG: "v1.0.0"
|
||||
DOTNET_RUNTIME_IMAGE: "4testing-docspace-dotnet-runtime"
|
||||
NODEJS_RUNTIME_IMAGE: "4testing-docspace-nodejs-runtime"
|
||||
PROXY_RUNTIME_IMAGE: "4testing-docspace-proxy-runtime"
|
||||
DOCKERFILE_BUILD: "/build/install/docker/Dockerfile.runtime"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
-
|
||||
name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}
|
||||
uses: docker/build-push-action@v4
|
||||
id: build-dotnetrun
|
||||
with:
|
||||
context: .
|
||||
file: ${{ env.DOCKERFILE_BUILD }}
|
||||
platforms: ${{ matrix.platform}}
|
||||
target: dotnetrun
|
||||
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||
-
|
||||
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}
|
||||
uses: docker/build-push-action@v4
|
||||
id: build-noderun
|
||||
with:
|
||||
context: .
|
||||
file: ${{ env.DOCKERFILE_BUILD }}
|
||||
platforms: ${{ matrix.platform}}
|
||||
target: noderun
|
||||
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||
-
|
||||
name: Build ${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}
|
||||
uses: docker/build-push-action@v4
|
||||
id: build-proxy
|
||||
with:
|
||||
context: .
|
||||
file: ${{ env.DOCKERFILE_BUILD }}
|
||||
platforms: ${{ matrix.platform}}
|
||||
target: proxy
|
||||
outputs: type=image,name=${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||
-
|
||||
name: Export digest
|
||||
run: |
|
||||
mkdir -p /tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}
|
||||
digest="${{ steps.build-dotnetrun.outputs.digest }}"
|
||||
touch "/tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}/${digest#sha256:}"
|
||||
|
||||
mkdir -p /tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}
|
||||
digest="${{ steps.build-noderun.outputs.digest }}"
|
||||
touch "/tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}/${digest#sha256:}"
|
||||
|
||||
mkdir -p /tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}
|
||||
digest="${{ steps.build-proxy.outputs.digest }}"
|
||||
touch "/tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}/${digest#sha256:}"
|
||||
-
|
||||
name: Upload digest
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: digests
|
||||
path: /tmp/digests/*
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- build-dotnetrun
|
||||
- build-noderun
|
||||
- build-proxy
|
||||
steps:
|
||||
-
|
||||
name: Download digests
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: digests
|
||||
path: /tmp/digests
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Create ${{ env.DOTNET_RUNTIME_IMAGE }} list and push
|
||||
working-directory: /tmp/digests/${{ env.DOTNET_RUNTIME_IMAGE }}
|
||||
run: |
|
||||
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}:${{ env.TAG }} \
|
||||
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.DOTNET_RUNTIME_IMAGE }}@sha256:%s ' *)
|
||||
-
|
||||
name: Create ${{ env.NODEJS_RUNTIME_IMAGE }} list and push
|
||||
working-directory: /tmp/digests/${{ env.NODEJS_RUNTIME_IMAGE }}
|
||||
run: |
|
||||
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}:${{ env.TAG }} \
|
||||
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.NODEJS_RUNTIME_IMAGE }}@sha256:%s ' *)
|
||||
-
|
||||
name: Create ${{ env.PROXY_RUNTIME_IMAGE }} list and push
|
||||
working-directory: /tmp/digests/${{ env.PROXY_RUNTIME_IMAGE }}
|
||||
run: |
|
||||
docker buildx imagetools create -t ${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}:${{ env.TAG }} \
|
||||
$(printf '${{ env.REPOSITORY_NAME }}/${{ env.PROXY_RUNTIME_IMAGE }}@sha256:%s ' *)
|
262
build/install/common/build-services.sh
Normal file
262
build/install/common/build-services.sh
Normal file
@ -0,0 +1,262 @@
|
||||
#!/bin/bash
|
||||
set -xe
|
||||
|
||||
PROJECT_REPOSITORY_NAME=${PROJECT_REPOSITORY_NAME:-"DocSpace"}
|
||||
SRC_PATH=${SRC_PATH:-$(pwd | sed "s/${PROJECT_REPOSITORY_NAME}.*/${PROJECT_REPOSITORY_NAME}/g")}
|
||||
BUILD_PATH=${BUILD_PATH:-${SRC_PATH}/publish}
|
||||
BUILD_DOTNET_CORE_ARGS=${BUILD_DOTNET_CORE_ARGS:-"false"}
|
||||
PROPERTY_BUILD=${PROPERTY_BUILD:-"all"}
|
||||
|
||||
BACKEND_NODEJS_SERVICES=${BACKEND_NODEJS_SERVICES:-"ASC.Socket.IO, ASC.SsoAuth"}
|
||||
BACKEND_DOTNETCORE_SERVICES=${BACKEND_DOTNETCORE_SERVICES:-"ASC.Files, ASC.People, ASC.Data.Backup, ASC.Files.Service, ASC.Notify, \
|
||||
ASC.Studio.Notify, ASC.Web.Api, ASC.Web.Studio, ASC.Data.Backup.BackgroundTasks, ASC.ClearEvents, ASC.ApiSystem, ASC.Web.HealthChecks.UI"}
|
||||
SELF_CONTAINED=${SELF_CONTAINED:-"false"}
|
||||
PUBLISH_BACKEND_ARGS=${PUBLISH_BACKEND_ARGS:-"false"}
|
||||
PUBLISH_CNF=${PUBLISH_CNF:-"Release"}
|
||||
|
||||
FRONTEND_BUILD_ARGS=${FRONTEND_BUILD_ARGS:-"build"}
|
||||
FRONTEND_DEPLOY_ARGS=${FRONTEND_DEPLOY_ARGS:-"deploy"}
|
||||
DEBUG_INFO_CHECK=${DEBUG_INFO_CHECK:-""}
|
||||
MIGRATION_CHECK=${MIGRATION_CHECK:-"true"}
|
||||
DOCKER_ENTRYPOINT=${DOCKER_ENTRYPOINT:-"false"}
|
||||
|
||||
ARRAY_NAME_SERVICES=()
|
||||
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-sp | --srcpath )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
SRC_PATH=$2
|
||||
BUILD_PATH=${SRC_PATH}/publish
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-bp | --buildpath )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
BUILD_PATH=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-pb | --property-build )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
PROPERTY_BUILD=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-sc | --self-contained )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
SELF_CONTAINED=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-pc | --publish-configuration )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
PUBLISH_CNF=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-yb | --frontend-build-args )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
FRONTEND_BUILD_ARGS=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-yd | --frontend-deploy-args )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
FRONTEND_DEPLOY_ARGS=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-dc | --debug-check )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
DEBUG_INFO_CHECK=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-mc | --migration-check )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
MIGRATION_CHECK=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-de | --docker-entrypoint )
|
||||
if [[ "$2" != "" && ! "$2" =~ ^- ]]; then
|
||||
DOCKER_ENTRYPOINT=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-? | -h | --help )
|
||||
echo " Usage: bash build-services.sh [PARAMETER] [[PARAMETER], ...]"
|
||||
echo " Parameters:"
|
||||
echo -e " -sp, --srcpath \t path to project root directory"
|
||||
echo -e " -bp, --buildpath \t path where generated output is placed (by default={SRC_PATH}/publish)"
|
||||
echo -e " -st, --status \t build status Ex. all/frontend-build/backend-publish/backend-dotnet-publish/backend-nodejs-publish/backend-build"
|
||||
echo -e " -sc, --self-contained \t publish the .NET runtime with your application (by default=false)"
|
||||
echo -e " -pc, --publish-configuration \t dotnet publish configuration Ex. Release/Debug"
|
||||
echo -e " -yb, --frontend-build-args \t arguments for yarn building"
|
||||
echo -e " -yd, --frontend-deploy-args \t arguments for yarn deploy"
|
||||
echo -e " -dc, --debug-check \t arguments for yarn debug info configure"
|
||||
echo -e " -mc, --migration-check \t check migration build (by default=true)"
|
||||
echo " -?, -h, --help this help"
|
||||
echo " Examples"
|
||||
echo " bash build-services.sh -sp /app/DocSpace"
|
||||
exit 0
|
||||
;;
|
||||
* )
|
||||
echo "Unknown parameter $1" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
cd ${SRC_PATH}
|
||||
function get_services_name {
|
||||
if [[ $# -gt 0 ]]
|
||||
then
|
||||
ARRAY_NAME_SERVICES=($(echo $1 | tr "," " "))
|
||||
fi
|
||||
}
|
||||
|
||||
# Builds a project dotnetcore dependencies
|
||||
function build_dotnetcore_backend {
|
||||
if [[ ${BUILD_DOTNET_CORE_ARGS} == "false" ]]
|
||||
then
|
||||
echo "== Build ASC.Web.slnf =="
|
||||
dotnet build ASC.Web.slnf
|
||||
else
|
||||
echo "== Build ASC.Web.slnf ${BUILD_DOTNET_CORE_ARGS} =="
|
||||
dotnet build ASC.Web.slnf ${BUILD_DOTNET_CORE_ARGS}
|
||||
fi
|
||||
if [[ $# -gt 0 ]]
|
||||
then
|
||||
local migration_check=$(echo $1 | tr '[:upper:]' '[:lower:]' | tr -d ' ')
|
||||
if [[ ${migration_check} == "true" ]]
|
||||
then
|
||||
echo "== Build ASC.Migrations.sln =="
|
||||
dotnet build ASC.Migrations.sln -o ${BUILD_PATH}/services/ASC.Migration.Runner/service/
|
||||
fi
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${SRC_PATH}/build/install/docker/docker-migration-entrypoint.sh to ASC.Migration.Runner =="
|
||||
cp ${SRC_PATH}/build/install/docker/docker-migration-entrypoint.sh ${BUILD_PATH}/services/ASC.Migration.Runner/service/
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Publish BACKEND dotnetcore services
|
||||
function backend-dotnet-publish {
|
||||
# List of names for nodejs backend projects
|
||||
get_services_name "${BACKEND_DOTNETCORE_SERVICES}"
|
||||
|
||||
if [[ ${PUBLISH_BACKEND_ARGS} == "false" ]]
|
||||
then
|
||||
for i in ${!ARRAY_NAME_SERVICES[@]}; do
|
||||
echo "== Publish ${ARRAY_NAME_SERVICES[$i]}.csproj project =="
|
||||
SERVICE_DIR="$(dirname "$(find ${SRC_PATH} -type f -name "${ARRAY_NAME_SERVICES[$i]}".csproj)")"
|
||||
cd ${SERVICE_DIR}
|
||||
dotnet publish -c ${PUBLISH_CNF} --self-contained ${SELF_CONTAINED} -o ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ${ARRAY_NAME_SERVICES[$i]} =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
fi
|
||||
done
|
||||
else
|
||||
for i in ${!ARRAY_NAME_SERVICES[@]}; do
|
||||
echo "== Publish ${ARRAY_NAME_SERVICES[$i]}.csproj project =="
|
||||
SERVICE_DIR="$(dirname "$(find ${SRC_PATH} -type f -name "${ARRAY_NAME_SERVICES[$i]}".csproj)")"
|
||||
cd ${SERVICE_DIR}
|
||||
dotnet publish -c ${PUBLISH_CNF} --self-contained ${SELF_CONTAINED} ${PUBLISH_BACKEND_ARGS} -o ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ${ARRAY_NAME_SERVICES[$i]} =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
ARRAY_NAME_SERVICES=()
|
||||
}
|
||||
|
||||
# Install BACKEND dependencies for nodjs's projects
|
||||
function backend-nodejs-publish {
|
||||
# List of names for nodejs backend projects
|
||||
get_services_name "${BACKEND_NODEJS_SERVICES}"
|
||||
for i in ${!ARRAY_NAME_SERVICES[@]}; do
|
||||
echo "== Build ${ARRAY_NAME_SERVICES[$i]} project =="
|
||||
yarn install --cwd ${SRC_PATH}/common/${ARRAY_NAME_SERVICES[$i]} --frozen-lockfile && \
|
||||
mkdir -p ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/ && \
|
||||
cp -rfv ${SRC_PATH}/common/${ARRAY_NAME_SERVICES[$i]}/* ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ${ARRAY_NAME_SERVICES[$i]} =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${BUILD_PATH}/services/${ARRAY_NAME_SERVICES[$i]}/service/
|
||||
fi
|
||||
done
|
||||
ARRAY_NAME_SERVICES=()
|
||||
}
|
||||
|
||||
# Install FRONTEND dependencies for nodjs's projects
|
||||
function build_nodejs_frontend {
|
||||
echo "== yarn install =="
|
||||
yarn install
|
||||
# Install debug config mode
|
||||
if [[ $# -gt 0 ]]
|
||||
then
|
||||
local debug_info_check=$(echo $1 | tr '[:upper:]' '[:lower:]' | tr -d ' ')
|
||||
if [[ ${debug_info_check} == "true" ]]
|
||||
then
|
||||
echo "== yarn debug-info =="
|
||||
yarn debug-info
|
||||
fi
|
||||
fi
|
||||
echo "== yarn ${FRONTEND_BUILD_ARGS} =="
|
||||
yarn ${FRONTEND_BUILD_ARGS}
|
||||
|
||||
echo "== yarn ${FRONTEND_DEPLOY_ARGS} =="
|
||||
yarn ${FRONTEND_DEPLOY_ARGS}
|
||||
if [[ ${DOCKER_ENTRYPOINT} != "false" ]]
|
||||
then
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} to ASC.Login =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${SRC_PATH}/build/deploy/login/
|
||||
echo "== ADD ${DOCKER_ENTRYPOINT} toASC.Editors =="
|
||||
cp ${DOCKER_ENTRYPOINT} ${SRC_PATH}/build/deploy/editor/
|
||||
fi
|
||||
}
|
||||
|
||||
function run {
|
||||
case $1 in
|
||||
all )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
backend-nodejs-publish
|
||||
build_nodejs_frontend "${DEBUG_INFO_CHECK}"
|
||||
backend-dotnet-publish
|
||||
;;
|
||||
frontend-build )
|
||||
build_nodejs_frontend "${DEBUG_INFO_CHECK}"
|
||||
;;
|
||||
backend-publish )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
backend-nodejs-publish
|
||||
backend-dotnet-publish
|
||||
;;
|
||||
|
||||
backend-dotnet-publish )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
backend-dotnet-publish
|
||||
;;
|
||||
backend-nodejs-publish )
|
||||
backend-nodejs-publish
|
||||
;;
|
||||
backend-build )
|
||||
build_dotnetcore_backend "${MIGRATION_CHECK}"
|
||||
;;
|
||||
* )
|
||||
echo "Unknown - \"$1\", Ex. all/frontend-build/backend-publish/backend-dotnet-publish/backend-nodejs-publish/backend-build" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
run "${PROPERTY_BUILD}"
|
@ -1,212 +1,372 @@
|
||||
FROM ubuntu:18.04
|
||||
ARG SRC_PATH="/app/onlyoffice/src"
|
||||
ARG BUILD_PATH="/var/www"
|
||||
ARG DOTNET_SDK="mcr.microsoft.com/dotnet/sdk:7.0"
|
||||
ARG DOTNET_RUN="mcr.microsoft.com/dotnet/aspnet:7.0"
|
||||
|
||||
ARG RELEASE_DATE="2016-06-21"
|
||||
ARG RELEASE_DATE_SIGN=""
|
||||
ARG VERSION="8.9.0.190"
|
||||
ARG SOURCE_REPO_URL="deb http://static.teamlab.com.s3.amazonaws.com/repo/debian squeeze main"
|
||||
FROM $DOTNET_SDK AS base
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG BUILD_DOTNET_CORE_ARGS
|
||||
ENV BUILD_DOTNET_CORE_ARGS=${BUILD_DOTNET_CORE_ARGS}
|
||||
ARG PROPERTY_BUILD="all"
|
||||
ARG BACKEND_NODEJS_SERVICES
|
||||
ENV BACKEND_NODEJS_SERVICES=${BACKEND_NODEJS_SERVICES}
|
||||
ARG BACKEND_DOTNETCORE_SERVICES
|
||||
ENV BACKEND_DOTNETCORE_SERVICES=${BACKEND_DOTNETCORE_SERVICES}
|
||||
ARG SELF_CONTAINED=""
|
||||
ARG PUBLISH_BACKEND_ARGS
|
||||
ENV PUBLISH_BACKEND_ARGS=${PUBLISH_BACKEND_ARGS}
|
||||
ARG PUBLISH_CNF="Release"
|
||||
ARG FRONTEND_BUILD_ARGS="build"
|
||||
ARG FRONTEND_DEPLOY_ARGS="deploy"
|
||||
ARG DEBUG_INFO_CHECK="true"
|
||||
ARG MIGRATION_CHECK="true"
|
||||
ARG GIT_BRANCH="master"
|
||||
ARG RELEASE_DATE="2016-06-22"
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG GIT_BRANCH="develop"
|
||||
ARG PRODUCT_VERSION=0.0.0
|
||||
ARG BUILD_NUMBER=0
|
||||
|
||||
LABEL onlyoffice.community.release-date="${RELEASE_DATE}" \
|
||||
onlyoffice.community.version="${VERSION}" \
|
||||
LABEL onlyoffice.appserver.release-date="${RELEASE_DATE}" \
|
||||
maintainer="Ascensio System SIA <support@onlyoffice.com>"
|
||||
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US:en \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
WORKDIR ${SRC_PATH}
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN apt-get -y update && \
|
||||
apt-get -y upgrade && \
|
||||
apt-get -y dist-upgrade && \
|
||||
apt-get -yq install gnupg2 ca-certificates && \
|
||||
apt-get install -yq sudo locales && \
|
||||
apt-get install -yq \
|
||||
sudo \
|
||||
locales \
|
||||
git \
|
||||
npm && \
|
||||
locale-gen en_US.UTF-8 && \
|
||||
npm install --global yarn && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
RUN git clone -b main/community-server https://github.com/ONLYOFFICE/document-templates ${SRC_PATH}/ASC.Files/Server/DocStore
|
||||
|
||||
RUN mkdir -p /app/onlyoffice/ && \
|
||||
find config/ -maxdepth 1 -name "*.json" | grep -v test | grep -v dev | xargs tar -cvf config.tar && \
|
||||
tar -C "/app/onlyoffice/" -xvf config.tar && \
|
||||
cp config/*.config /app/onlyoffice/config/ && \
|
||||
mkdir -p ${SRC_PATH}/build/deploy/client && \
|
||||
mkdir -p ${SRC_PATH}/build/deploy/public && \
|
||||
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 && \
|
||||
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
cd ${SRC_PATH}/build/install/common/ && \
|
||||
bash build-services.sh \
|
||||
-sp "${SRC_PATH}" \
|
||||
-bp "${BUILD_PATH}" \
|
||||
-pb "${PROPERTY_BUILD}" \
|
||||
-sc "${SELF_CONTAINED}" \
|
||||
-pc "${PUBLISH_CNF}" \
|
||||
-yb "${FRONTEND_BUILD_ARGS}" \
|
||||
-yd "${FRONTEND_DEPLOY_ARGS}" \
|
||||
-dc "${DEBUG_INFO_CHECK}" \
|
||||
-mc "${MIGRATION_CHECK}" &&\
|
||||
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.Files/Service/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.Files/Server/* && \
|
||||
rm -rf ${SRC_PATH}/products/ASC.People/Server/*
|
||||
|
||||
FROM $DOTNET_RUN as dotnetrun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
# add defualt user and group for no-root run
|
||||
RUN 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 && \
|
||||
addgroup --system --gid 104 elasticsearch && \
|
||||
adduser -uid 103 --quiet --home /nonexistent --system --gid 104 elasticsearch && \
|
||||
locale-gen en_US.UTF-8 && \
|
||||
chown onlyoffice:onlyoffice /app/onlyoffice -R && \
|
||||
chown onlyoffice:onlyoffice /var/log -R && \
|
||||
chown onlyoffice:onlyoffice /var/www -R && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq software-properties-common wget curl cron rsyslog && \
|
||||
curl -OL http://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb && \
|
||||
echo "mysql-apt-config mysql-apt-config/repo-codename select bionic" | sudo debconf-set-selections && \
|
||||
echo "mysql-apt-config mysql-apt-config/repo-distro select ubuntu" | sudo debconf-set-selections && \
|
||||
echo "mysql-apt-config mysql-apt-config/select-server select mysql-8.0" | sudo debconf-set-selections && \
|
||||
DEBIAN_FRONTEND=noninteractive dpkg -i mysql-apt-config_0.8.15-1_all.deb && \
|
||||
rm -f mysql-apt-config_0.8.15-1_all.deb && \
|
||||
wget http://nginx.org/keys/nginx_signing.key && \
|
||||
apt-key add nginx_signing.key && \
|
||||
echo "deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \
|
||||
echo "deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \
|
||||
apt-get install -yq openjdk-8-jre-headless && \
|
||||
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - && \
|
||||
apt-get install -yq apt-transport-https && \
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \
|
||||
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | tee /etc/apt/sources.list.d/mono-official.list && \
|
||||
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.list && \
|
||||
apt-get install -yq \
|
||||
python3-pip \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
libgdiplus && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
#USER onlyoffice
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM node:18.12.1-slim as noderun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN 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 install -yq elasticsearch=7.4.0 && \
|
||||
add-apt-repository -y ppa:certbot/certbot && \
|
||||
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \
|
||||
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \
|
||||
dpkg -i packages-microsoft-prod.deb && \
|
||||
apt-get -y update && \
|
||||
apt-get install -yq nginx && \
|
||||
cd ~ && \
|
||||
wget https://downloads.apache.org/kafka/2.5.0/kafka_2.12-2.5.0.tgz && \
|
||||
tar xzf kafka_2.12-2.5.0.tgz && \
|
||||
rm kafka_2.12-2.5.0.tgz && \
|
||||
echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
||||
apt-get install -yq libgdiplus \
|
||||
python-certbot-nginx \
|
||||
htop \
|
||||
nano \
|
||||
dnsutils \
|
||||
python3-pip \
|
||||
multiarch-support \
|
||||
iproute2 \
|
||||
ffmpeg \
|
||||
jq \
|
||||
git \
|
||||
yarn \
|
||||
dotnet-sdk-3.1 \
|
||||
supervisor \
|
||||
mysql-client \
|
||||
mysql-server
|
||||
apt-get install -yq \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
python3-pip && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN git clone https://github.com/ONLYOFFICE/AppServer.git /app/onlyoffice/src/ && \
|
||||
cd /app/onlyoffice/src/ && \
|
||||
git checkout ${GIT_BRANCH} && \
|
||||
git pull
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
yarn install --cwd web/ASC.Web.Components --frozen-lockfile > build/ASC.Web.Components.log && \
|
||||
yarn pack --cwd web/ASC.Web.Components
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
yarn remove asc-web-components --cwd web/ASC.Web.Common --peer && \
|
||||
yarn add file:../../$component --cwd web/ASC.Web.Common --cache-folder ../../yarn --peer && \
|
||||
yarn install --cwd web/ASC.Web.Common --frozen-lockfile > build/ASC.Web.Common.log && \
|
||||
yarn pack --cwd web/ASC.Web.Common
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
npm run build:storybook --prefix web/ASC.Web.Components && \
|
||||
mkdir -p /var/www/story/ && \
|
||||
cp -Rf web/ASC.Web.Components/storybook-static/* /var/www/story/
|
||||
## Nginx image ##
|
||||
FROM nginx AS proxy
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG COUNT_WORKER_CONNECTIONS=1024
|
||||
ENV DNS_NAMESERVER=127.0.0.11 \
|
||||
COUNT_WORKER_CONNECTIONS=$COUNT_WORKER_CONNECTIONS \
|
||||
MAP_HASH_BUCKET_SIZE=""
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
common=$(ls web/ASC.Web.Common/asc-web-common-v1.*.tgz) && \
|
||||
yarn remove asc-web-components asc-web-common --cwd web/ASC.Web.Client && \
|
||||
yarn add ../../$component --cwd web/ASC.Web.Client --cache-folder ../../yarn && \
|
||||
yarn add ../../$common --cwd web/ASC.Web.Client --cache-folder ../../yarn && \
|
||||
yarn install --cwd web/ASC.Web.Client --frozen-lockfile || (cd web/ASC.Web.Client && npm i && cd ../../) && \
|
||||
npm run build --prefix web/ASC.Web.Client && \
|
||||
rm -rf /var/www/studio/client/* && \
|
||||
mkdir -p /var/www/studio/client && \
|
||||
cp -rf web/ASC.Web.Client/build/* /var/www/studio/client
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq vim && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /usr/share/nginx/html/*
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
common=$(ls web/ASC.Web.Common/asc-web-common-v1.*.tgz) && \
|
||||
yarn remove asc-web-components asc-web-common --cwd products/ASC.Files/Client && \
|
||||
yarn add ../../../$component --cwd products/ASC.Files/Client --cache-folder ../../../yarn && \
|
||||
yarn add ../../../$common --cwd products/ASC.Files/Client --cache-folder ../../../yarn && \
|
||||
yarn install --cwd products/ASC.Files/Client --frozen-lockfile || (cd products/ASC.Files/Client && npm i && cd ../../../) && \
|
||||
npm run build --prefix products/ASC.Files/Client && \
|
||||
mkdir -p /var/www/products/ASC.Files/client && \
|
||||
cp -Rf products/ASC.Files/Client/build/* /var/www/products/ASC.Files/client && \
|
||||
mkdir -p /var/www/products/ASC.Files/client/products/files
|
||||
# copy static services files and config values
|
||||
COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
|
||||
COPY --from=base /etc/nginx/includes /etc/nginx/includes
|
||||
COPY --from=base ${SRC_PATH}/build/deploy/client ${BUILD_PATH}/client
|
||||
COPY --from=base ${SRC_PATH}/build/deploy/public ${BUILD_PATH}/public
|
||||
COPY --from=base ${SRC_PATH}/build/install/docker/config/nginx/templates/upstream.conf.template /etc/nginx/templates/upstream.conf.template
|
||||
COPY --from=base ${SRC_PATH}/build/install/docker/config/nginx/templates/nginx.conf.template /etc/nginx/nginx.conf.template
|
||||
COPY --from=base ${SRC_PATH}/build/install/docker/prepare-nginx-proxy.sh /docker-entrypoint.d/prepare-nginx-proxy.sh
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \
|
||||
common=$(ls web/ASC.Web.Common/asc-web-common-v1.*.tgz) && \
|
||||
yarn remove asc-web-components asc-web-common --cwd products/ASC.People/Client && \
|
||||
yarn add ../../../$component --cwd products/ASC.People/Client --cache-folder ../../../yarn && \
|
||||
yarn add ../../../$common --cwd products/ASC.People/Client --cache-folder ../../../yarn && \
|
||||
yarn install --cwd products/ASC.People/Client --frozen-lockfile || (cd products/ASC.People/Client && npm i && cd ../../../) && \
|
||||
npm run build --prefix products/ASC.People/Client && \
|
||||
mkdir -p /var/www/products/ASC.People/client && \
|
||||
cp -Rf products/ASC.People/Client/build/* /var/www/products/ASC.People/client && \
|
||||
mkdir -p /var/www/products/ASC.People/client/products/people
|
||||
# add defualt user and group for no-root run
|
||||
RUN chown nginx:nginx /etc/nginx/* -R && \
|
||||
chown nginx:nginx /docker-entrypoint.d/* && \
|
||||
# changes for upstream configure
|
||||
sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5012/$service_backup/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5007/$service_files/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5004/$service_people_server/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5000/$service_api/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5003/$service_studio/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9899/$service_socket/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5013/$service_doceditor/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5011/$service_login/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
if [[ -z "${SERVICE_CLIENT}" ]] ; then sed -i 's/127.0.0.1:5001/$service_client/' /etc/nginx/conf.d/onlyoffice.conf; fi && \
|
||||
sed -i 's/127.0.0.1:5033/$service_healthchecks/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf
|
||||
|
||||
RUN cd /app/onlyoffice/src/ && \
|
||||
rm -f /etc/nginx/conf.d/* && \
|
||||
mkdir -p /var/www/public/ && cp -f public/* /var/www/public/ && \
|
||||
mkdir -p /app/onlyoffice/config/ && cp -rf config/* /app/onlyoffice/config/ && \
|
||||
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 -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
dotnet restore ASC.Web.slnf && \
|
||||
dotnet build -r linux-x64 ASC.Web.slnf && \
|
||||
cd products/ASC.People/Server && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/products/ASC.People/server && \
|
||||
cd ../../../ && \
|
||||
cd products/ASC.Files/Server && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/products/ASC.Files/server && \
|
||||
cp -avrf DocStore /var/www/products/ASC.Files/server/ && \
|
||||
cd ../../../ && \
|
||||
cd products/ASC.Files/Service && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/products/ASC.Files/service && \
|
||||
cd ../../../ && \
|
||||
cd web/ASC.Web.Api && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/studio/api && \
|
||||
cd ../../ && \
|
||||
cd web/ASC.Web.Studio && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/studio/server && \
|
||||
cd ../../ && \
|
||||
cd common/services/ASC.Data.Backup && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/backup && \
|
||||
cd ../../../ && \
|
||||
cd common/services/ASC.Notify && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/notify && \
|
||||
cd ../../../ && \
|
||||
cd common/services/ASC.ApiSystem && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/apisystem && \
|
||||
cd ../../../ && \
|
||||
cd common/services/ASC.Thumbnails.Svc && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /services/thumb/service && \
|
||||
cd ../../../ && \
|
||||
yarn install --cwd common/ASC.Thumbnails --frozen-lockfile && \
|
||||
mkdir -p /var/www/services/thumb/client && cp -Rf common/ASC.Thumbnails/* /var/www/services/thumb/client && \
|
||||
cd common/services/ASC.UrlShortener.Svc && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /services/urlshortener/service && \
|
||||
cd ../../../ && \
|
||||
yarn install --cwd common/ASC.UrlShortener --frozen-lockfile && \
|
||||
mkdir -p /var/www/services/urlshortener/client && cp -Rf common/ASC.UrlShortener/* /var/www/services/urlshortener/client && \
|
||||
cd common/services/ASC.Studio.Notify && \
|
||||
dotnet -d publish --no-build --self-contained -r linux-x64 -o /var/www/services/studio.notify
|
||||
## Doceditor ##
|
||||
FROM noderun as doceditor
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Editors/editor
|
||||
|
||||
COPY config/mysql/conf.d/mysql.cnf /etc/mysql/conf.d/mysql.cnf
|
||||
COPY config/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/deploy/editor/ .
|
||||
|
||||
COPY config/createdb.sql /app/onlyoffice/createdb.sql
|
||||
COPY config/onlyoffice.sql /app/onlyoffice/onlyoffice.sql
|
||||
COPY config/onlyoffice.data.sql /app/onlyoffice/onlyoffice.data.sql
|
||||
COPY config/onlyoffice.resources.sql /app/onlyoffice/onlyoffice.resources.sql
|
||||
CMD ["server.js", "ASC.Editors"]
|
||||
|
||||
RUN sed -i 's/Server=.*;Port=/Server=127.0.0.1;Port=/' /app/onlyoffice/config/appsettings.test.json
|
||||
## Login ##
|
||||
FROM noderun as login
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Login/login
|
||||
|
||||
RUN mkdir -p /var/mysqld/ && \
|
||||
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld /var/mysqld/ && \
|
||||
sudo -u mysql bash -c "/usr/bin/pidproxy /var/mysqld/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/mysqld/mysqld.pid &" && \
|
||||
sleep 5s && \
|
||||
mysql -e "CREATE DATABASE IF NOT EXISTS onlyoffice CHARACTER SET utf8 COLLATE 'utf8_general_ci'" && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/createdb.sql && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/onlyoffice.sql && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/onlyoffice.data.sql && \
|
||||
mysql -D "onlyoffice" < /app/onlyoffice/onlyoffice.resources.sql && \
|
||||
mysql -D "onlyoffice" -e 'CREATE USER IF NOT EXISTS "onlyoffice_user"@"localhost" IDENTIFIED WITH mysql_native_password BY "onlyoffice_pass";' && \
|
||||
mysql -D "onlyoffice" -e 'GRANT ALL PRIVILEGES ON *.* TO 'onlyoffice_user'@'localhost';' && \
|
||||
killall -u mysql -n mysql
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/deploy/login/ .
|
||||
|
||||
RUN rm -rf /var/lib/apt/lists/*
|
||||
CMD ["server.js", "ASC.Login"]
|
||||
|
||||
VOLUME /var/lib/mysql
|
||||
## ASC.Data.Backup.BackgroundTasks ##
|
||||
FROM dotnetrun AS backup_background
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/service/
|
||||
|
||||
EXPOSE 80 443 8092 8081
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/service/ .
|
||||
|
||||
ENTRYPOINT ["/usr/bin/supervisord", "--"]
|
||||
CMD ["ASC.Data.Backup.BackgroundTasks.dll", "ASC.Data.Backup.BackgroundTasks", "core:eventBus:subscriptionClientName=asc_event_bus_backup_queue"]
|
||||
|
||||
# ASC.ApiSystem ##
|
||||
FROM dotnetrun AS api_system
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.ApiSystem/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ApiSystem/service/ .
|
||||
|
||||
CMD ["ASC.ApiSystem.dll", "ASC.ApiSystem"]
|
||||
|
||||
## ASC.ClearEvents ##
|
||||
FROM dotnetrun AS clear-events
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.ClearEvents/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.ClearEvents/service/ .
|
||||
|
||||
CMD ["ASC.ClearEvents.dll", "ASC.ClearEvents"]
|
||||
|
||||
## ASC.Data.Backup ##
|
||||
FROM dotnetrun AS backup
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Data.Backup/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Data.Backup/service/ .
|
||||
|
||||
CMD ["ASC.Data.Backup.dll", "ASC.Data.Backup"]
|
||||
|
||||
## ASC.Files ##
|
||||
FROM dotnetrun AS files
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/server/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files/service/ .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/ASC.Files/Server/DocStore .
|
||||
|
||||
CMD ["ASC.Files.dll", "ASC.Files"]
|
||||
|
||||
## ASC.Files.Service ##
|
||||
FROM dotnetrun AS files_services
|
||||
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files.Service/service/ .
|
||||
COPY --from=linuxserver/ffmpeg:latest --chown=onlyoffice:onlyoffice /usr/local/bin/ /usr/local/bin/
|
||||
|
||||
CMD ["ASC.Files.Service.dll", "ASC.Files.Service", "core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue"]
|
||||
|
||||
## ASC.Notify ##
|
||||
FROM dotnetrun AS notify
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Notify/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Notify/service/ .
|
||||
|
||||
CMD ["ASC.Notify.dll", "ASC.Notify", "core:eventBus:subscriptionClientName=asc_event_bus_notify_queue"]
|
||||
|
||||
## ASC.People ##
|
||||
FROM dotnetrun AS people_server
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.People/server/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.People/service/ .
|
||||
|
||||
CMD ["ASC.People.dll", "ASC.People"]
|
||||
|
||||
## ASC.Socket.IO ##
|
||||
FROM noderun AS socket
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Socket.IO/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Socket.IO/service/ .
|
||||
|
||||
CMD ["server.js", "ASC.Socket.IO"]
|
||||
|
||||
## ASC.SsoAuth ##
|
||||
FROM noderun AS ssoauth
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.SsoAuth/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.SsoAuth/service/ .
|
||||
|
||||
CMD ["app.js", "ASC.SsoAuth"]
|
||||
|
||||
## ASC.Studio.Notify ##
|
||||
FROM dotnetrun AS studio_notify
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-entrypoint.py .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Studio.Notify/service/ .
|
||||
|
||||
CMD ["ASC.Studio.Notify.dll", "ASC.Studio.Notify"]
|
||||
|
||||
## ASC.Web.Api ##
|
||||
FROM dotnetrun AS api
|
||||
WORKDIR ${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/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 dotnetrun AS studio
|
||||
WORKDIR ${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/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.Web.HealthChecks.UI ##
|
||||
FROM dotnetrun AS healthchecks
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Web.HealthChecks.UI/service
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-healthchecks-entrypoint.sh .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Web.HealthChecks.UI/service/ .
|
||||
|
||||
ENTRYPOINT ["./docker-healthchecks-entrypoint.sh"]
|
||||
CMD ["ASC.Web.HealthChecks.UI.dll", "ASC.Web.HealthChecks.UI"]
|
||||
|
||||
## ASC.Migration.Runner ##
|
||||
FROM $DOTNET_RUN AS onlyoffice-migration-runner
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/docker-migration-entrypoint.sh .
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Migration.Runner/service/ .
|
||||
|
||||
ENTRYPOINT ["./docker-migration-entrypoint.sh"]
|
||||
|
||||
## image for k8s bin-share ##
|
||||
FROM busybox:latest AS bin_share
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir -p /app/appserver/ASC.Files/server && \
|
||||
mkdir -p /app/appserver/ASC.People/server/ && \
|
||||
mkdir -p /app/appserver/ASC.CRM/server/ && \
|
||||
mkdir -p /app/appserver/ASC.Projects/server/ && \
|
||||
mkdir -p /app/appserver/ASC.Calendar/server/ && \
|
||||
mkdir -p /app/appserver/ASC.Mail/server/ && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -u 104 onlyoffice --home /var/www/onlyoffice --system -G onlyoffice
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
COPY --from=base /var/www/services/ASC.Files/service/ /app/appserver/ASC.Files/server/
|
||||
COPY --from=base /var/www/services/ASC.People/service/ /app/appserver/ASC.People/server/
|
||||
ENTRYPOINT ["./app/docker-entrypoint.sh"]
|
||||
|
||||
## image for k8s wait-bin-share ##
|
||||
FROM busybox:latest AS wait_bin_share
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN mkdir /app
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${SRC_PATH}/build/install/docker/wait-bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
ENTRYPOINT ["./app/docker-entrypoint.sh"]
|
||||
|
115
build/install/docker/Dockerfile.runtime
Normal file
115
build/install/docker/Dockerfile.runtime
Normal file
@ -0,0 +1,115 @@
|
||||
ARG SRC_PATH="/app/onlyoffice/src"
|
||||
ARG BUILD_PATH="/var/www"
|
||||
ARG DOTNET_SDK="mcr.microsoft.com/dotnet/sdk:7.0"
|
||||
ARG DOTNET_RUN="mcr.microsoft.com/dotnet/aspnet:7.0"
|
||||
|
||||
FROM alpine:latest AS base
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
|
||||
WORKDIR ${SRC_PATH}
|
||||
|
||||
COPY /config ./config
|
||||
|
||||
RUN find config/ -maxdepth 1 -name "*.json" | grep -v test | grep -v dev | 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 && \
|
||||
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf
|
||||
|
||||
FROM $DOTNET_RUN as dotnetrun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
# add defualt user and group for no-root run
|
||||
RUN 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 install -yq \
|
||||
python3-pip \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
libgdiplus && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM node:18.12.1-slim as noderun
|
||||
ARG BUILD_PATH
|
||||
ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
|
||||
RUN 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 install -yq \
|
||||
nano \
|
||||
curl \
|
||||
vim \
|
||||
python3-pip && \
|
||||
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
|
||||
|
||||
EXPOSE 5050
|
||||
ENTRYPOINT ["python3", "docker-entrypoint.py"]
|
||||
|
||||
FROM nginx AS proxy
|
||||
ARG SRC_PATH
|
||||
ARG BUILD_PATH
|
||||
ARG COUNT_WORKER_CONNECTIONS=1024
|
||||
ENV DNS_NAMESERVER=127.0.0.11 \
|
||||
COUNT_WORKER_CONNECTIONS=$COUNT_WORKER_CONNECTIONS \
|
||||
MAP_HASH_BUCKET_SIZE=""
|
||||
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq vim && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /usr/share/nginx/html/*
|
||||
|
||||
# copy static services files and config values
|
||||
COPY --from=base /etc/nginx/conf.d /etc/nginx/conf.d
|
||||
COPY /build/install/docker/config/nginx/templates/upstream.conf.template /etc/nginx/templates/upstream.conf.template
|
||||
COPY /build/install/docker/config/nginx/templates/nginx.conf.template /etc/nginx/nginx.conf.template
|
||||
COPY /build/install/docker/prepare-nginx-proxy.sh /docker-entrypoint.d/prepare-nginx-proxy.sh
|
||||
|
||||
# todo modify for client
|
||||
# add defualt user and group for no-root run
|
||||
RUN chown nginx:nginx /etc/nginx/* -R && \
|
||||
chown nginx:nginx /docker-entrypoint.d/* && \
|
||||
# changes for upstream configure
|
||||
sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5012/$service_backup/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5007/$service_files/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5004/$service_people_server/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5000/$service_api/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5003/$service_studio/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9899/$service_socket/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:9834/$service_sso/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5013/$service_doceditor/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5011/$service_login/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5001/$service_client/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/127.0.0.1:5033/$service_healthchecks/' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \
|
||||
sed -i 's/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf
|
154
build/install/docker/docspace.overcome.yml
Normal file
154
build/install/docker/docspace.overcome.yml
Normal file
@ -0,0 +1,154 @@
|
||||
x-profiles-local: &x-profiles-local
|
||||
profiles: ["backend-local"]
|
||||
environment:
|
||||
BUILD_PATH: "/var/www"
|
||||
SRC_PATH: "/app/services"
|
||||
ROOT_DIR: ""
|
||||
ENV_EXTENSION: "dev"
|
||||
|
||||
services:
|
||||
onlyoffice-backup-background-tasks:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/
|
||||
command:
|
||||
[
|
||||
"ASC.Data.Backup.BackgroundTasks.dll",
|
||||
"ASC.Data.Backup.BackgroundTasks",
|
||||
"core:eventBus:subscriptionClientName=asc_event_bus_backup_queue",
|
||||
]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Data.Backup.BackgroundTasks/service:${BUILD_PATH}/services/ASC.Data.Backup.BackgroundTasks/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-backup:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Data.Backup/service/
|
||||
command: ["ASC.Data.Backup.dll", "ASC.Data.Backup"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Data.Backup/service:${BUILD_PATH}/services/ASC.Data.Backup/service/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-files:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/products/ASC.Files/server/
|
||||
command: ["ASC.Files.dll", "ASC.Files"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Files/service:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-files-services:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/products/ASC.Files/service/
|
||||
command:
|
||||
[
|
||||
"ASC.Files.Service.dll",
|
||||
"ASC.Files.Service",
|
||||
"core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue",
|
||||
]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Files.Service/service:${BUILD_PATH}/products/ASC.Files/service/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-people-server:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/products/ASC.People/server/
|
||||
command: ["ASC.People.dll", "ASC.People"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.People/service:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-socket:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Nodejs_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Socket.IO/
|
||||
command: ["server.js", "ASC.Socket.IO"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Socket.IO/service:${BUILD_PATH}/services/ASC.Socket.IO/
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
command: ["ASC.Studio.Notify.dll", "ASC.Studio.Notify"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Studio.Notify/service:${BUILD_PATH}/services/ASC.Studio.Notify/service/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-api:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
command: ["ASC.Web.Api.dll", "ASC.Web.Api"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Web.Api/service:${BUILD_PATH}/studio/ASC.Web.Api/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-studio:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
working_dir: ${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
command: ["ASC.Web.Studio.dll", "ASC.Web.Studio"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Web.Studio/service:${BUILD_PATH}/studio/ASC.Web.Studio/
|
||||
- ${SRC_PATH}/ASC.Files/service/:${BUILD_PATH}/products/ASC.Files/server/
|
||||
- ${SRC_PATH}/ASC.People/service/:${BUILD_PATH}/products/ASC.People/server/
|
||||
- ${ROOT_DIR}/config/appsettings.${ENV_EXTENSION}.json:/app/onlyoffice/config/appsettings.${ENV_EXTENSION}.json
|
||||
- ${ROOT_DIR}/config/apisystem.${ENV_EXTENSION}.json:/app/onlyoffice/config/apisystem.${ENV_EXTENSION}.json
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Nodejs_Run}
|
||||
working_dir: ${BUILD_PATH}/services/ASC.SsoAuth/
|
||||
command: ["app.js", "ASC.SsoAuth"]
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.SsoAuth/service:${BUILD_PATH}/services/ASC.SsoAuth/
|
||||
|
||||
onlyoffice-migration-runner:
|
||||
image: ${Baseimage_Dotnet_Run}
|
||||
entrypoint: docker-migration-entrypoint.sh
|
||||
working_dir: ${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
volumes:
|
||||
- ${SRC_PATH}/ASC.Migration.Runner/service:${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
|
||||
onlyoffice-proxy:
|
||||
<<: *x-profiles-local
|
||||
image: ${Baseimage_Proxy_Run}
|
||||
environment:
|
||||
- SERVICE_CLIENT=${SERVICE_CLIENT}
|
||||
volumes:
|
||||
- ${ROOT_DIR}/public:/var/www/public/
|
||||
|
||||
onlyoffice-rabbitmq:
|
||||
<<: *x-profiles-local
|
||||
|
||||
onlyoffice-redis:
|
||||
<<: *x-profiles-local
|
||||
|
||||
onlyoffice-document-server:
|
||||
<<: *x-profiles-local
|
||||
volumes:
|
||||
- ${DATA_DIR}:/var/www/onlyoffice/Data
|
297
build/install/docker/docspace.profiles.yml
Normal file
297
build/install/docker/docspace.profiles.yml
Normal file
@ -0,0 +1,297 @@
|
||||
version: "3.8"
|
||||
x-healthcheck: &x-healthcheck
|
||||
test: curl --fail http://127.0.0.1 || exit 1
|
||||
interval: 60s
|
||||
retries: 5
|
||||
start_period: 20s
|
||||
timeout: 10s
|
||||
|
||||
x-profiles-backend: &x-profiles-backend
|
||||
profiles: ["prod", "backend"]
|
||||
|
||||
x-profiles-frontend: &x-profiles-frontend
|
||||
profiles: ["prod", "frontend"]
|
||||
|
||||
x-profiles-extra-services: &x-profiles-extra-services
|
||||
profiles: ["prod", "extra-services"]
|
||||
|
||||
x-service: &x-service-base
|
||||
container_name: base
|
||||
restart: always
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
|
||||
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
|
||||
APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS}
|
||||
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
|
||||
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
|
||||
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
|
||||
APP_URL_PORTAL: ${APP_URL_PORTAL}
|
||||
INSTALLATION_TYPE: ${INSTALLATION_TYPE}
|
||||
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
|
||||
DOCUMENT_SERVER_URL_INTERNAL: ${DOCUMENT_SERVER_URL_INTERNAL}
|
||||
KAFKA_HOST: ${KAFKA_HOST}
|
||||
ELK_HOST: ${ELK_HOST}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
volumes:
|
||||
- ${ROOT_DIR}/Data:/app/onlyoffice/data
|
||||
- files_data:/var/www/products/ASC.Files/server/
|
||||
- people_data:/var/www/products/ASC.People/server/
|
||||
|
||||
services:
|
||||
onlyoffice-elasticsearch:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: onlyoffice/elasticsearch:${ELK_VERSION}
|
||||
container_name: ${ELK_HOST}
|
||||
restart: always
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
- bootstrap.memory_lock=true
|
||||
- "ES_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true"
|
||||
- "indices.fielddata.cache.size=30%"
|
||||
- "indices.memory.index_buffer_size=30%"
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65535
|
||||
hard: 65535
|
||||
volumes:
|
||||
- es_data:/usr/share/elasticsearch/data
|
||||
expose:
|
||||
- "9200"
|
||||
- "9300"
|
||||
|
||||
onlyoffice-rabbitmq:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: rabbitmq:3
|
||||
container_name: onlyoffice-rabbitmq
|
||||
restart: always
|
||||
expose:
|
||||
- "5672"
|
||||
- "80"
|
||||
|
||||
onlyoffice-redis:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: redis:7
|
||||
container_name: onlyoffice-redis
|
||||
restart: always
|
||||
expose:
|
||||
- "6379"
|
||||
|
||||
onlyoffice-document-server:
|
||||
<<: [*x-profiles-extra-services]
|
||||
image: "${DOCUMENT_SERVER_IMAGE_NAME}"
|
||||
container_name: ${DOCUMENT_SERVER_HOST}
|
||||
# Strings below enable the JSON Web Token validation.
|
||||
environment:
|
||||
- JWT_ENABLED=true
|
||||
- JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET}
|
||||
- JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER}
|
||||
- JWT_IN_BODY=true
|
||||
expose:
|
||||
- "80"
|
||||
stdin_open: true
|
||||
restart: always
|
||||
stop_grace_period: 60s
|
||||
|
||||
onlyoffice-notify:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-notify:${DOCKER_TAG}"
|
||||
container_name: ${NOTIFY_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_NOTIFY}/health/ || exit 1
|
||||
|
||||
onlyoffice-backup-background-tasks:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup-background:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_BACKGRUOND_TASKS_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_BACKUP_BACKGRUOND_TASKS}/health/ || exit 1
|
||||
|
||||
onlyoffice-backup:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_BACKUP}/health/ || exit 1
|
||||
|
||||
onlyoffice-clear-events:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-clear-events:${DOCKER_TAG}"
|
||||
container_name: ${CLEAR_EVENTS_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_CLEAR_EVENTS}/health/ || exit 1
|
||||
|
||||
onlyoffice-files:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files:${DOCKER_TAG}"
|
||||
container_name: ${FILES_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_FILES}/health/ || exit 1
|
||||
|
||||
onlyoffice-files-services:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files-services:${DOCKER_TAG}"
|
||||
container_name: ${FILES_SERVICES_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_FILES_SERVICES}/health/ || exit 1
|
||||
|
||||
onlyoffice-people-server:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-people-server:${DOCKER_TAG}"
|
||||
container_name: ${PEOPLE_SERVER_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_PEOPLE_SERVER}/health/ || exit 1
|
||||
|
||||
onlyoffice-socket:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-socket:${DOCKER_TAG}"
|
||||
container_name: ${SOCKET_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio-notify:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_NOTIFY_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_STUDIO_NOTIFY}/health/ || exit 1
|
||||
|
||||
onlyoffice-api:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api:${DOCKER_TAG}"
|
||||
container_name: ${API_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_API}/health/ || exit 1
|
||||
|
||||
onlyoffice-api-system:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api-system:${DOCKER_TAG}"
|
||||
container_name: ${API_SYSTEM_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_API_SYSTEM}/health/ || exit 1
|
||||
|
||||
onlyoffice-studio:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_HOST}
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: curl --fail http://${SERVICE_STUDIO}/health/ || exit 1
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
<<: [*x-service-base, *x-profiles-backend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-ssoauth:${DOCKER_TAG}"
|
||||
container_name: ${SSOAUTH_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
- "9834"
|
||||
|
||||
onlyoffice-doceditor:
|
||||
<<: [*x-service-base, *x-profiles-frontend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-doceditor:${DOCKER_TAG}"
|
||||
container_name: ${DOCEDITOR_HOST}
|
||||
restart: always
|
||||
expose:
|
||||
- "5013"
|
||||
|
||||
onlyoffice-login:
|
||||
<<: [*x-service-base, *x-profiles-frontend]
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-login:${DOCKER_TAG}"
|
||||
container_name: ${LOGIN_HOST}
|
||||
restart: always
|
||||
expose:
|
||||
- "5011"
|
||||
|
||||
onlyoffice-proxy:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-proxy:${DOCKER_TAG}"
|
||||
profiles: ["prod", "backend", frontend]
|
||||
container_name: ${PROXY_HOST}
|
||||
restart: always
|
||||
healthcheck:
|
||||
<<: *x-healthcheck
|
||||
test: nginx -t || exit 1
|
||||
expose:
|
||||
- "8081"
|
||||
- "8099"
|
||||
- "8092"
|
||||
ports:
|
||||
- 8092:8092
|
||||
depends_on:
|
||||
- onlyoffice-backup-background-tasks
|
||||
- onlyoffice-backup
|
||||
- onlyoffice-clear-events
|
||||
- onlyoffice-files
|
||||
- onlyoffice-files-services
|
||||
- onlyoffice-people-server
|
||||
- onlyoffice-socket
|
||||
- onlyoffice-studio-notify
|
||||
- onlyoffice-api
|
||||
- onlyoffice-api-system
|
||||
- onlyoffice-studio
|
||||
- onlyoffice-ssoauth
|
||||
- onlyoffice-doceditor
|
||||
- onlyoffice-login
|
||||
environment:
|
||||
- SERVICE_BACKUP=${SERVICE_BACKUP}
|
||||
- SERVICE_FILES=${SERVICE_FILES}
|
||||
- SERVICE_FILES_SERVICES=${SERVICE_FILES_SERVICES}
|
||||
- SERVICE_CLEAR_EVENTS=${SERVICE_CLEAR_EVENTS}
|
||||
- SERVICE_NOTIFY=${SERVICE_NOTIFY}
|
||||
- SERVICE_PEOPLE_SERVER=${SERVICE_PEOPLE_SERVER}
|
||||
- SERVICE_SOCKET=${SERVICE_SOCKET}
|
||||
- SERVICE_STUDIO_NOTIFY=${SERVICE_STUDIO_NOTIFY}
|
||||
- SERVICE_API=${SERVICE_API}
|
||||
- SERVICE_API_SYSTEM=${SERVICE_API_SYSTEM}
|
||||
- SERVICE_STUDIO=${SERVICE_STUDIO}
|
||||
- SERVICE_SSOAUTH=${SERVICE_SSOAUTH}
|
||||
- SERVICE_DOCEDITOR=${SERVICE_DOCEDITOR}
|
||||
- SERVICE_LOGIN=${SERVICE_LOGIN}
|
||||
- SERVICE_HELTHCHECKS=${SERVICE_HELTHCHECKS}
|
||||
- DOCUMENT_SERVER=${DOCUMENT_SERVER_HOST}
|
||||
- SERVICE_PORT=${SERVICE_PORT}
|
||||
volumes:
|
||||
- proxy_log:/var/log/nginx
|
||||
|
||||
onlyoffice-migration-runner:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}"
|
||||
profiles: ["migration-runner"]
|
||||
container_name: ${MIGRATION_RUNNER_HOST}
|
||||
restart: "no"
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
es_data:
|
||||
proxy_log:
|
||||
app_data:
|
||||
files_data:
|
||||
people_data:
|
Loading…
Reference in New Issue
Block a user