diff --git a/build.backend.docker.bat b/build.backend.docker.bat deleted file mode 100644 index e538a525ed..0000000000 --- a/build.backend.docker.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off - -pwsh %~dp0/build.backend.docker.ps1 %* - -echo. - -pause \ No newline at end of file diff --git a/build.backend.docker.ps1 b/build.backend.docker.ps1 deleted file mode 100644 index 70561f6d62..0000000000 --- a/build.backend.docker.ps1 +++ /dev/null @@ -1,115 +0,0 @@ -$PSversionMajor = $PSVersionTable.PSVersion | sort-object major | ForEach-Object { $_.major } -$PSversionMinor = $PSVersionTable.PSVersion | sort-object minor | ForEach-Object { $_.minor } - -if ($PSversionMajor -lt 7 -or $PSversionMinor -lt 2) { - Write-Error "Powershell version must be greater than or equal to 7.2." - exit -} - -$RootDir = Split-Path -Parent $PSScriptRoot -$DockerDir = "$RootDir\buildtools\install\docker" -$LocalIp = (Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.DHCPEnabled -ne $null -and $_.DefaultIPGateway -ne $null }).IPAddress | Select-Object -First 1 - -$Doceditor = ($LocalIp + ":5013") -$Login = ($LocalIp + ":5011") -$Client = ($LocalIp + ":5001") -$Management = ($LocalIp + ":5015") -$PortalUrl = ("http://" + $LocalIp) -$ProxyVersion="v1.0.0" - -# Stop all backend services" -& "$PSScriptRoot\start\stop.backend.docker.ps1" - -$Env:COMPOSE_IGNORE_ORPHANS = "True" - -$Force = $False - -if ($args[0] -eq "--force") { - $Force = $True -} - -Write-Host "FORCE BUILD BASE IMAGES: $Force" -ForegroundColor Blue - -$ExistsNetwork= docker network ls --format '{{.Name}}' | findstr "onlyoffice" - -if (-not $ExistsNetwork) { - docker network create --driver bridge onlyoffice -} - -Write-Host "Run MySQL" -ForegroundColor Green -docker compose -f "$DockerDir\db.yml" up -d - -if ($args[0] -eq "--dns" ) { - Write-Host "Run local dns server" -ForegroundColor Green - $Env:ROOT_DIR=$RootDir - docker compose -f "$DockerDir\dnsmasq.yml" up -d -} - -Write-Host "Build backend services (to `publish/` folder)" -ForegroundColor Green -& "$PSScriptRoot\install\common\build-services.ps1" - -$Env:DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver-de:latest" -$Env:INSTALLATION_TYPE = "ENTERPRISE" - -if ($args[0] -eq "--community" ) { - $Env:DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver:latest" - $Env:INSTALLATION_TYPE = "COMMUNITY" -} - -Set-Location -Path $RootDir - -$DotnetVersion = "dev" -$NodeVersion = "dev" -$ProxyVersion = "dev" - -$ExistsDotnet= docker images --format "{{.Repository}}:{{.Tag}}" | findstr "onlyoffice/4testing-docspace-dotnet-runtime:$DotnetVersion" -$ExistsNode= docker images --format "{{.Repository}}:{{.Tag}}" | findstr "onlyoffice/4testing-docspace-nodejs-runtime:$NodeVersion" -$ExistsProxy= docker images --format "{{.Repository}}:{{.Tag}}" | findstr "onlyoffice/4testing-docspace-proxy-runtime:$ProxyVersion" - -if (!$ExistsDotnet -or $Force) { - Write-Host "Build dotnet base image from source (apply new dotnet config)" -ForegroundColor Green - docker build -t "onlyoffice/4testing-docspace-dotnet-runtime:$DotnetVersion" -f "$DockerDir\Dockerfile.runtime" --target dotnetrun . -} else { - Write-Host "SKIP build dotnet base image (already exists)" -ForegroundColor Blue -} - -if (!$ExistsNode -or $Force) { - Write-Host "Build node base image from source" -ForegroundColor Green - docker build -t "onlyoffice/4testing-docspace-nodejs-runtime:$NodeVersion" -f "$DockerDir\Dockerfile.runtime" --target noderun . -} else { - Write-Host "SKIP build node base image (already exists)" -ForegroundColor Blue -} - -if (!$ExistsProxy -or $Force) { - Write-Host "Build proxy base image from source (apply new nginx config)" -ForegroundColor Green - docker build -t "onlyoffice/4testing-docspace-proxy-runtime:$ProxyVersion" -f "$DockerDir\Dockerfile.runtime" --target router . -} else { - Write-Host "SKIP build proxy base image (already exists)" -ForegroundColor Blue -} - -Write-Host "Run migration and services" -ForegroundColor Green -$Env:ENV_EXTENSION="dev" -$Env:Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:$DotnetVersion" -$Env:Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:$NodeVersion" -$Env:Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:$ProxyVersion" -$Env:SERVICE_DOCEDITOR=$Doceditor -$Env:SERVICE_LOGIN=$Login -$Env:SERVICE_CLIENT=$Client -$Env:SERVICE_MANAGEMENT=$Management -$Env:ROOT_DIR=$RootDir -$Env:BUILD_PATH="/var/www" -$Env:SRC_PATH="$RootDir\publish\services" -$Env:DATA_DIR="$RootDir\data" -$Env:APP_URL_PORTAL=$PortalUrl -docker compose -f "$DockerDir\docspace.profiles.yml" -f "$DockerDir\docspace.overcome.yml" --profile migration-runner --profile backend-local up -d - -Write-Host "== Build params ==" -ForegroundColor Green -Write-Host "APP_URL_PORTAL: $PortalUrl" -ForegroundColor Blue -Write-Host "LOCAL IP: $LocalIp" -ForegroundColor Blue -Write-Host "SERVICE_DOCEDITOR: $Env:SERVICE_DOCEDITOR" -ForegroundColor Blue -Write-Host "SERVICE_LOGIN: $Env:SERVICE_LOGIN" -ForegroundColor Blue -Write-Host "SERVICE_CLIENT: $Env:SERVICE_CLIENT" -ForegroundColor Blue -Write-Host "SERVICE_MANAGEMENT: $Env:SERVICE_MANAGEMENT" -ForegroundColor Blue -Write-Host "INSTALLATION_TYPE: $Env:INSTALLATION_TYPE" -ForegroundColor Blue - -Set-Location -Path $PSScriptRoot \ No newline at end of file diff --git a/build.backend.docker.py b/build.backend.docker.py new file mode 100755 index 0000000000..6ff3ec66c6 --- /dev/null +++ b/build.backend.docker.py @@ -0,0 +1,204 @@ +#!/usr/bin/python3 + +import os +import socket +import subprocess +import sys, getopt +import shutil +import platform + +def help(): + # Display Help + print("Build and run backend and working environment. (Use 'yarn start' to run client -> https://github.com/ONLYOFFICE/DocSpace-client)") + print() + print("Syntax: available params [-h|f|s|c|d|]") + print("options:") + print("h Print this Help.") + print("f Force rebuild base images.") + print("s Run as SAAS otherwise as STANDALONE.") + print("c Run as COMMUNITY otherwise ENTERPRISE.") + print("d Run dnsmasq.") + print() + +rd = os.path.dirname(os.path.abspath(__file__)) +dir = os.path.abspath(os.path.join(rd, "..")) +dockerDir = os.path.join(dir, "buildtools", "install", "docker") +local_ip = socket.gethostbyname_ex(socket.gethostname())[-1][-1] + +doceditor = f"{local_ip}:5013" +login = f"{local_ip}:5011" +client = f"{local_ip}:5001" +management = f"{local_ip}:5001" +portal_url = f"http://{local_ip}" + +force = False +dns = False +standalone = True +community = False + +migration_type = "STANDALONE" # SAAS +installation_type = "ENTERPRISE" +document_server_image_name = "onlyoffice/documentserver-de:latest" + +# Get the options +opts, args = getopt.getopt(sys.argv[1:], "hfscd") +for opt, arg in opts: + if opt == "-h": + help() + sys.exit() + elif opt == "-f": + force = arg if arg else True + elif opt == "-s": + standalone = arg if arg else False + elif opt == "-c": + community = arg if arg else True + elif opt == "-d": + dns = arg if arg else True + else: + print("Error: Invalid '-" + opt + "' option") + sys.exit() + +print("Run script directory:", dir) +print("Root directory:", dir) +print("Docker files root directory:", dockerDir) + +print() +print(f"SERVICE_DOCEDITOR: {doceditor}") +print(f"SERVICE_LOGIN: {login}") +print(f"SERVICE_CLIENT: {client}") +print(f"DOCSPACE_APP_URL: {portal_url}") + +print() +print("FORCE REBUILD BASE IMAGES:", force) +print("Run dnsmasq:", dns) + +if standalone == False: + migration_type = "SAAS" + +if community == True: + installation_type = "COMMUNITY" + document_server_image_name = "onlyoffice/documentserver:latest" + +print() +print("MIGRATION TYPE:", migration_type) +print("INSTALLATION TYPE:", installation_type) +print("DS image:", document_server_image_name) +print() + +# Stop all backend services +subprocess.run(["python", os.path.join(dir, "buildtools", "start", "stop.backend.docker.py")]) + +print("Run MySQL") + +arch_name = platform.uname().machine + +print(f"PLATFORM {arch_name}") + +existsnetwork = subprocess.check_output(["docker", "network", "ls"]).decode("utf-8").splitlines() +existsnetwork = [line.split()[1] for line in existsnetwork] + +if "onlyoffice" not in existsnetwork: + subprocess.run(["docker", "network", "create", "--driver", "bridge", "onlyoffice"]) + +if arch_name == "x86_64" or arch_name == "AMD64": + print("CPU Type: x86_64 -> run db.yml") + subprocess.run(["docker", "compose", "-f", os.path.join(dockerDir, "db.yml"), "up", "-d"]) +elif arch_name == "arm64": + print("CPU Type: arm64 -> run db.yml with arm64v8 image") + os.environ["MYSQL_IMAGE"] = "arm64v8/mysql:8.0.32-oracle" + subprocess.run(["docker", "compose", "-f", os.path.join(dockerDir, "db.yml"), "up", "-d"]) +else: + print("Error: Unknown CPU Type:", arch_name) + sys.exit(1) + +if dns == True: + print("Run local dns server") + os.environ["ROOT_DIR"] = dir + subprocess.run(["docker", "compose", "-f", os.path.join(dockerDir, "dnsmasq.yml"), "up", "-d"]) + +print("Clear publish folder") +shutil.rmtree(os.path.join(dir, "publish/services"), True) + +print("Build backend services (to 'publish/' folder)") +subprocess.run(["python", os.path.join(dir, "buildtools", "install", "common", "build-services.py")]) + +def check_image(image_name): + return subprocess.check_output(["docker", "images", "--format", "'{{.Repository}}:{{.Tag}}'"], shell=True, text=True).__contains__(image_name) + +dotnet_image_name = "onlyoffice/4testing-docspace-dotnet-runtime" +dotnet_version = "dev" +dotnet_image = f"{dotnet_image_name}:{dotnet_version}" + +exists = check_image(dotnet_image) + +if not exists or force == True: + print("Build dotnet base image from source (apply new dotnet config)") + subprocess.run(["docker", "build", "-t", dotnet_image, "-f", os.path.join(dockerDir, "Dockerfile.runtime"), "--target", "dotnetrun", "."]) +else: + print(f"SKIP build {dotnet_image} (already exists)") + +node_image_name = "onlyoffice/4testing-docspace-nodejs-runtime" +node_version = "dev" +node_image = f"{node_image_name}:{node_version}" + +exists = check_image(node_image) + +if not exists or force == True: + print("Build nodejs base image from source") + subprocess.run(["docker", "build", "-t", node_image, "-f", os.path.join(dockerDir, "Dockerfile.runtime"), "--target", "noderun", "."]) +else: + print(f"SKIP build {node_image} (already exists)") + +proxy_image_name = "onlyoffice/4testing-docspace-proxy-runtime" +proxy_version = "dev" +proxy_image = f"{proxy_image_name}:{proxy_version}" + +exists = check_image(proxy_image) + +if not exists or force == True: + print("Build proxy base image from source (apply new nginx config)") + subprocess.run(["docker", "build", "-t", proxy_image, "-f", os.path.join(dockerDir, "Dockerfile.runtime"), "--target", "router", "."]) +else: + print(f"SKIP build {proxy_image} (already exists)") + +print("Run migration and services") + +os.environ["ENV_EXTENSION"] = "dev" +os.environ["INSTALLATION_TYPE"] = installation_type +os.environ["Baseimage_Dotnet_Run"] = "onlyoffice/4testing-docspace-dotnet-runtime:" + dotnet_version +os.environ["Baseimage_Nodejs_Run"] = "onlyoffice/4testing-docspace-nodejs-runtime:" + node_version +os.environ["Baseimage_Proxy_Run"] = "onlyoffice/4testing-docspace-proxy-runtime:" + proxy_version +os.environ["DOCUMENT_SERVER_IMAGE_NAME"] = document_server_image_name +os.environ["SERVICE_DOCEDITOR"] = doceditor +os.environ["SERVICE_LOGIN"] = login +os.environ["SERVICE_MANAGEMENT"] = management +os.environ["SERVICE_CLIENT"] = client +os.environ["ROOT_DIR"] = dir +os.environ["BUILD_PATH"] = "/var/www" +os.environ["SRC_PATH"] = os.path.join(dir, "publish/services") +os.environ["DATA_DIR"] = os.path.join(dir, "data") +os.environ["APP_URL_PORTAL"] = portal_url +os.environ["MIGRATION_TYPE"] = migration_type +subprocess.run(["docker-compose", "-f", os.path.join(dockerDir, "docspace.profiles.yml"), "-f", os.path.join(dockerDir, "docspace.overcome.yml"), "--profile", "migration-runner", "--profile", "backend-local", "up", "-d"]) + +print() +print("Run script directory:", dir) +print("Root directory:", dir) +print("Docker files root directory:", dockerDir) + +print() +print(f"SERVICE_DOCEDITOR: {doceditor}") +print(f"SERVICE_LOGIN: {login}") +print(f"SERVICE_MANAGEMENT: {management}") +print(f"SERVICE_CLIENT: {client}") +print(f"DOCSPACE_APP_URL: {portal_url}") + +print() +print("FORCE REBUILD BASE IMAGES:", force) +print("Run dnsmasq:", dns) + +print() +print("MIGRATION TYPE:", migration_type) +print("INSTALLATION TYPE:", installation_type) +print("DS image:", document_server_image_name) +print() diff --git a/build.backend.docker.sh b/build.backend.docker.sh deleted file mode 100755 index 8913abb946..0000000000 --- a/build.backend.docker.sh +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/bash - -rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -echo "Run script directory:" $dir - -dir=$(builtin cd $rd/../; pwd) -dockerDir="$dir/buildtools/install/docker" - -echo "Root directory:" $dir -echo "Docker files root directory:" $dockerDir - -local_ip=$(ipconfig getifaddr en0) - -echo "LOCAL IP: $local_ip" - -doceditor=${local_ip}:5013 -login=${local_ip}:5011 -client=${local_ip}:5001 -management=${local_ip}:5015 -portal_url="http://$local_ip" - -echo "SERVICE_DOCEDITOR: $doceditor" -echo "SERVICE_LOGIN: $login" -echo "SERVICE_CLIENT: $client" -echo "SERVICE_MANAGEMENT: $management" -echo "APP_URL_PORTAL: $portal_url" - -force=false - -if [ "$1" = "--force" ]; then - force=true -fi - -echo "FORCE BUILD BASE IMAGES: $force" - -# Stop all backend services" -$dir/buildtools/start/stop.backend.docker.sh - -echo "Run MySQL" - -arch_name="$(uname -m)" - -existsnetwork=$(docker network ls | awk '{print $2;}' | { grep -x onlyoffice || true; }); - -if [[ -z ${existsnetwork} ]]; then - docker network create --driver bridge onlyoffice -fi - -if [ "${arch_name}" = "x86_64" ]; then - echo "CPU Type: x86_64 -> run db.yml" - docker compose -f $dockerDir/db.yml up -d -elif [ "${arch_name}" = "arm64" ]; then - echo "CPU Type: arm64 -> run db.yml with arm64v8 image" - MYSQL_IMAGE=arm64v8/mysql:8.0.32-oracle \ - docker compose -f $dockerDir/db.yml up -d -else - echo "Error: Unknown CPU Type: ${arch_name}." - exit 1 -fi - -if [ "$1" = "--dns" ]; then - echo "Run local dns server" - ROOT_DIR=$dir \ - docker compose -f $dockerDir/dnsmasq.yml up -d -fi - -echo "Clear publish folder" -rm -rf $dir/publish/services - -echo "Build backend services (to "publish/" folder)" -bash $dir/buildtools/install/common/build-services.sh -pb backend-publish -pc Debug -de "$dockerDir/docker-entrypoint.py" - -DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest -INSTALLATION_TYPE=ENTERPRISE - -if [ "$1" = "--community" ]; then - DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver:latest - INSTALLATION_TYPE=COMMUNITY -fi - -echo "Run migration and services INSTALLATION_TYPE=$INSTALLATION_TYPE" -dotnet_version=dev - -exists=$(docker images | egrep "onlyoffice/4testing-docspace-dotnet-runtime" | egrep "$dotnet_version" | awk 'NR>0 {print $1 ":" $2}') - -if [ "${exists}" = "" ] || [ "$force" = true ]; then - echo "Build dotnet base image from source (apply new dotnet config)" - docker build -t onlyoffice/4testing-docspace-dotnet-runtime:$dotnet_version -f $dockerDir/Dockerfile.runtime --target dotnetrun . -else - echo "SKIP build dotnet base image (already exists)" -fi - -node_version=dev - -exists=$(docker images | egrep "onlyoffice/4testing-docspace-nodejs-runtime" | egrep "$node_version" | awk 'NR>0 {print $1 ":" $2}') - -if [ "${exists}" = "" ] || [ "$force" = true ]; then - echo "Build nodejs base image from source" - docker build -t onlyoffice/4testing-docspace-nodejs-runtime:$node_version -f $dockerDir/Dockerfile.runtime --target noderun . -else - echo "SKIP build nodejs base image (already exists)" -fi - -proxy_version=dev - -exists=$(docker images | egrep "onlyoffice/4testing-docspace-proxy-runtime" | egrep "$proxy_version" | awk 'NR>0 {print $1 ":" $2}') - -if [ "${exists}" = "" ] || [ "$force" = true ]; then - echo "Build proxy base image from source (apply new nginx config)" - docker build -t onlyoffice/4testing-docspace-proxy-runtime:$proxy_version -f $dockerDir/Dockerfile.runtime --target router . -else - echo "SKIP build proxy base image (already exists)" -fi - -echo "Run migration and services" -ENV_EXTENSION="dev" \ -INSTALLATION_TYPE=$INSTALLATION_TYPE \ -Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:$dotnet_version" \ -Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:$node_version" \ -Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:$proxy_version" \ -DOCUMENT_SERVER_IMAGE_NAME=$DOCUMENT_SERVER_IMAGE_NAME \ -SERVICE_DOCEDITOR=$doceditor \ -SERVICE_LOGIN=$login \ -SERVICE_CLIENT=$client \ -SERVICE_MANAGEMENT=$management \ -ROOT_DIR=$dir \ -BUILD_PATH="/var/www" \ -SRC_PATH="$dir/publish/services" \ -DATA_DIR="$dir/data" \ -APP_URL_PORTAL=$portal_url \ -docker-compose -f $dockerDir/docspace.profiles.yml -f $dockerDir/docspace.overcome.yml --profile migration-runner --profile backend-local up -d - -echo "" -echo "APP_URL_PORTAL: $portal_url" -echo "LOCAL IP: $local_ip" -echo "SERVICE_DOCEDITOR: $doceditor" -echo "SERVICE_LOGIN: $login" -echo "SERVICE_CLIENT: $client" -echo "SERVICE_MANAGEMENT: $management" -echo "INSTALLATION_TYPE=$INSTALLATION_TYPE" \ No newline at end of file diff --git a/clear.backend.docker.bat b/clear.backend.docker.bat deleted file mode 100644 index 7d215cfc09..0000000000 --- a/clear.backend.docker.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off - -pwsh %~dp0/clear.backend.docker.ps1 - -echo. - -pause \ No newline at end of file diff --git a/clear.backend.docker.ps1 b/clear.backend.docker.ps1 deleted file mode 100644 index 8f46f3b631..0000000000 --- a/clear.backend.docker.ps1 +++ /dev/null @@ -1,38 +0,0 @@ -$Containers = docker ps -aqf "name=^onlyoffice" -$Images = docker images onlyoffice/4testing-docspace* -q -$RootDir = Split-Path -Parent $PSScriptRoot -$DockerDir = ($RootDir + "\buildtools\install\docker") - -Write-Host "Clean up containers, volumes or networks" -ForegroundColor Green - -if ($Containers -or $Images) { - Write-Host "Remove all backend containers" -ForegroundColor Blue - - $Env:DOCUMENT_SERVER_IMAGE_NAME="onlyoffice/documentserver-de:latest" - $Env:Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:dev" - $Env:Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:dev" - $Env:Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:dev" - $Env:SERVICE_CLIENT="localhost:5001" - $Env:SERVICE_MANAGEMENT="localhost:5015" - $Env:BUILD_PATH="/var/www" - $Env:SRC_PATH="$RootDir\publish\services" - $Env:ROOT_DIR=$RootDir - $Env:DATA_DIR="$RootDir\data" - - docker compose -f "$DockerDir\docspace.profiles.yml" -f "$DockerDir\docspace.overcome.yml" --profile "migration-runner" --profile "backend-local" down --volumes - - Write-Host "Remove docker contatiners 'mysql'" -ForegroundColor Blue - docker compose -f "$DockerDir\db.yml" down --volumes - - Write-Host "Remove docker volumes" -ForegroundColor Blue - docker volume prune -f -a - - Write-Host "Remove docker base images (onlyoffice/4testing-docspace)" -ForegroundColor Blue - docker rmi -f $Images - - Write-Host "Remove docker networks" -ForegroundColor Blue - docker network prune -f -} -else { - Write-Host "No containers, images, volumes or networks to clean up" -ForegroundColor Green -} \ No newline at end of file diff --git a/clear.backend.docker.py b/clear.backend.docker.py new file mode 100755 index 0000000000..8daff0a126 --- /dev/null +++ b/clear.backend.docker.py @@ -0,0 +1,49 @@ +#!/usr/bin/python3 + +import os, sys +import subprocess + +rd = os.path.dirname(os.path.abspath(__file__)) +root_dir = os.path.abspath(os.path.join(rd, "..")) +docker_dir = os.path.join(root_dir, "buildtools", "install", "docker") + +containers = subprocess.check_output(["docker", "ps", "-aq", "-f", "name=^onlyoffice"], encoding='utf-8').strip().split() +images = subprocess.check_output(["docker", "images", "onlyoffice/4testing-docspace*", "-q"], encoding='utf-8').strip().split() + +if containers or images: + print("Clean up containers, volumes or networks") + + print("Remove all backend containers") + + os.environ["Baseimage_Dotnet_Run"] = "onlyoffice/4testing-docspace-dotnet-runtime:dev" + os.environ["Baseimage_Nodejs_Run"] = "onlyoffice/4testing-docspace-nodejs-runtime:dev" + os.environ["Baseimage_Proxy_Run"] = "onlyoffice/4testing-docspace-proxy-runtime:dev" + os.environ["DOCUMENT_SERVER_IMAGE_NAME"] = "onlyoffice/documentserver-de:latest" + os.environ["SERVICE_CLIENT"] = "localhost:5001" + os.environ["SERVICE_MANAGEMENT"] = "localhost:5015" + os.environ["ROOT_DIR"] = root_dir + os.environ["BUILD_PATH"] = "/var/www" + os.environ["SRC_PATH"] = os.path.join(root_dir, "publish/services") + os.environ["DATA_DIR"] = os.path.join(root_dir, "data") + subprocess.run(["docker-compose", "-f", os.path.join(docker_dir, "docspace.profiles.yml"), "-f", os.path.join(docker_dir, "docspace.overcome.yml"), "--profile", "migration-runner", "--profile", "backend-local", "down", "--volumes"]) + + print("Remove docker contatiners 'mysql'") + db_command = f"docker compose -f {os.path.join(docker_dir, 'db.yml')} down --volumes" + subprocess.run(db_command, shell=True) + + print("Remove docker volumes") + volumes_command = f"docker volume prune -fa" + subprocess.run(volumes_command, shell=True) + + print("Remove docker base images (onlyoffice/4testing-docspace)") + subprocess.run(['docker', 'rmi', '-f'] + images, check=True) + + print("Remove docker networks") + network_command = f"docker network prune -f" + subprocess.run(network_command, shell=True) + + print("Remove docker build cache") + cache_command = f"docker buildx prune -f" + subprocess.run(cache_command, shell=True) +else: + print("No containers or images to clean up") diff --git a/clear.backend.docker.sh b/clear.backend.docker.sh deleted file mode 100755 index 38326fd033..0000000000 --- a/clear.backend.docker.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -Containers=$(docker ps -a | egrep "onlyoffice" | awk 'NR>0 {print $1}') -RunDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -RootDir=$(builtin cd $RunDir/../; pwd) -DockerDir="${RootDir}/buildtools/install/docker" - -echo "Clean up containers, volumes or networks" - -if [[ $Containers != "" ]] -then - echo "Remove all backend containers" - - DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest \ - Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:dev" \ - Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:dev" \ - Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:dev" \ - SERVICE_CLIENT="localhost:5001" \ - SERVICE_MANAGEMENT="localhost:5015" \ - BUILD_PATH="/var/www" \ - SRC_PATH="${RootDir}/publish/services" \ - ROOT_DIR=$RootDir \ - DATA_DIR="${RootDir}/data" \ - docker-compose -f "${DockerDir}/docspace.profiles.yml" -f "${DockerDir}/docspace.overcome.yml" --profile migration-runner --profile backend-local down --volumes - - echo "Remove docker contatiners 'mysql'" - docker compose -f "${DockerDir}/db.yml" down --volumes - - echo "Remove docker volumes" - docker volume prune -f -a - - echo "Remove docker base images (onlyoffice/4testing-docspace)" - docker rmi -f $(docker images -a | egrep "onlyoffice/4testing-docspace" | awk 'NR>0 {print $3}') - - echo "Remove unused networks." - docker network prune -f -else - echo "No containers, images, volumes or networks to clean up" -fi diff --git a/config/appsettings.json b/config/appsettings.json index 1096f8727c..1ab6f09de4 100644 --- a/config/appsettings.json +++ b/config/appsettings.json @@ -34,7 +34,10 @@ "oidc": { "authority": "" }, - "server-root": "" + "server-root": "", + "username": { + "regex": "^[\\p{L}\\p{M}' \\-]+$" + } }, "license": { "file": { @@ -415,7 +418,8 @@ "script": ["'self'", "'unsafe-inline'", "'unsafe-eval'"], "style": ["'self'", "'unsafe-inline'"], "img": ["'self'", "data:", "blob:"], - "frame": ["'self'"] + "frame": ["'self'"], + "fonts": ["'self'", "data:"] }, "zendesk": { "def": ["*.zdassets.com", "*.zopim.com", "*.zendesk.com", "wss:"], @@ -427,8 +431,8 @@ "def": ["*.googleapis.com"] }, "oform": { - "img": ["*.onlyoffice.com"], - "def": ["*.onlyoffice.com"] + "img": ["static-oforms.teamlab.info"], + "def": ["cmsoforms.teamlab.info", "oforms.teamlab.info"] } }, "logocolors": [ @@ -462,6 +466,11 @@ "region": "us-east-1", "logGroupName": "/asc/docspace/cluster/cluster_name/general", "logStreamName": "${hostname} - ${applicationContext} - ${date} - ${guid}" + }, + "dynamoDB": { + "accessKeyId": "", + "secretAccessKey": "", + "region": "us-east-1" } } } diff --git a/config/backup.json b/config/backup.json index c3dc289bd2..6e3acf6dc2 100644 --- a/config/backup.json +++ b/config/backup.json @@ -15,8 +15,6 @@ "Cleaner": { "Period":"00:15:00" - }, - "ChunkSize": 524288000, - "MaxLocalSize": 1048576000 + } } } \ No newline at end of file diff --git a/config/nginx/onlyoffice.conf b/config/nginx/onlyoffice.conf index 85035aa9fb..ca1b2757d9 100644 --- a/config/nginx/onlyoffice.conf +++ b/config/nginx/onlyoffice.conf @@ -68,6 +68,8 @@ server { gzip on; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; + gzip_min_length 1000; + gzip_proxied any; fastcgi_read_timeout 600; fastcgi_send_timeout 600; @@ -111,7 +113,7 @@ server { if redis_pass ~= "" then local res, err = red:auth(redis_pass) if not res then - ngx.log(ngx.ERR, "failed to authenticate: ", err) + ngx.log(ngx.INFO, "failed to authenticate: ", err) return end end diff --git a/config/nlog.config b/config/nlog.config index f4522c0b2d..e6dfd6ee1a 100644 --- a/config/nlog.config +++ b/config/nlog.config @@ -46,12 +46,12 @@ - + - + diff --git a/config/storage.json b/config/storage.json index e6e3da6d3e..083325fa44 100644 --- a/config/storage.json +++ b/config/storage.json @@ -41,6 +41,7 @@ "data": "00000000-0000-0000-0000-000000000000", "type": "disc", "path": "$STORAGE_ROOT\\Products\\Files\\logos\\{0}", + "validatorType": "ASC.Files.Core.VirtualRooms.RoomLogoValidator, ASC.Files.Core", "domain": [ { "name": "logos_temp", diff --git a/debuginfo.py b/debuginfo.py new file mode 100755 index 0000000000..a6fc574dcd --- /dev/null +++ b/debuginfo.py @@ -0,0 +1,97 @@ +#!/usr/bin/python3 + +import os +from git import Repo +from datetime import datetime + +rd = os.path.dirname(os.path.abspath(__file__)) +root_dir = os.path.abspath(os.path.join(rd, "..")) + +CLIENT = "client" +SERVER = "server" +BUILDTOOLS = "buildtools" +REPO_CLIENT_URL = f"https://github.com/ONLYOFFICE/DocSpace-client" +REPO_SERVER_URL = f"https://github.com/ONLYOFFICE/DocSpace-server" +REPO_BUILDTOOLS_URL = f"https://github.com/ONLYOFFICE/DocSpace-buildtools" +LIMIT_DAYS = 30 +MESSAGE_SEPARATOR = '__MESSAGE_SEPARATOR__' +SEP = 'ยง' + +# https://git-scm.com/docs/pretty-formats +format = f"%H{SEP}%as{SEP}%an{SEP}%s %b{MESSAGE_SEPARATOR}" + +data = {} + + +def fetchCommits(url, type): + path = os.path.join(root_dir, type) + #print(path, os.path.exists(path)) + if os.path.exists(path) == False: + print("Error folder does not exists", path) + return + + repo = Repo(path) + + info = f"| [DocSpace-{type}]({url}) | [{repo.active_branch.name}]({url}/tree/{repo.active_branch.name}) | [{repo.head.commit}]({url}/commit/{repo.head.commit}) |{os.linesep}" + + commits_str = repo.git.log(f"--pretty=format: {format}", "--no-merges", f"--since={LIMIT_DAYS}.days") + #print(commits_str) + + commits = commits_str.strip().split(MESSAGE_SEPARATOR) + #print(commits) + + for item in commits: + elements = item.replace('\n', '').split(SEP) + + if len(elements) != 4: + continue + + hash = elements[0].strip() + date = datetime.strptime(elements[1].strip(), "%Y-%m-%d") + name = elements[2].strip() + text = elements[3].strip().capitalize() + + if date not in data: + data[date] = {} + + if name not in data[date]: + data[date][name] = [] + + data[date][name].append(f"- [{type}]: {text} [`{hash[0:7]}`]({url}/commit/{hash})") + + return info + +result = f"## Changelog{os.linesep}" + +result += f"| Repo | Branch | Last Commit |{os.linesep}" +result += f"| :- | :- | :- |{os.linesep}" + +result += fetchCommits(REPO_CLIENT_URL, CLIENT) +result += fetchCommits(REPO_SERVER_URL, SERVER) +result += fetchCommits(REPO_BUILDTOOLS_URL, BUILDTOOLS) + +# Create debuginfo.md content +for date in sorted(data, reverse=True): + niceDate = date.strftime("%d %B %Y") + result += f"### {niceDate}{os.linesep}" + for name in sorted(data[date]): + result += f"#### {name}{os.linesep}" + for commit in data[date][name]: + result += f"{commit}{os.linesep}" + +print(result) + +pathMD = os.path.join(root_dir, CLIENT, "public/debuginfo.md") +# Open text file in write mode +text_file = open(pathMD, "w") + +# Write content to file +n = text_file.write(result) + +if n == len(result): + print("Success! String written to text file.") +else: + print("Failure! String not written to text file.") + +# Close file +text_file.close() \ No newline at end of file diff --git a/install/OneClickInstall/docspace-install.sh b/install/OneClickInstall/docspace-install.sh index 6e653d62af..b95ca368e6 100644 --- a/install/OneClickInstall/docspace-install.sh +++ b/install/OneClickInstall/docspace-install.sh @@ -142,7 +142,7 @@ fi if [ -z $GIT_BRANCH ]; then DOWNLOAD_URL_PREFIX="https://download.onlyoffice.com/${product}" else - DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}/${GIT_BRANCH}/buildtools/install/OneClickInstall" + DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}-buildtools/${GIT_BRANCH}/install/OneClickInstall" fi if [ "$DOCKER" == "true" ]; then diff --git a/install/OneClickInstall/install-Debian.sh b/install/OneClickInstall/install-Debian.sh index 0cd3824bcd..8dd90ca46f 100644 --- a/install/OneClickInstall/install-Debian.sh +++ b/install/OneClickInstall/install-Debian.sh @@ -121,7 +121,7 @@ fi if [ -z $GIT_BRANCH ]; then DOWNLOAD_URL_PREFIX="https://download.onlyoffice.com/${product}/install-Debian" else - DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}/${GIT_BRANCH}/buildtools/install/OneClickInstall/install-Debian" + DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}-buildtools/${GIT_BRANCH}/install/OneClickInstall/install-Debian" fi if [ "${LOCAL_SCRIPTS}" == "true" ]; then diff --git a/install/OneClickInstall/install-Docker.sh b/install/OneClickInstall/install-Docker.sh index 301ee51da5..06159901e1 100644 --- a/install/OneClickInstall/install-Docker.sh +++ b/install/OneClickInstall/install-Docker.sh @@ -491,9 +491,9 @@ while [ "$1" != "" ]; do echo " -ies, --installelastic install or update elasticsearch (true|false)" echo " -espr, --elasticprotocol the protocol for the connection to elasticsearch (default value http)" echo " -esh, --elastichost the IP address or hostname of the elasticsearch" - echo " -esp, --elasticport elasticsearch port number (default value 6379)" + echo " -esp, --elasticport elasticsearch port number (default value 9200)" echo " -rdsh, --redishost the IP address or hostname of the redis server" - echo " -rdsp, --redisport redis server port number (default value 9200)" + echo " -rdsp, --redisport redis server port number (default value 6379)" echo " -rdsu, --redisusername redis user name" echo " -rdspass, --redispassword password set for redis account" echo " -rbth, --rabbitmqhost the IP address or hostname of the rabbitmq server" @@ -947,7 +947,7 @@ domain_check () { echo "Select 'N' to cancel ${PACKAGE_SYSNAME^^} ${PRODUCT_NAME} installation." if read_continue_installation; then if [[ -f "$DOCKER_DAEMON_FILE" ]]; then - sed -i '/{/a\ "dns": ["8.8.8.8", "8.8.4.4"],' "$DOCKER_DAEMON_FILE" + sed -i 's!{!& "dns": ["8.8.8.8", "8.8.4.4"],!' "$DOCKER_DAEMON_FILE" else echo "{\"dns\": [\"8.8.8.8\", \"8.8.4.4\"]}" | tee "$DOCKER_DAEMON_FILE" >/dev/null fi @@ -1172,7 +1172,7 @@ download_files () { if ! command_exists svn; then install_service svn subversion fi - svn export --force https://github.com/${PACKAGE_SYSNAME}/${PRODUCT}/branches/${GIT_BRANCH}/buildtools/install/docker/ ${BASE_DIR} >/dev/null + svn export --force https://github.com/${PACKAGE_SYSNAME}/${PRODUCT}-buildtools/branches/${GIT_BRANCH}/install/docker/ ${BASE_DIR} >/dev/null fi echo "OK" diff --git a/install/OneClickInstall/install-RedHat.sh b/install/OneClickInstall/install-RedHat.sh index 068210756e..3ee10a2c19 100644 --- a/install/OneClickInstall/install-RedHat.sh +++ b/install/OneClickInstall/install-RedHat.sh @@ -134,7 +134,7 @@ END if [ -z $GIT_BRANCH ]; then DOWNLOAD_URL_PREFIX="https://download.onlyoffice.com/${product}/install-RedHat" else - DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}/${GIT_BRANCH}/buildtools/install/OneClickInstall/install-RedHat" + DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}-buildtools/${GIT_BRANCH}/install/OneClickInstall/install-RedHat" fi if [ "$LOCAL_SCRIPTS" = "true" ]; then diff --git a/install/common/build-backend.sh b/install/common/build-backend.sh index 87fdcbcd97..c748b3081a 100644 --- a/install/common/build-backend.sh +++ b/install/common/build-backend.sh @@ -42,10 +42,11 @@ done echo "== BACK-END-BUILD ==" -cd ${SRC_PATH} +cd ${SRC_PATH}/server dotnet build ASC.Web.slnf ${ARGS} -dotnet build ASC.Migrations.sln -o ${SRC_PATH}/ASC.Migration.Runner/service/ +dotnet build ASC.Migrations.sln -o ${SRC_PATH}/server/ASC.Migration.Runner/service/ +cd ${SRC_PATH}/client # Array of names backend services in directory common (Nodejs) services_name_backend_nodejs=() services_name_backend_nodejs+=(ASC.Socket.IO) @@ -54,5 +55,5 @@ services_name_backend_nodejs+=(ASC.SsoAuth) # Build backend services (Nodejs) for i in ${!services_name_backend_nodejs[@]}; do echo "== Build ${services_name_backend_nodejs[$i]} project ==" - yarn install --cwd common/${services_name_backend_nodejs[$i]} --frozen-lockfile + yarn install --cwd ${SRC_PATH}/server/common/${services_name_backend_nodejs[$i]} --frozen-lockfile done diff --git a/install/common/build-frontend.sh b/install/common/build-frontend.sh index 9304bae8f2..a5f74e9910 100644 --- a/install/common/build-frontend.sh +++ b/install/common/build-frontend.sh @@ -57,10 +57,12 @@ done echo "== FRONT-END-BUILD ==" cd ${SRC_PATH} -yarn install # debug config if [ "$DEBUG_INFO" = true ]; then - yarn debug-info + pip install -r ${SRC_PATH}/buildtools/requirements.txt + python3 ${SRC_PATH}/buildtools/debuginfo.py fi +cd ${SRC_PATH}/client +yarn install yarn ${BUILD_ARGS} yarn ${DEPLOY_ARGS} diff --git a/install/common/build-services.ps1 b/install/common/build-services.ps1 deleted file mode 100644 index 30dc6f2a39..0000000000 --- a/install/common/build-services.ps1 +++ /dev/null @@ -1,57 +0,0 @@ -$SRC_PATH=(get-item $PSScriptRoot ).parent.parent.parent.FullName -$BUILD_PATH="$SRC_PATH\publish" - -$BACKEND_NODEJS_SERVICES="ASC.Socket.IO","ASC.SsoAuth" -$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="false" -$PUBLISH_CNF="Debug" - -$FRONTEND_BUILD_ARGS="build" -$FRONTEND_DEPLOY_ARGS="deploy" -$DEBUG_INFO_CHECK="" -$MIGRATION_CHECK="true" -$DOCKER_ENTRYPOINT="$SRC_PATH\buildtools\install\docker\docker-entrypoint.py" - -if(Test-Path -Path "$BUILD_PATH\services" ){ - Write-Host "== Clean up services ==" -ForegroundColor Green - Remove-Item "$BUILD_PATH\services" -Recurse -} - -Write-Host "== Build ASC.Web.slnf ==" -ForegroundColor Green -dotnet build "$SRC_PATH\server\ASC.Web.slnf" - -Write-Host "== Build ASC.Migrations.sln ==" -ForegroundColor Green -dotnet build "$SRC_PATH\server\ASC.Migrations.sln" -o "$BUILD_PATH\services\ASC.Migration.Runner\service\" - -Write-Host "== Add docker-migration-entrypoint.sh to ASC.Migration.Runner ==" -ForegroundColor Green -$FilePath = "$BUILD_PATH\services\ASC.Migration.Runner\service\docker-migration-entrypoint.sh" -Get-Content "$SRC_PATH\buildtools\install\docker\docker-migration-entrypoint.sh" -raw | % {$_ -replace "`r", ""} | Set-Content -NoNewline $FilePath - -foreach ($SERVICE in $BACKEND_NODEJS_SERVICES) -{ - Write-Host "== Build $SERVICE project ==" -ForegroundColor Green - yarn install --cwd "$SRC_PATH\server\common\$SERVICE" --frozen-lockfile - - $DST = "$BUILD_PATH\services\$SERVICE\service\" - - if(!(Test-Path -Path $DST )){ - New-Item -ItemType "directory" -Path $DST - } - - Write-Host "== Copy service data to `publish\services\${SERVICE}\service` ==" -ForegroundColor Green - Copy-Item -Path "$SRC_PATH\server\common\$SERVICE\*" -Destination $DST -Recurse - Write-Host "== Add docker-entrypoint.py to $SERVICE ==" -ForegroundColor Green - Copy-Item $DOCKER_ENTRYPOINT -Destination $DST -} - -Write-Host "== Publish ASC.Web.slnf ==" -ForegroundColor Green -dotnet publish "$SRC_PATH\server\ASC.Web.slnf" -p "PublishProfile=FolderProfile" - -Set-Location -Path $PSScriptRoot - -foreach ($SERVICE in $BACKEND_DOTNETCORE_SERVICES) -{ - Write-Host "== Add docker-entrypoint.py to $SERVICE ==" -ForegroundColor Green - $DST = "$BUILD_PATH\services\$SERVICE\service\" - Copy-Item $DOCKER_ENTRYPOINT -Destination $DST -} diff --git a/install/common/build-services.py b/install/common/build-services.py new file mode 100755 index 0000000000..aec3d154cb --- /dev/null +++ b/install/common/build-services.py @@ -0,0 +1,87 @@ +#!/usr/bin/python3 + +import os +import stat +import subprocess +import shutil +import time + +SRC_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) +BUILD_PATH = os.path.join(SRC_PATH, "publish") + +print(f"SRC_PATH = {SRC_PATH}") +print(f"BUILD_PATH = {BUILD_PATH}") + +BACKEND_NODEJS_SERVICES = ["ASC.Socket.IO", "ASC.SsoAuth"] +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"] + +DOCKER_ENTRYPOINT="docker-entrypoint.py" +DOCKER_ENTRYPOINT_PATH = os.path.join(SRC_PATH, "buildtools", "install", "docker", DOCKER_ENTRYPOINT) + +if os.path.exists(os.path.join(BUILD_PATH, "services")): + print("== Clean up services ==") + shutil.rmtree(os.path.join(BUILD_PATH, "services")) + +print("== Build ASC.Web.slnf ==") +subprocess.run(["dotnet", "build", os.path.join(SRC_PATH, "server", "ASC.Web.slnf")]) + +print("== Build ASC.Migrations.sln ==") +subprocess.run(["dotnet", "build", os.path.join(SRC_PATH, "server", "ASC.Migrations.sln"), "-o", os.path.join(BUILD_PATH, "services", "ASC.Migration.Runner", "service")]) + +print("== Add docker-migration-entrypoint.sh to ASC.Migration.Runner ==") +file_path = os.path.join(BUILD_PATH, "services", "ASC.Migration.Runner", "service", "docker-migration-entrypoint.sh") +src_file_path = os.path.join(SRC_PATH, "buildtools", "install", "docker", "docker-migration-entrypoint.sh") + +WINDOWS_LINE_ENDING = b'\r\n' +UNIX_LINE_ENDING = b'\n' + +with open(src_file_path, 'rb') as open_file: + content = open_file.read() + +content = content.replace(WINDOWS_LINE_ENDING, UNIX_LINE_ENDING) + +with open(file_path, 'wb') as open_file: + open_file.write(content) + +st = os.stat(file_path) +os.chmod(file_path, st.st_mode | stat.S_IEXEC) + +format = "zip" + +for service in BACKEND_NODEJS_SERVICES: + print(f"== Build {service} project ==") + src = os.path.join(SRC_PATH, "server", "common", service) + subprocess.run(["yarn", "install"], cwd=src, shell=True) + + dst = os.path.join(BUILD_PATH, "services", service, "service") + if not os.path.exists(dst): + os.makedirs(dst, exist_ok=True) + + archive_src = os.path.join(SRC_PATH, "server", "common", service, f"service.{format}") + archive = os.path.join(BUILD_PATH, "services", service, f"service.{format}") + + print("Make service archive", archive_src) + start = time.time() + shutil.make_archive(root_dir=src, format=format, base_name=dst) + end = time.time() + print(f"Took {(end-start)*1000.0} ms") + + print("Unpack service archive", archive) + start = time.time() + shutil.unpack_archive(archive, dst) + end = time.time() + print(f"Took {(end-start)*1000.0} ms") + + print("Remove service archive", archive) + os.remove(archive) + + print(f"== Add docker-entrypoint.py to {service}") + shutil.copyfile(DOCKER_ENTRYPOINT_PATH, os.path.join(dst, DOCKER_ENTRYPOINT)) + +print("== Publish ASC.Web.slnf ==") +subprocess.run(["dotnet", "publish", os.path.join(SRC_PATH, "server", "ASC.Web.slnf"), "-p", "PublishProfile=FolderProfile"]) + +for service in BACKEND_DOTNETCORE_SERVICES: + print(f"== Add {DOCKER_ENTRYPOINT} to {service}") + dst = os.path.join(BUILD_PATH, "services", service, "service") + shutil.copyfile(DOCKER_ENTRYPOINT_PATH, os.path.join(dst, DOCKER_ENTRYPOINT)) diff --git a/install/deb/debian/rules b/install/deb/debian/rules index 0401ee8fce..dacb7ecb8f 100755 --- a/install/deb/debian/rules +++ b/install/deb/debian/rules @@ -47,14 +47,15 @@ override_dh_auto_build: find ${SRC_PATH}/config/ -type f -regex '.*\.\(test\|dev\).*' -delete json -I -f ${SRC_PATH}/config/appsettings.json -e "this.core.notify.postman=\"services\"" -e "this.Logging.LogLevel.Default=\"Warning\"" -e "this['debug-info'].enabled=\"false\"" -e "this.web.samesite=\"None\"" json -I -f ${SRC_PATH}/config/apisystem.json -e "this.core.notify.postman=\"services\"" - sed 's_\(minlevel=\)".*"_\1"Warn"_g' -i ${SRC_PATH}/config/nlog.config + sed 's_\(minlevel=\)"[^"]*"_\1"Warn"_g' -i ${SRC_PATH}/config/nlog.config sed 's_etc/nginx_etc/openresty_g' -i ${SRC_PATH}/config/nginx/*.conf + sed -i 's_$public_root_/var/www/%{product}/public/_' config/nginx/onlyoffice.conf sed 's/teamlab.info/onlyoffice.com/g' -i ${SRC_PATH}/config/autofac.consumers.json json -I -f ${SRC_PATH}/client/public/scripts/config.json -e "this.wrongPortalNameUrl=\"\"" sed -e 's/$$router_host/127.0.0.1/g' -e 's/the_host/host/g' -e 's/the_scheme/scheme/g' -e 's_includes_/etc/openresty/includes_g' -i ${SRC_PATH}/buildtools/install/docker/config/nginx/onlyoffice-proxy*.conf sed "s_\(.*root\).*;_\1 \"/var/www/${PRODUCT}\";_g" -i ${SRC_PATH}/buildtools/install/docker/config/nginx/letsencrypt.conf - sed -e '/.pid/d' -e '/temp_path/d' -e 's_etc/nginx_etc/openresty_g' -i ${SRC_PATH}/buildtools/install/docker/config/nginx/templates/nginx.conf.template + sed -e '/.pid/d' -e '/temp_path/d' -e 's_etc/nginx_etc/openresty_g' -e 's/\.log/-openresty.log/g' -i ${SRC_PATH}/buildtools/install/docker/config/nginx/templates/nginx.conf.template mv -f ${SRC_PATH}/buildtools/install/docker/config/nginx/onlyoffice-proxy-ssl.conf ${SRC_PATH}/buildtools/install/docker/config/nginx/onlyoffice-proxy-ssl.conf.template for i in ${PRODUCT} $$(ls ${CURRENT_PATH}/debian/*.install | grep -oP 'debian/\K.*' | grep -o '^[^.]*'); do \ diff --git a/install/docker/.env b/install/docker/.env index 0de6ebbefc..d3c9eaabdf 100644 --- a/install/docker/.env +++ b/install/docker/.env @@ -84,6 +84,7 @@ MYSQL_USER=${PRODUCT}_user MYSQL_PASSWORD=${PRODUCT}_pass DATABASE_MIGRATION=false + MIGRATION_TYPE="SAAS" # service host # API_SYSTEM_HOST=${CONTAINER_PREFIX}api-system diff --git a/install/docker/Dockerfile.app b/install/docker/Dockerfile.app index 60d65e7989..21d7eaa815 100644 --- a/install/docker/Dockerfile.app +++ b/install/docker/Dockerfile.app @@ -28,6 +28,7 @@ RUN apt-get -y update && \ sudo \ locales \ git \ + python3-pip \ npm && \ locale-gen en_US.UTF-8 && \ npm install --global yarn && \ @@ -39,25 +40,23 @@ RUN apt-get -y update && \ rm -rf /var/lib/apt/lists/* ADD https://api.github.com/repos/ONLYOFFICE/DocSpace/git/refs/heads/${GIT_BRANCH} version.json -RUN echo ${GIT_BRANCH} && \ - git clone --recurse-submodules -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace.git ${SRC_PATH} +RUN git clone -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-buildtools.git ${SRC_PATH}/buildtools && \ + git clone --recurse-submodules -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-Server.git ${SRC_PATH}/server && \ + git clone -b ${GIT_BRANCH} https://github.com/ONLYOFFICE/DocSpace-Client.git ${SRC_PATH}/client RUN cd ${SRC_PATH} && \ mkdir -p /app/onlyoffice/config/ && \ cd buildtools/config && \ ls | grep -v test | grep -v dev | grep -v nginx | xargs cp -t /app/onlyoffice/config/ && \ cd ${SRC_PATH} && \ - # mkdir -p /app/onlyoffice/ && \ - #find buildtools/config/ -maxdepth 1 -name "*.json" | grep -v test | grep -v dev | xargs tar -cvf config.tar && \ - # tar -C "/app/onlyoffice/" -xvf config.tar && \ cp buildtools/config/*.config /app/onlyoffice/config/ && \ mkdir -p /etc/nginx/conf.d && cp -f buildtools/config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \ mkdir -p /etc/nginx/includes/ && cp -f buildtools/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}/buildtools/install/common/ && \ - bash build-frontend.sh -sp "${SRC_PATH}/client" -ba "${BUILD_ARGS}" -da "${DEPLOY_ARGS}" -di "${DEBUG_INFO}" && \ - bash build-backend.sh -sp "${SRC_PATH}/server" && \ + bash build-frontend.sh -sp "${SRC_PATH}" -ba "${BUILD_ARGS}" -da "${DEPLOY_ARGS}" -di "${DEBUG_INFO}" && \ + bash build-backend.sh -sp "${SRC_PATH}" && \ bash publish-backend.sh -pc "${PUBLISH_CNF}" -sp "${SRC_PATH}/server" -bp "${BUILD_PATH}" && \ cp -rf ${SRC_PATH}/server/products/ASC.Files/Server/DocStore ${BUILD_PATH}/products/ASC.Files/server/ && \ rm -rf ${SRC_PATH}/server/common/* && \ @@ -171,7 +170,8 @@ RUN sed -i 's/127.0.0.1:5010/$service_api_system/' /etc/nginx/conf.d/onlyoffice. sed -i 's/$public_root/\/var\/www\/public\//' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/http:\/\/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i '/client_body_temp_path/ i \ \ \ \ $MAP_HASH_BUCKET_SIZE' /etc/nginx/nginx.conf.template && \ - sed -i 's/\(worker_connections\).*;/\1 $COUNT_WORKER_CONNECTIONS;/' /etc/nginx/nginx.conf.template + sed -i 's/\(worker_connections\).*;/\1 $COUNT_WORKER_CONNECTIONS;/' /etc/nginx/nginx.conf.template && \ + sed -i -e '/^user/s/^/#/' -e 's#/tmp/nginx.pid#nginx.pid#' -e 's#/etc/nginx/mime.types#mime.types#' /etc/nginx/nginx.conf.template ENTRYPOINT [ "/docker-entrypoint.sh" ] @@ -312,7 +312,7 @@ WORKDIR ${BUILD_PATH}/studio/ASC.Web.Studio/ 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"] +CMD ["ASC.Web.Studio.dll", "ASC.Web.Studio", "core:eventBus:subscriptionClientName=asc_event_bus_webstudio_queue"] ## ASC.Web.HealthChecks.UI ## FROM dotnetrun AS healthchecks diff --git a/install/docker/Dockerfile.runtime b/install/docker/Dockerfile.runtime index 0c43830f9b..ca3320de5a 100644 --- a/install/docker/Dockerfile.runtime +++ b/install/docker/Dockerfile.runtime @@ -127,7 +127,8 @@ RUN chown onlyoffice:onlyoffice /etc/nginx/* -R && \ sed -i 's/http:\/\/172.*/$document_server;/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i 's/local redis_host = "127.0.0.1"/local redis_host = "onlyoffice-redis"/' /etc/nginx/conf.d/onlyoffice.conf && \ sed -i '/client_body_temp_path/ i \ \ \ \ $MAP_HASH_BUCKET_SIZE' /etc/nginx/nginx.conf.template && \ - sed -i 's/\(worker_connections\).*;/\1 $COUNT_WORKER_CONNECTIONS;/' /etc/nginx/nginx.conf.template + sed -i 's/\(worker_connections\).*;/\1 $COUNT_WORKER_CONNECTIONS;/' /etc/nginx/nginx.conf.template && \ + sed -i -e '/^user/s/^/#/' -e 's#/tmp/nginx.pid#nginx.pid#' -e 's#/etc/nginx/mime.types#mime.types#' /etc/nginx/nginx.conf.template ENTRYPOINT [ "/docker-entrypoint.sh" ] diff --git a/install/docker/docker-entrypoint.py b/install/docker/docker-entrypoint.py index f51e2b8df0..633c90e49c 100644 --- a/install/docker/docker-entrypoint.py +++ b/install/docker/docker-entrypoint.py @@ -35,7 +35,7 @@ OAUTH_REDIRECT_URL = os.environ["OAUTH_REDIRECT_URL"] if environ.get("OAUTH_REDI APP_STORAGE_ROOT = os.environ["APP_STORAGE_ROOT"] if environ.get("APP_STORAGE_ROOT") else BASE_DIR + "/data/" APP_KNOWN_PROXIES = os.environ["APP_KNOWN_PROXIES"] APP_KNOWN_NETWORKS = os.environ["APP_KNOWN_NETWORKS"] -LOG_LEVEL = os.environ["LOG_LEVEL"] if environ.get("LOG_LEVEL") else None +LOG_LEVEL = os.environ["LOG_LEVEL"].lower() if environ.get("LOG_LEVEL") else None DEBUG_INFO = os.environ["DEBUG_INFO"] if environ.get("DEBUG_INFO") else "false" SAMESITE = os.environ["SAMESITE"] if environ.get("SAMESITE") else "None" @@ -166,7 +166,6 @@ updateJsonData(jsonData,"$.files.docservice.url.public", DOCUMENT_SERVER_URL_PUB updateJsonData(jsonData,"$.files.docservice.url.internal", DOCUMENT_SERVER_CONNECTION_HOST) updateJsonData(jsonData,"$.files.docservice.secret.value", DOCUMENT_SERVER_JWT_SECRET) updateJsonData(jsonData,"$.files.docservice.secret.header", DOCUMENT_SERVER_JWT_HEADER) -updateJsonData(jsonData,"$.Logging.LogLevel.Default", LOG_LEVEL) updateJsonData(jsonData,"$.debug-info.enabled", DEBUG_INFO) updateJsonData(jsonData,"$.web.samesite", SAMESITE) if INSTALLATION_TYPE == "ENTERPRISE": diff --git a/install/docker/docker-healthchecks-entrypoint.sh b/install/docker/docker-healthchecks-entrypoint.sh index fecc4a3d88..04dd04ee20 100755 --- a/install/docker/docker-healthchecks-entrypoint.sh +++ b/install/docker/docker-healthchecks-entrypoint.sh @@ -31,6 +31,7 @@ STUDIO_NOTIFY_HOST=${STUDIO_NOTIFY_HOST:-"${CONTAINER_PREFIX}studio-notify:${SER API_HOST=${API_HOST:-"${CONTAINER_PREFIX}api:${SERVICE_PORT}"} STUDIO_HOST=${STUDIO_HOST:-"${CONTAINER_PREFIX}studio:${SERVICE_PORT}"} +sed -i "/\"Name\": \"ASC.ApiCache\"/,/{/d" ${PATH_TO_CONF}/appsettings.json sed -i "s!localhost:5010!${API_SYSTEM_HOST}!g" ${PATH_TO_CONF}/appsettings.json sed -i "s!localhost:5012!${BACKUP_HOST}!g" ${PATH_TO_CONF}/appsettings.json sed -i "s!localhost:5032!${BACKUP_BACKGRUOND_TASKS_HOST}!g" ${PATH_TO_CONF}/appsettings.json diff --git a/install/docker/docspace.profiles.yml b/install/docker/docspace.profiles.yml index dcc085336c..288c42e7fb 100644 --- a/install/docker/docspace.profiles.yml +++ b/install/docker/docspace.profiles.yml @@ -293,6 +293,7 @@ services: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} + MIGRATION_TYPE: ${MIGRATION_TYPE} networks: default: diff --git a/install/docker/prepare-nginx-router.sh b/install/docker/prepare-nginx-router.sh index b99e41221e..496a1d26da 100755 --- a/install/docker/prepare-nginx-router.sh +++ b/install/docker/prepare-nginx-router.sh @@ -4,7 +4,7 @@ REDIS_HOST=${REDIS_HOST:-"${REDIS_CONTAINER_NAME}"} REDIS_PORT=${REDIS_PORT:-"6379"} REDIS_PASSWORD=${REDIS_PASSWORD:-""} -envsubst '$MAP_HASH_BUCKET_SIZE,$COUNT_WORKER_CONNECTIONS' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf +envsubst '$MAP_HASH_BUCKET_SIZE,$COUNT_WORKER_CONNECTIONS' < /etc/nginx/nginx.conf.template > /usr/local/openresty/nginx/conf/nginx.conf sed -i "s~\(redis_host =\).*~\1 \"$REDIS_HOST\"~" /etc/nginx/conf.d/onlyoffice.conf sed -i "s~\(redis_port =\).*~\1 $REDIS_PORT~" /etc/nginx/conf.d/onlyoffice.conf sed -i "s~\(redis_pass =\).*~\1 \"$REDIS_PASSWORD\"~" /etc/nginx/conf.d/onlyoffice.conf diff --git a/install/rpm/SPECS/build.spec b/install/rpm/SPECS/build.spec index f5a3256b6d..de9bcbf3c3 100644 --- a/install/rpm/SPECS/build.spec +++ b/install/rpm/SPECS/build.spec @@ -1,36 +1,40 @@ %build -bash buildtools/install/common/systemd/build.sh +cd %{_builddir}/buildtools -bash buildtools/install/common/build-frontend.sh --srcpath %{_builddir}/%{sourcename} -bash buildtools/install/common/build-backend.sh --srcpath %{_builddir}/%{sourcename} -bash buildtools/install/common/publish-backend.sh --srcpath %{_builddir}/%{sourcename} -rename -f -v "s/product([^\/]*)$/%{product}\$1/g" buildtools/install/common/* -sed -i "s/{{product}}/%{product}/g" %{_builddir}/%{sourcename}/buildtools/install/common/logrotate/product-common +bash install/common/systemd/build.sh -rm -f %{_builddir}/%{sourcename}/config/nginx/onlyoffice-login.conf +bash install/common/build-frontend.sh --srcpath %{_builddir}/client +bash install/common/build-backend.sh --srcpath %{_builddir}/server +bash install/common/publish-backend.sh --srcpath %{_builddir}/server + +rename -f -v "s/product([^\/]*)$/%{product}\$1/g" install/common/* +sed -i "s/{{product}}/%{product}/g" install/common/logrotate/product-common + +rm -f config/nginx/onlyoffice-login.conf +find config/ -type f -regex '.*\.\(test\|dev\).*' -delete if ! grep -q 'var/www/%{product}' config/nginx/*.conf; then find config/nginx/ -name "*.conf" -exec sed -i "s@\(var/www/\)@\1%{product}/@" {} +; fi -json -I -f %{_builddir}/%{sourcename}/config/appsettings.services.json -e "this.logPath=\"/var/log/onlyoffice/%{product}\"" -e "this.socket={ 'path': '../ASC.Socket.IO/' }" \ +json -I -f config/appsettings.services.json -e "this.logPath=\"/var/log/onlyoffice/%{product}\"" -e "this.socket={ 'path': '../ASC.Socket.IO/' }" \ -e "this.ssoauth={ 'path': '../ASC.SsoAuth/' }" -e "this.logLevel=\"warning\"" -e "this.core={ 'products': { 'folder': '%{buildpath}/products', 'subfolder': 'server'} }" +json -I -f config/appsettings.json -e "this.core.notify.postman=\"services\"" -e "this['debug-info'].enabled=\"false\"" -e "this.web.samesite=\"None\"" +json -I -f config/apisystem.json -e "this.core.notify.postman=\"services\"" +json -I -f %{_builddir}/publish/web/public/scripts/config.json -e "this.wrongPortalNameUrl=\"\"" -find %{_builddir}/%{sourcename}/config/ -type f -regex '.*\.\(test\|dev\).*' -delete -json -I -f %{_builddir}/%{sourcename}/config/appsettings.json -e "this.core.notify.postman=\"services\"" -e "this.Logging.LogLevel.Default=\"Warning\"" -e "this['debug-info'].enabled=\"false\"" -e "this.web.samesite=\"None\"" -json -I -f %{_builddir}/%{sourcename}/config/apisystem.json -e "this.core.notify.postman=\"services\"" -sed 's_\(minlevel=\)".*"_\1"Warn"_g' -i %{_builddir}/%{sourcename}/config/nlog.config +sed 's_\(minlevel=\)"[^"]*"_\1"Warn"_g' -i config/nlog.config +sed 's/teamlab.info/onlyoffice.com/g' -i config/autofac.consumers.json -sed 's_etc/nginx_etc/openresty_g' -i %{_builddir}/%{sourcename}/config/nginx/*.conf -sed 's/teamlab.info/onlyoffice.com/g' -i %{_builddir}/%{sourcename}/config/autofac.consumers.json -json -I -f %{_builddir}/%{sourcename}/client/public/scripts/config.json -e "this.wrongPortalNameUrl=\"\"" -sed -e 's/$router_host/127.0.0.1/g' -e 's/the_host/host/g' -e 's/the_scheme/scheme/g' -e 's_includes_/etc/openresty/includes_g' -i %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/onlyoffice-proxy*.conf -sed -e '/.pid/d' -e '/temp_path/d' -e 's_etc/nginx_etc/openresty_g' -i %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/templates/nginx.conf.template -sed -i "s_\(.*root\).*;_\1 \"/var/www/%{product}\";_g" -i %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/letsencrypt.conf +sed 's_etc/nginx_etc/openresty_g' -i config/nginx/*.conf +sed -i 's_$public_root_/var/www/%{product}/public/_' config/nginx/onlyoffice.conf +sed -e 's/$router_host/127.0.0.1/g' -e 's/the_host/host/g' -e 's/the_scheme/scheme/g' -e 's_includes_/etc/openresty/includes_g' -i install/docker/config/nginx/onlyoffice-proxy*.conf +sed -e '/.pid/d' -e '/temp_path/d' -e 's_etc/nginx_etc/openresty_g' -e 's/\.log/-openresty.log/g' -i install/docker/config/nginx/templates/nginx.conf.template +sed -i "s_\(.*root\).*;_\1 \"/var/www/%{product}\";_g" -i install/docker/config/nginx/letsencrypt.conf -find %{_builddir}/%{sourcename}/publish/ \ - %{_builddir}/%{sourcename}/ASC.Migration.Runner \ +find %{_builddir}/server/publish/ \ + %{_builddir}/server/ASC.Migration.Runner \ -depth -type f -regex '.*\(dll\|dylib\|so\)$' -exec chmod 755 {} \; -find %{_builddir}/%{sourcename}/publish/ \ - %{_builddir}/%{sourcename}/ASC.Migration.Runner \ +find %{_builddir}/server/publish/ \ + %{_builddir}/server/ASC.Migration.Runner \ -depth -type f -regex '.*\(so\)$' -exec strip {} \; diff --git a/install/rpm/SPECS/install.spec b/install/rpm/SPECS/install.spec index 129d6b71a4..29304fbcc1 100644 --- a/install/rpm/SPECS/install.spec +++ b/install/rpm/SPECS/install.spec @@ -1,68 +1,67 @@ %install -rm -rf %{buildroot} -mkdir -p "%{buildroot}%{_bindir}/" -mkdir -p "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/" -mkdir -p "%{buildroot}%{_sysconfdir}/logrotate.d" -mkdir -p "%{buildroot}%{_sysconfdir}/openresty/conf.d/" -mkdir -p "%{buildroot}%{_sysconfdir}/openresty/includes/" -mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/.private/" -mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/openresty" -mkdir -p "%{buildroot}%{_var}/log/onlyoffice/%{product}/" -mkdir -p "%{buildroot}%{buildpath}/Tools/radicale/plugins/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/client/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/editor/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/server/DocStore/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/service/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.People/client/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.People/server/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.ApiSystem/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.ClearEvents/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Data.Backup.BackgroundTasks/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Data.Backup/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Migration.Runner/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Notify/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Socket.IO/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.SsoAuth/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Studio.Notify/" -mkdir -p "%{buildroot}%{buildpath}/services/ASC.Web.HealthChecks.UI/" -mkdir -p "%{buildroot}%{buildpath}/studio/ASC.Web.Api/" -mkdir -p "%{buildroot}%{buildpath}/studio/ASC.Web.Studio/" -mkdir -p "%{buildroot}%{buildpath}/public/" -mkdir -p "%{buildroot}%{buildpath}/client/" -mkdir -p "%{buildroot}%{buildpath}/products/ASC.Login/login/" +rm -rf %{buildroot} mkdir -p "%{buildroot}/usr/lib/systemd/system/" mkdir -p "%{buildroot}/%{_var}/www/onlyoffice/Data" -cp -rf %{_builddir}/%{sourcename}/LICENSE "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/" -cp -rf %{_builddir}/%{sourcename}/README.md "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/" -cp -rf %{_builddir}/%{sourcename}/ASC.Migration.Runner/service/* "%{buildroot}%{buildpath}/services/ASC.Migration.Runner/" -cp -rf %{_builddir}/%{sourcename}/buildtools/deploy/editor/* "%{buildroot}%{buildpath}/products/ASC.Files/editor/" -cp -rf %{_builddir}/%{sourcename}/buildtools/deploy/public/* "%{buildroot}%{buildpath}/public/" -cp -rf %{_builddir}/%{sourcename}/buildtools/deploy/client/* "%{buildroot}%{buildpath}/client/" -cp -rf %{_builddir}/%{sourcename}/buildtools/deploy/login/* "%{buildroot}%{buildpath}/products/ASC.Login/login/" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/RadicalePlugins/* "%{buildroot}%{buildpath}/Tools/radicale/plugins/" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/common/%{product}-configuration "%{buildroot}%{_bindir}/%{product}-configuration" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/common/systemd/modules/* "%{buildroot}/usr/lib/systemd/system/" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/common/logrotate/product-common "%{buildroot}%{_sysconfdir}/logrotate.d/%{product}-common" -cp -rf %{_builddir}/%{sourcename}/config/* "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/" -cp -rf %{_builddir}/%{sourcename}/config/nginx/includes/onlyoffice*.conf "%{buildroot}%{_sysconfdir}/openresty/includes/" -cp -rf %{_builddir}/%{sourcename}/config/nginx/onlyoffice*.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/" -cp -rf %{_builddir}/%{sourcename}/products/ASC.Files/Server/DocStore/* "%{buildroot}%{buildpath}/products/ASC.Files/server/DocStore/" -cp -rf %{_builddir}/%{sourcename}/publish/products/ASC.Files/server/* "%{buildroot}%{buildpath}/products/ASC.Files/server/" -cp -rf %{_builddir}/%{sourcename}/publish/products/ASC.People/server/* "%{buildroot}%{buildpath}/products/ASC.People/server/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.ApiSystem/service/* "%{buildroot}%{buildpath}/services/ASC.ApiSystem/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.ClearEvents/service/* "%{buildroot}%{buildpath}/services/ASC.ClearEvents/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Data.Backup.BackgroundTasks/service/* "%{buildroot}%{buildpath}/services/ASC.Data.Backup.BackgroundTasks/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Data.Backup/service/* "%{buildroot}%{buildpath}/services/ASC.Data.Backup/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Files.Service/service/* "%{buildroot}%{buildpath}/products/ASC.Files/service/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Notify/service/* "%{buildroot}%{buildpath}/services/ASC.Notify/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Socket.IO/service/* "%{buildroot}%{buildpath}/services/ASC.Socket.IO/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.SsoAuth/service/* "%{buildroot}%{buildpath}/services/ASC.SsoAuth/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Studio.Notify/service/* "%{buildroot}%{buildpath}/services/ASC.Studio.Notify/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Web.Api/service/* "%{buildroot}%{buildpath}/studio/ASC.Web.Api/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Web.HealthChecks.UI/service/* "%{buildroot}%{buildpath}/services/ASC.Web.HealthChecks.UI/" -cp -rf %{_builddir}/%{sourcename}/publish/services/ASC.Web.Studio/service/* "%{buildroot}%{buildpath}/studio/ASC.Web.Studio/" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/onlyoffice-proxy.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/onlyoffice-proxy.conf" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/onlyoffice-proxy-ssl.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/onlyoffice-proxy-ssl.conf.template" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/letsencrypt.conf "%{buildroot}%{_sysconfdir}/openresty/includes/letsencrypt.conf" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/docker/config/nginx/templates/nginx.conf.template "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/openresty/nginx.conf.template" -cp -rf %{_builddir}/%{sourcename}/buildtools/install/common/%{product}-ssl-setup "%{buildroot}%{_bindir}/%{product}-ssl-setup" +mkdir -p "%{buildroot}%{buildpath}/Tools/radicale/plugins/" +mkdir -p "%{buildroot}%{buildpath}/studio/ASC.Web.Studio/" +mkdir -p "%{buildroot}%{buildpath}/studio/ASC.Web.Api/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Web.HealthChecks.UI/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Studio.Notify/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.SsoAuth/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Socket.IO/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Notify/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Migration.Runner/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Data.Backup/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.Data.Backup.BackgroundTasks/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.ClearEvents/" +mkdir -p "%{buildroot}%{buildpath}/services/ASC.ApiSystem/" +mkdir -p "%{buildroot}%{buildpath}/public/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.People/server/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.People/client/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.Login/login/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/service/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/server/DocStore/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/editor/" +mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/client/" +mkdir -p "%{buildroot}%{buildpath}/client/" +mkdir -p "%{buildroot}%{_var}/log/onlyoffice/%{product}/" +mkdir -p "%{buildroot}%{_sysconfdir}/openresty/includes/" +mkdir -p "%{buildroot}%{_sysconfdir}/openresty/conf.d/" +mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/openresty" +mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/.private/" +mkdir -p "%{buildroot}%{_sysconfdir}/logrotate.d" +mkdir -p "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/" +mkdir -p "%{buildroot}%{_bindir}/" +cp -rf %{_builddir}/publish/web/public/* "%{buildroot}%{buildpath}/public/" +cp -rf %{_builddir}/publish/web/login/* "%{buildroot}%{buildpath}/products/ASC.Login/login/" +cp -rf %{_builddir}/publish/web/editor/* "%{buildroot}%{buildpath}/products/ASC.Files/editor/" +cp -rf %{_builddir}/publish/web/client/* "%{buildroot}%{buildpath}/client/" +cp -rf %{_builddir}/server/publish/services/ASC.Web.Studio/service/* "%{buildroot}%{buildpath}/studio/ASC.Web.Studio/" +cp -rf %{_builddir}/server/publish/services/ASC.Web.HealthChecks.UI/service/* "%{buildroot}%{buildpath}/services/ASC.Web.HealthChecks.UI/" +cp -rf %{_builddir}/server/publish/services/ASC.Web.Api/service/* "%{buildroot}%{buildpath}/studio/ASC.Web.Api/" +cp -rf %{_builddir}/server/publish/services/ASC.Studio.Notify/service/* "%{buildroot}%{buildpath}/services/ASC.Studio.Notify/" +cp -rf %{_builddir}/server/publish/services/ASC.SsoAuth/service/* "%{buildroot}%{buildpath}/services/ASC.SsoAuth/" +cp -rf %{_builddir}/server/publish/services/ASC.Socket.IO/service/* "%{buildroot}%{buildpath}/services/ASC.Socket.IO/" +cp -rf %{_builddir}/server/publish/services/ASC.Notify/service/* "%{buildroot}%{buildpath}/services/ASC.Notify/" +cp -rf %{_builddir}/server/publish/services/ASC.Files.Service/service/* "%{buildroot}%{buildpath}/products/ASC.Files/service/" +cp -rf %{_builddir}/server/publish/services/ASC.Data.Backup/service/* "%{buildroot}%{buildpath}/services/ASC.Data.Backup/" +cp -rf %{_builddir}/server/publish/services/ASC.Data.Backup.BackgroundTasks/service/* "%{buildroot}%{buildpath}/services/ASC.Data.Backup.BackgroundTasks/" +cp -rf %{_builddir}/server/publish/services/ASC.ClearEvents/service/* "%{buildroot}%{buildpath}/services/ASC.ClearEvents/" +cp -rf %{_builddir}/server/publish/services/ASC.ApiSystem/service/* "%{buildroot}%{buildpath}/services/ASC.ApiSystem/" +cp -rf %{_builddir}/server/publish/products/ASC.People/server/* "%{buildroot}%{buildpath}/products/ASC.People/server/" +cp -rf %{_builddir}/server/publish/products/ASC.Files/server/* "%{buildroot}%{buildpath}/products/ASC.Files/server/" +cp -rf %{_builddir}/server/LICENSE "%{buildroot}%{_docdir}/%{name}-%{version}-%{release}/" +cp -rf %{_builddir}/server/ASC.Migration.Runner/service/* "%{buildroot}%{buildpath}/services/ASC.Migration.Runner/" +cp -rf %{_builddir}/document-templates-main-community-server/* "%{buildroot}%{buildpath}/products/ASC.Files/server/DocStore/" +cp -rf %{_builddir}/buildtools/install/RadicalePlugins/* "%{buildroot}%{buildpath}/Tools/radicale/plugins/" +cp -rf %{_builddir}/buildtools/install/docker/config/nginx/templates/nginx.conf.template "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/openresty/nginx.conf.template" +cp -rf %{_builddir}/buildtools/install/docker/config/nginx/onlyoffice-proxy.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/onlyoffice-proxy.conf" +cp -rf %{_builddir}/buildtools/install/docker/config/nginx/onlyoffice-proxy-ssl.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/onlyoffice-proxy-ssl.conf.template" +cp -rf %{_builddir}/buildtools/install/docker/config/nginx/letsencrypt.conf "%{buildroot}%{_sysconfdir}/openresty/includes/letsencrypt.conf" +cp -rf %{_builddir}/buildtools/install/common/systemd/modules/* "%{buildroot}/usr/lib/systemd/system/" +cp -rf %{_builddir}/buildtools/install/common/logrotate/product-common "%{buildroot}%{_sysconfdir}/logrotate.d/%{product}-common" +cp -rf %{_builddir}/buildtools/install/common/%{product}-ssl-setup "%{buildroot}%{_bindir}/%{product}-ssl-setup" +cp -rf %{_builddir}/buildtools/install/common/%{product}-configuration "%{buildroot}%{_bindir}/%{product}-configuration" +cp -rf %{_builddir}/buildtools/config/nginx/onlyoffice*.conf "%{buildroot}%{_sysconfdir}/openresty/conf.d/" +cp -rf %{_builddir}/buildtools/config/nginx/includes/onlyoffice*.conf "%{buildroot}%{_sysconfdir}/openresty/includes/" +cp -rf %{_builddir}/buildtools/config/* "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/" diff --git a/install/rpm/SPECS/product.spec b/install/rpm/SPECS/product.spec index d5b695f871..c9c3d28624 100644 --- a/install/rpm/SPECS/product.spec +++ b/install/rpm/SPECS/product.spec @@ -1,9 +1,10 @@ %define _binaries_in_noarch_packages_terminate_build 0 %define _build_id_links none +%define __os_install_post /usr/lib/rpm/brp-compress %{nil} %global product docspace +%global product_name DocSpace %global buildpath %{_var}/www/%{product} -%global sourcename DocSpace-%GIT_BRANCH Name: %{product} Summary: Business productivity tools @@ -19,10 +20,12 @@ Vendor: Ascensio System SIA Packager: %{packager} License: AGPLv3 -Source0: https://github.com/ONLYOFFICE/%{product}/archive/%GIT_BRANCH.tar.gz#/%{sourcename}.tar.gz -Source1: https://github.com/ONLYOFFICE/document-templates/archive/main/community-server.tar.gz#/document-templates-main-community-server.tar.gz -Source2: https://github.com/ONLYOFFICE/dictionaries/archive/master.tar.gz#/dictionaries-master.tar.gz -Source3: %{product}.rpmlintrc +Source0: https://github.com/ONLYOFFICE/%{product}-buildtools/archive/%{BRANCH_BUILDTOOLS}.tar.gz#/%{product_name}-buildtools-%{BRANCH_BUILDTOOLS}.tar.gz +Source1: https://github.com/ONLYOFFICE/%{product}-client/archive/%{BRANCH_CLIENT}.tar.gz#/%{product_name}-client-%{BRANCH_CLIENT}.tar.gz +Source2: https://github.com/ONLYOFFICE/%{product}-server/archive/%{BRANCH_SERVER}.tar.gz#/%{product_name}-server-%{BRANCH_SERVER}.tar.gz +Source3: https://github.com/ONLYOFFICE/document-templates/archive/main/community-server.tar.gz#/document-templates-main-community-server.tar.gz +Source4: https://github.com/ONLYOFFICE/dictionaries/archive/master.tar.gz#/dictionaries-master.tar.gz +Source5: %{product}.rpmlintrc BuildRequires: nodejs >= 18.0 BuildRequires: yarn @@ -58,11 +61,15 @@ predefined permissions. %include package.spec %prep +rm -rf %{_rpmdir}/%{_arch}/%{name}-* %{_builddir}/* -rm -rf %{_rpmdir}/%{_arch}/%{name}-* -%setup -b1 -b2 -n %{sourcename} -q -mv -f %{_builddir}/document-templates-main-community-server/* %{_builddir}/%{sourcename}/products/ASC.Files/Server/DocStore/ -mv -f %{_builddir}/dictionaries-master/* %{_builddir}/%{sourcename}/common/Tests/Frontend.Translations.Tests/dictionaries/ +echo "%{SOURCE0} %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4}" | xargs -n 1 -P 5 tar -xzf +cp %{SOURCE5} . + +mv -f %{product_name}-buildtools-%{BRANCH_BUILDTOOLS} buildtools +mv -f %{product_name}-client-%{BRANCH_CLIENT} client +mv -f %{product_name}-server-%{BRANCH_SERVER} server +mv -f %{_builddir}/dictionaries-master/* %{_builddir}/client/common/Tests/Frontend.Translations.Tests/dictionaries/ %include build.spec diff --git a/install/win/CustomActions/C#/Utils/Utils.csproj b/install/win/CustomActions/C#/Utils/Utils.csproj index 7edee52fdf..a9c2a20426 100644 --- a/install/win/CustomActions/C#/Utils/Utils.csproj +++ b/install/win/CustomActions/C#/Utils/Utils.csproj @@ -1,5 +1,5 @@ - + Debug x86 diff --git a/install/win/DocSpace.aip b/install/win/DocSpace.aip index 5ff1cfcfac..da79c53627 100644 --- a/install/win/DocSpace.aip +++ b/install/win/DocSpace.aip @@ -50,7 +50,9 @@ + + @@ -58,7 +60,7 @@ - + @@ -210,8 +212,10 @@ + + @@ -264,6 +268,7 @@ + @@ -310,8 +315,8 @@ - - + + @@ -415,11 +420,13 @@ + + @@ -427,6 +434,7 @@ + @@ -474,8 +482,8 @@ - - + + @@ -501,6 +509,7 @@ + @@ -538,6 +547,7 @@ + @@ -1069,12 +1079,13 @@ - + + @@ -1188,6 +1199,8 @@ + + @@ -1207,16 +1220,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -1241,7 +1254,6 @@ - @@ -1271,6 +1283,7 @@ + @@ -1295,6 +1308,7 @@ + @@ -1304,7 +1318,7 @@ - + @@ -1392,6 +1406,7 @@ + @@ -1402,26 +1417,49 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -1431,6 +1469,9 @@ + + + @@ -1524,47 +1565,80 @@ - - - - - - + + + + + - - - + + + + + + + + + + + + + + + + - - + + + - - - - - - - + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + diff --git a/install/win/build-batch.bat b/install/win/build-batch.bat index 138a9701c9..b7a8b0f6c4 100644 --- a/install/win/build-batch.bat +++ b/install/win/build-batch.bat @@ -1,111 +1,115 @@ REM echo ######## Set variables ######## set "publisher="Ascensio System SIA"" -set "nuget="%cd%\thirdparty\SimpleRestServices\src\.nuget\NuGet.exe"" +set "nuget="%cd%\server\thirdparty\SimpleRestServices\src\.nuget\NuGet.exe"" set "environment=production" REM echo ######## Extracting and preparing files to build ######## -md build\install\win\OpenResty\tools -md build\install\win\Files\tools -md build\install\win\Files\Logs -md build\install\win\Files\Data -md build\install\win\Files\sbin -md build\install\win\Files\products\ASC.Files\server\temp -md build\install\win\Files\products\ASC.People\server\temp -md build\install\win\Files\services\ASC.Data.Backup\service\temp -md build\install\win\Files\services\ASC.Files.Service\service\temp -md build\install\win\Files\services\ASC.Notify\service\temp -md build\install\win\Files\services\ASC.Studio.Notify\service\temp -md build\install\win\Files\services\ASC.Data.Backup.BackgroundTasks\service\temp -md build\install\win\Files\services\ASC.ClearEvents\service\temp -md build\install\win\Files\services\ASC.Web.Api\service\temp -md build\install\win\Files\services\ASC.Web.Studio\service\temp -md build\install\win\Files\services\ASC.Web.HealthChecks.UI\service\temp -copy build\install\win\WinSW.NET4.exe "build\install\win\OpenResty\tools\OpenResty.exe" /y -copy build\install\win\tools\OpenResty.xml "build\install\win\OpenResty\tools\OpenResty.xml" /y -copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\Socket.IO.exe" /y -copy build\install\win\tools\Socket.IO.xml "build\install\win\Files\tools\Socket.IO.xml" /y -copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\SsoAuth.exe" /y -copy build\install\win\tools\SsoAuth.xml "build\install\win\Files\tools\SsoAuth.xml" /y -copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\DocEditor.exe" /y -copy build\install\win\tools\DocEditor.xml "build\install\win\Files\tools\DocEditor.xml" /y -copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\Login.exe" /y -copy build\install\win\tools\Login.xml "build\install\win\Files\tools\Login.xml" /y -copy "build\install\win\nginx.conf" "build\install\win\Files\nginx\conf\nginx.conf" /y -copy "build\install\docker\config\nginx\onlyoffice-proxy.conf" "build\install\win\Files\nginx\conf\onlyoffice-proxy.conf" /y -copy "build\install\docker\config\nginx\onlyoffice-proxy-ssl.conf" "build\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl" /y -copy "build\install\docker\config\nginx\letsencrypt.conf" "build\install\win\Files\nginx\conf\includes\letsencrypt.conf" /y -copy "build\install\win\sbin\docspace-ssl-setup.ps1" "build\install\win\Files\sbin\docspace-ssl-setup.ps1" /y -rmdir build\install\win\publish /s /q +md buildtools\install\win\OpenResty\tools +md buildtools\install\win\Files\tools +md buildtools\install\win\Files\Logs +md buildtools\install\win\Files\Data +md buildtools\install\win\Files\sbin +md buildtools\install\win\Files\products\ASC.Files\server\temp +md buildtools\install\win\Files\products\ASC.People\server\temp +md buildtools\install\win\Files\services\ASC.Data.Backup\service\temp +md buildtools\install\win\Files\services\ASC.Files.Service\service\temp +md buildtools\install\win\Files\services\ASC.Notify\service\temp +md buildtools\install\win\Files\services\ASC.Studio.Notify\service\temp +md buildtools\install\win\Files\services\ASC.Data.Backup.BackgroundTasks\service\temp +md buildtools\install\win\Files\services\ASC.ClearEvents\service\temp +md buildtools\install\win\Files\services\ASC.Web.Api\service\temp +md buildtools\install\win\Files\services\ASC.Web.Studio\service\temp +md buildtools\install\win\Files\services\ASC.Web.HealthChecks.UI\service\temp +copy buildtools\install\win\WinSW.NET4.exe "buildtools\install\win\OpenResty\tools\OpenResty.exe" /y +copy buildtools\install\win\tools\OpenResty.xml "buildtools\install\win\OpenResty\tools\OpenResty.xml" /y +copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\Files\tools\Socket.IO.exe" /y +copy buildtools\install\win\tools\Socket.IO.xml "buildtools\install\win\Files\tools\Socket.IO.xml" /y +copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\Files\tools\SsoAuth.exe" /y +copy buildtools\install\win\tools\SsoAuth.xml "buildtools\install\win\Files\tools\SsoAuth.xml" /y +copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\Files\tools\DocEditor.exe" /y +copy buildtools\install\win\tools\DocEditor.xml "buildtools\install\win\Files\tools\DocEditor.xml" /y +copy buildtools\install\win\WinSW3.0.0.exe "buildtools\install\win\Files\tools\Login.exe" /y +copy buildtools\install\win\tools\Login.xml "buildtools\install\win\Files\tools\Login.xml" /y +copy "buildtools\install\win\nginx.conf" "buildtools\install\win\Files\nginx\conf\nginx.conf" /y +copy "buildtools\install\docker\config\nginx\onlyoffice-proxy.conf" "buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf" /y +copy "buildtools\install\docker\config\nginx\onlyoffice-proxy-ssl.conf" "buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl" /y +copy "buildtools\install\docker\config\nginx\letsencrypt.conf" "buildtools\install\win\Files\nginx\conf\includes\letsencrypt.conf" /y +copy "buildtools\install\win\sbin\docspace-ssl-setup.ps1" "buildtools\install\win\Files\sbin\docspace-ssl-setup.ps1" /y +rmdir buildtools\install\win\publish /s /q REM echo ######## SSL configs ######## -%sed% -i "s/the_host/host/g" build\install\win\Files\nginx\conf\onlyoffice-proxy.conf build\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl -%sed% -i "s/the_scheme/scheme/g" build\install\win\Files\nginx\conf\onlyoffice-proxy.conf build\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl -%sed% -i "s/ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;/#ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;/" build\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl -%sed% -i "s_\(.*root\).*;_\1 \"{APPDIR}letsencrypt\";_g" -i build\install\win\Files\nginx\conf\includes\letsencrypt.conf +%sed% -i "s/the_host/host/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl +%sed% -i "s/the_scheme/scheme/g" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy.conf buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl +%sed% -i "s/ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;/#ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;/" buildtools\install\win\Files\nginx\conf\onlyoffice-proxy-ssl.conf.tmpl +%sed% -i "s_\(.*root\).*;_\1 \"{APPDIR}letsencrypt\";_g" -i buildtools\install\win\Files\nginx\conf\includes\letsencrypt.conf REM echo ######## Delete test and dev configs ######## -del /f /q build\install\win\Files\config\*.test.json -del /f /q build\install\win\Files\config\*.dev.json +del /f /q buildtools\install\win\Files\config\*.test.json +del /f /q buildtools\install\win\Files\config\*.dev.json ::default logging to warning -%sed% "s_\(\"Default\":\).*,_\1 \"Warning\",_g" -i build\install\win\Files\config\appsettings.json -%sed% "s_\(\"logLevel\":\).*_\1 \"warning\"_g" -i build\install\win\Files\config\appsettings.services.json -%sed% "/\"debug-info\": {/,/}/ s/\(\"enabled\": \)\".*\"/\1\"false\"/" -i build\install\win\Files\config\appsettings.json +%sed% "s_\(\"Default\":\).*,_\1 \"Warning\",_g" -i buildtools\install\win\Files\config\appsettings.json +%sed% "s_\(\"logLevel\":\).*_\1 \"warning\"_g" -i buildtools\install\win\Files\config\appsettings.services.json +%sed% "/\"debug-info\": {/,/}/ s/\(\"enabled\": \)\".*\"/\1\"false\"/" -i buildtools\install\win\Files\config\appsettings.json -%sed% "s_\(\"samesite\":\).*,_\1 \"None\",_g" -i build\install\win\Files\config\appsettings.json +%sed% "s_\(\"samesite\":\).*,_\1 \"None\",_g" -i buildtools\install\win\Files\config\appsettings.json ::redirectUrl value replacement -%sed% "s/teamlab.info/onlyoffice.com/g" -i build\install\win\Files\config/autofac.consumers.json -%sed% "s_\(\"wrongPortalNameUrl\":\).*,_\1 \"\",_g" -i build\install\win\Files\public\scripts\config.json +%sed% "s/teamlab.info/onlyoffice.com/g" -i buildtools\install\win\Files\config/autofac.consumers.json +%sed% "s_\(\"wrongPortalNameUrl\":\).*,_\1 \"\",_g" -i buildtools\install\win\Files\public\scripts\config.json REM echo ######## Remove AWSTarget from nlog.config ######## -%sed% -i "//d; //d" build\install\win\Files\config\nlog.config -del /q build\install\win\Files\config\sed* +%sed% -i "//d; //d" buildtools\install\win\Files\config\nlog.config ::edit environment -%sed% -i "s/\(\W\)PRODUCT.ENVIRONMENT.SUB\(\W\)/\1%environment%\2/g" build\install\win\DocSpace.aip +%sed% -i "s/\(\W\)PRODUCT.ENVIRONMENT.SUB\(\W\)/\1%environment%\2/g" buildtools\install\win\DocSpace.aip ::delete nginx configs -del /f /q build\install\win\Files\nginx\conf\onlyoffice-login.conf -del /f /q build\install\win\Files\nginx\conf\onlyoffice-story.conf +del /f /q buildtools\install\win\Files\nginx\conf\onlyoffice-login.conf +del /f /q buildtools\install\win\Files\nginx\conf\onlyoffice-story.conf +::Remove unused services from HealthCheck | Bug 64516 +%sed% -i "/\"Name\": \"ASC.ApiCache\"/,/{/d" buildtools\install\win\Files\services\ASC.Web.HealthChecks.UI\service\appsettings.json +%sed% -i "/\"Name\": \"ASC.ApiSystem\"/,/{/d" buildtools\install\win\Files\services\ASC.Web.HealthChecks.UI\service\appsettings.json + +::configure nuget.config +copy "server\NuGet.config" . /y +%sed% -i "s/\.nuget\\packages/server\\.nuget\\packages/g" NuGet.config REM echo ######## Build Utils ######## -%nuget% install %cd%\build\install\win\CustomActions\C#\Utils\packages.config -OutputDirectory %cd%\build\install\win\CustomActions\C#\Utils\packages -%msbuild% build\install\win\CustomActions\C#\Utils\Utils.csproj -copy build\install\win\CustomActions\C#\Utils\bin\Debug\Utils.CA.dll build\install\win\Utils.CA.dll /y -rmdir build\install\win\CustomActions\C#\Utils\bin /s /q -rmdir build\install\win\CustomActions\C#\Utils\obj /s /q +%nuget% install %cd%\buildtools\install\win\CustomActions\C#\Utils\packages.config -OutputDirectory %cd%\buildtools\install\win\CustomActions\C#\Utils\packages +%msbuild% buildtools\install\win\CustomActions\C#\Utils\Utils.csproj +copy buildtools\install\win\CustomActions\C#\Utils\bin\Debug\Utils.CA.dll buildtools\install\win\Utils.CA.dll /y +rmdir buildtools\install\win\CustomActions\C#\Utils\bin /s /q +rmdir buildtools\install\win\CustomActions\C#\Utils\obj /s /q REM echo ######## Delete temp files ######## -del /f /q build\install\win\*.back.* +del /f /q buildtools\install\win\*.back.* +del /f /q sed* REM echo ######## Build MySQL Server Installer ######## -iscc /Qp /S"byparam="signtool" sign /a /n "%publisher%" /t http://timestamp.digicert.com $f" "build\install\win\MySQL Server Installer Runner.iss" +iscc /Qp /S"byparam="signtool" sign /a /n "%publisher%" /t http://timestamp.digicert.com $f" "buildtools\install\win\MySQL Server Installer Runner.iss" REM echo ######## Build OpenResty ######## IF "%SignBuild%"=="true" ( -%AdvancedInstaller% /edit build\install\win\OpenResty.aip /SetSig -%AdvancedInstaller% /edit build\install\win\OpenResty.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%" +%AdvancedInstaller% /edit buildtools\install\win\OpenResty.aip /SetSig +%AdvancedInstaller% /edit buildtools\install\win\OpenResty.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%" ) -%AdvancedInstaller% /rebuild build\install\win\OpenResty.aip +%AdvancedInstaller% /rebuild buildtools\install\win\OpenResty.aip REM echo ######## Build DocSpace package ######## -%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetVersion %BUILD_VERSION%.%BUILD_NUMBER% +%AdvancedInstaller% /edit buildtools\install\win\DocSpace.aip /SetVersion %BUILD_VERSION%.%BUILD_NUMBER% IF "%SignBuild%"=="true" ( -%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetSig -%AdvancedInstaller% /edit build\install\win\DocSpace.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%" +%AdvancedInstaller% /edit buildtools\install\win\DocSpace.aip /SetSig +%AdvancedInstaller% /edit buildtools\install\win\DocSpace.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%" ) -%AdvancedInstaller% /rebuild build\install\win\DocSpace.aip +:: Build DocSpace Community +%AdvancedInstaller% /rebuild buildtools\install\win\DocSpace.aip -buildslist DOCSPACE_COMMUNITY -REM echo ######## Build DocSpace Enterprise package ######## -%AdvancedInstaller% /edit build\install\win\DocSpace.Enterprise.aip /SetVersion %BUILD_VERSION%.%BUILD_NUMBER% +:: Build DocSpace Enterprise +copy "buildtools\install\win\Resources\License_Enterprise.rtf" "buildtools\install\win\Resources\License.rtf" /y +copy "buildtools\install\win\Resources\License_Enterprise_Redist.rtf" "buildtools\install\win\Resources\License_Redist.rtf" /y -IF "%SignBuild%"=="true" ( -%AdvancedInstaller% /edit build\install\win\DocSpace.Enterprise.aip /SetSig -%AdvancedInstaller% /edit build\install\win\DocSpace.Enterprise.aip /SetDigitalCertificateFile -file %onlyoffice_codesign_path% -password "%onlyoffice_codesign_password%" -) - -%AdvancedInstaller% /rebuild build\install\win\DocSpace.Enterprise.aip \ No newline at end of file +%AdvancedInstaller% /rebuild buildtools\install\win\DocSpace.aip -buildslist DOCSPACE_ENTERPRISE diff --git a/install/win/build-download-prereq.ps1 b/install/win/build-download-prereq.ps1 index 7a7413cdd8..8e5f355126 100644 --- a/install/win/build-download-prereq.ps1 +++ b/install/win/build-download-prereq.ps1 @@ -86,7 +86,7 @@ $prerequisites = @( } ) -$path_nuget_packages = "${pwd}\.nuget\packages\" +$path_nuget_packages = "${pwd}\server\.nuget\packages\" $nuget_packages = @( @{ diff --git a/install/win/frontend-copy.bat b/install/win/frontend-copy.bat index 0cdfe05103..9373971a86 100644 --- a/install/win/frontend-copy.bat +++ b/install/win/frontend-copy.bat @@ -16,7 +16,7 @@ if defined SecondArg ( set PathToAppFolder=%FirstArg%\publish ) -xcopy "%PathToRepository%\buildtools\deploy\public" "%PathToAppFolder%\public" /s /y /b /i -xcopy "%PathToRepository%\buildtools\deploy\client" "%PathToAppFolder%\client" /s /y /b /i -xcopy "%PathToRepository%\config\nginx" "%PathToAppFolder%\nginx\conf" /s /y /b /i -xcopy "%PathToRepository%\config\*" "%PathToAppFolder%\config" /y /b /i +xcopy "%PathToRepository%\publish\web\public" "%PathToAppFolder%\public" /s /y /b /i +xcopy "%PathToRepository%\publish\web\client" "%PathToAppFolder%\client" /s /y /b /i +xcopy "%PathToRepository%\buildtools\config\nginx" "%PathToAppFolder%\nginx\conf" /s /y /b /i +xcopy "%PathToRepository%\buildtools\config\*" "%PathToAppFolder%\config" /y /b /i diff --git a/install/win/publish-script.bat b/install/win/publish-script.bat index 548f9c7d6f..30c87d87f8 100644 --- a/install/win/publish-script.bat +++ b/install/win/publish-script.bat @@ -41,7 +41,7 @@ xcopy "%PathToRepository%\common\ASC.SsoAuth" "%PathToAppFolder%\services\ASC.Ss rem backend services (Nodejs) in directory 'products' mkdir "%PathToAppFolder%\products\ASC.Login\login" -xcopy "%PathToRepository%\buildtools\deploy\login" "%PathToAppFolder%\products\ASC.Login\login" /s /y /b /i +xcopy "%PathToRepository%\..\publish\web\login" "%PathToAppFolder%\products\ASC.Login\login" /s /y /b /i mkdir "%PathToAppFolder%\products\ASC.Files\editor" -xcopy "%PathToRepository%\buildtools\deploy\editor" "%PathToAppFolder%\products\ASC.Files\editor" /s /y /b /i +xcopy "%PathToRepository%\..\publish\web\editor" "%PathToAppFolder%\products\ASC.Files\editor" /s /y /b /i diff --git a/install/win/tools/DocEditor.xml b/install/win/tools/DocEditor.xml index 99b8557128..ea5eff2e8f 100644 --- a/install/win/tools/DocEditor.xml +++ b/install/win/tools/DocEditor.xml @@ -4,6 +4,7 @@ ONLYOFFICE DocSpace DocEditor RealTime Automatic + false node "{APPDIR}products\ASC.Files\editor\server.js" diff --git a/install/win/tools/Login.xml b/install/win/tools/Login.xml index 82299d38e0..379a6961c2 100644 --- a/install/win/tools/Login.xml +++ b/install/win/tools/Login.xml @@ -4,6 +4,7 @@ ONLYOFFICE DocSpace Login RealTime Automatic + false node "{APPDIR}products\ASC.Login\login\server.js" diff --git a/install/win/tools/Socket.IO.xml b/install/win/tools/Socket.IO.xml index be40e5d953..8377604e7b 100644 --- a/install/win/tools/Socket.IO.xml +++ b/install/win/tools/Socket.IO.xml @@ -4,6 +4,7 @@ ONLYOFFICE DocSpace Socket.IO RealTime Automatic + false node "{APPDIR}services\ASC.Socket.IO\service\server.js" diff --git a/install/win/tools/SsoAuth.xml b/install/win/tools/SsoAuth.xml index 6d46ff54d3..c14532ae75 100644 --- a/install/win/tools/SsoAuth.xml +++ b/install/win/tools/SsoAuth.xml @@ -4,6 +4,7 @@ ONLYOFFICE DocSpace ASC.SsoAuth.Svc RealTime Automatic + false node "{APPDIR}services\ASC.SsoAuth\service\app.js" diff --git a/install/win/utils.vbs b/install/win/utils.vbs index d23642b75e..7a02458a5c 100644 --- a/install/win/utils.vbs +++ b/install/win/utils.vbs @@ -121,7 +121,34 @@ End Function Function SetMACHINEKEY On Error Resume Next - Session.Property("MACHINE_KEY") = RandomString( 12 ) + Dim strFilePath, strJSON, strPattern, objRegExp, objMatches + + ' Specify the path to your JSON file + strFilePath = Session.Property("APPDIR") & "config\appsettings.production.json" + + ' Read the JSON content + Set objFSO = CreateObject("Scripting.FileSystemObject") + Set objFile = objFSO.OpenTextFile(strFilePath, 1) + strJSON = objFile.ReadAll + objFile.Close + + ' Define the regular expression pattern to match the "machinekey" value + strPattern = """machinekey"": ""([^""]+)""" + + ' Create a regular expression object and execute the pattern on the JSON string + Set objRegExp = New RegExp + objRegExp.Global = False + objRegExp.IgnoreCase = True + objRegExp.Pattern = strPattern + + Set objMatches = objRegExp.Execute(strJSON) + + ' Check if a match was found + If objMatches.Count > 0 Then + Session.Property("MACHINE_KEY") = objMatches(0).Submatches(0) + Else + Session.Property("MACHINE_KEY") = RandomString(16) + End If End Function diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..edc51ee8c8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +gitdb==4.0.11 +GitPython==3.1.40 +smmap==5.0.1 diff --git a/run.translations.tests.sh b/run.translations.tests.sh index 82c630b53e..ced8d7652e 100755 --- a/run.translations.tests.sh +++ b/run.translations.tests.sh @@ -5,4 +5,4 @@ dir=$(builtin cd $rd/../; pwd) echo "Root directory:" $dir -dotnet test $dir/client/common/Tests/Frontend.Translations.Tests/Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --results-directory "$dir/TestsResults" --environment "BASE_DIR=$dir" \ No newline at end of file +dotnet test $dir/client/common/Tests/Frontend.Translations.Tests/Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --results-directory "$dir/TestsResults" --environment "BASE_DIR=$dir/client" \ No newline at end of file diff --git a/start/restart.backend.docker.bat b/start/restart.backend.docker.bat deleted file mode 100644 index 464988e1fd..0000000000 --- a/start/restart.backend.docker.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off - -pwsh %~dp0/restart.backend.docker.ps1 %* - -echo. - -pause \ No newline at end of file diff --git a/start/restart.backend.docker.ps1 b/start/restart.backend.docker.ps1 deleted file mode 100644 index c42a57a008..0000000000 --- a/start/restart.backend.docker.ps1 +++ /dev/null @@ -1,5 +0,0 @@ -# Stop all backend services" -& "$PSScriptRoot\stop.backend.docker.ps1" - -# Start all backend services" -& "$PSScriptRoot\start.backend.docker.ps1" \ No newline at end of file diff --git a/start/restart.backend.docker.py b/start/restart.backend.docker.py new file mode 100644 index 0000000000..534fc24a60 --- /dev/null +++ b/start/restart.backend.docker.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 + +import subprocess +import time +import os + +rd = os.path.dirname(__file__) + +start = time.time() + +print("Restart all backend services (containers)") +subprocess.run(["python", os.path.join(rd, "stop.backend.docker.py")]) +subprocess.run(["python", os.path.join(rd, "start.backend.docker.py")]) + +end = time.time() +print("\nElapsed time", end - start) \ No newline at end of file diff --git a/start/restart.backend.docker.sh b/start/restart.backend.docker.sh deleted file mode 100644 index 4edfe6df43..0000000000 --- a/start/restart.backend.docker.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -echo "Root directory:" $dir - -$dir/stop.backend.docker.sh - -$dir/start.backend.docker.sh \ No newline at end of file diff --git a/start/start.backend.docker.bat b/start/start.backend.docker.bat deleted file mode 100644 index 090dcdb495..0000000000 --- a/start/start.backend.docker.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off - -pwsh %~dp0/start.backend.docker.ps1 %* - -echo. - -pause \ No newline at end of file diff --git a/start/start.backend.docker.ps1 b/start/start.backend.docker.ps1 deleted file mode 100644 index 5c1109bec1..0000000000 --- a/start/start.backend.docker.ps1 +++ /dev/null @@ -1,34 +0,0 @@ -$PSversionMajor = $PSVersionTable.PSVersion | sort-object major | ForEach-Object { $_.major } -$PSversionMinor = $PSVersionTable.PSVersion | sort-object minor | ForEach-Object { $_.minor } - -if ($PSversionMajor -lt 7 -or $PSversionMinor -lt 2) { - Write-Error "Powershell version must be greater than or equal to 7.2." - exit -} - -$RootDir = Split-Path (Split-Path -Parent $PSScriptRoot) -Parent -$DockerDir = ($RootDir + "\buildtools\install\docker") -$LocalIp = (Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.DHCPEnabled -ne $null -and $_.DefaultIPGateway -ne $null }).IPAddress | Select-Object -First 1 - -$Doceditor = ($LocalIp + ":5013") -$Login = ($LocalIp + ":5011") -$Client = ($LocalIp + ":5001") -$Management = ($LocalIp + ":5015") - -Set-Location -Path $DockerDir - -Write-Host "Start all services (containers)" -ForegroundColor Green -$Env:ENV_EXTENSION="dev" -$Env:Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0" -$Env:Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0" -$Env:Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0" -$Env:DOCUMENT_SERVER_IMAGE_NAME="onlyoffice/documentserver-de:latest" -$Env:SERVICE_DOCEDITOR=$Doceditor -$Env:SERVICE_LOGIN=$Login -$Env:SERVICE_CLIENT=$Client -$Env:SERVICE_MANAGEMENT=$Management -$Env:ROOT_DIR=$RootDir -$Env:BUILD_PATH="/var/www" -$Env:SRC_PATH="$RootDir\publish\services" -$Env:DATA_DIR="$RootDir\data" -docker compose -f docspace.profiles.yml -f docspace.overcome.yml --profile migration-runner --profile backend-local start \ No newline at end of file diff --git a/start/start.backend.docker.py b/start/start.backend.docker.py new file mode 100644 index 0000000000..7ba4b52ac8 --- /dev/null +++ b/start/start.backend.docker.py @@ -0,0 +1,15 @@ +#!/usr/bin/python3 + +import subprocess +import time + +start = time.time() +container_ids = subprocess.check_output(["docker", "ps", "-aq", "-f", "label=com.docker.compose.project=docker"], encoding='utf-8') +containers = container_ids.strip().split() + +if containers: + print("Start all backend services (containers)") + subprocess.run(['docker', 'start'] + containers, check=True) + +end = time.time() +print("\nElapsed time", end - start) \ No newline at end of file diff --git a/start/start.backend.docker.sh b/start/start.backend.docker.sh deleted file mode 100644 index fb2bd07c16..0000000000 --- a/start/start.backend.docker.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - - -rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -echo "Run script directory:" $dir - -dir=$(builtin cd $rd/../../; pwd) - -echo "Root directory:" $dir - -cd $dir/buildtools/install/docker/ - -docker_dir="$( pwd )" - -echo "Docker directory:" $docker_dir - -local_ip=$(ipconfig getifaddr en0) - -echo "LOCAL IP: $local_ip" - -doceditor=${local_ip}:5013 -login=${local_ip}:5011 -client=${local_ip}:5001 -management=${local_ip}:5015 - -echo "SERVICE_DOCEDITOR: $doceditor" -echo "SERVICE_LOGIN: $login" -echo "SERVICE_CLIENT: $client" -echo "SERVICE_MANAGEMENT: $management" - -Baseimage_Dotnet_Run="onlyoffice/4testing-docspace-dotnet-runtime:v1.0.0" \ -Baseimage_Nodejs_Run="onlyoffice/4testing-docspace-nodejs-runtime:v1.0.0" \ -Baseimage_Proxy_Run="onlyoffice/4testing-docspace-proxy-runtime:v1.0.0" \ -BUILD_PATH="/var/www" \ -SRC_PATH="$dir/publish/services" \ -SERVICE_DOCEDITOR=$doceditor \ -SERVICE_LOGIN=$login \ -SERVICE_CLIENT=$client \ -SERVICE_MANAGEMENT=$management \ -ROOT_DIR=$dir \ -DATA_DIR="$dir/data" \ -ENV_EXTENSION="dev" \ -DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/documentserver-de:latest \ -docker-compose -f docspace.profiles.yml -f docspace.overcome.yml --profile backend-local start diff --git a/start/stop.backend.docker.bat b/start/stop.backend.docker.bat deleted file mode 100644 index c68a50e400..0000000000 --- a/start/stop.backend.docker.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off - -pwsh %~dp0/stop.backend.docker.ps1 - -echo. - -pause \ No newline at end of file diff --git a/start/stop.backend.docker.ps1 b/start/stop.backend.docker.ps1 deleted file mode 100644 index b62cc6f7ea..0000000000 --- a/start/stop.backend.docker.ps1 +++ /dev/null @@ -1,17 +0,0 @@ -$PSversionMajor = $PSVersionTable.PSVersion | sort-object major | ForEach-Object { $_.major } -$PSversionMinor = $PSVersionTable.PSVersion | sort-object minor | ForEach-Object { $_.minor } - -if ($PSversionMajor -lt 7 -or $PSversionMinor -lt 2) { - Write-Error "Powershell version must be greater than or equal to 7.2." - exit -} - -$Containers = docker ps -a -f "name=^onlyoffice" --format="{{.ID}} {{.Names}}" | Select-String -Pattern ("mysql|rabbitmq|redis|elasticsearch|documentserver") -NotMatch | ConvertFrom-String | ForEach-Object P1 - -if (-not $Containers) { - Write-Host "No containers to stop" -ForegroundColor Blue - exit -} - -Write-Host "Stop all backend services (containers)" -ForegroundColor Green -docker stop $Containers \ No newline at end of file diff --git a/start/stop.backend.docker.py b/start/stop.backend.docker.py new file mode 100755 index 0000000000..574c0746a5 --- /dev/null +++ b/start/stop.backend.docker.py @@ -0,0 +1,17 @@ +#!/usr/bin/python3 + +import subprocess +import time + +start = time.time() +container_ids = subprocess.check_output(["docker", "ps", "-q", "-f", "label=com.docker.compose.project=docker"], encoding='utf-8') +containers = container_ids.strip().split() + +if containers: + print("Stop all backend services (containers)") + subprocess.run(['docker', 'stop'] + containers, check=True) +else: + print("No containers to stop") + +end = time.time() +print("\nElapsed time", end - start) diff --git a/start/stop.backend.docker.sh b/start/stop.backend.docker.sh deleted file mode 100644 index 6a6154bf38..0000000000 --- a/start/stop.backend.docker.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -echo "Stop all backend services (containers)" -docker stop $(docker ps -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $1}') \ No newline at end of file