Merge branch 'develop' into feature/oauth2-client
This commit is contained in:
commit
67821b7297
@ -1,7 +0,0 @@
|
||||
@echo off
|
||||
|
||||
pwsh %~dp0/build.backend.docker.ps1 %*
|
||||
|
||||
echo.
|
||||
|
||||
pause
|
205
build.backend.docker.py
Executable file
205
build.backend.docker.py
Executable file
@ -0,0 +1,205 @@
|
||||
#!/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"
|
||||
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_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("Run OAuth2")
|
||||
os.environ["DOCSPACE_ADDRESS"] = local_ip
|
||||
subprocess.run(["docker-compose", "-f",os.path.join(dockerDir, "oauth2.yml"), "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_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()
|
@ -1,7 +0,0 @@
|
||||
@echo off
|
||||
|
||||
pwsh %~dp0/clear.backend.docker.ps1
|
||||
|
||||
echo.
|
||||
|
||||
pause
|
52
clear.backend.docker.py
Executable file
52
clear.backend.docker.py
Executable file
@ -0,0 +1,52 @@
|
||||
#!/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["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 contatiners 'OAuth'")
|
||||
db_command = f"docker compose -f {os.path.join(docker_dir, 'oauth2.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")
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,8 +15,6 @@
|
||||
"Cleaner":
|
||||
{
|
||||
"Period":"00:15:00"
|
||||
},
|
||||
"ChunkSize": 524288000,
|
||||
"MaxLocalSize": 1048576000
|
||||
}
|
||||
}
|
||||
}
|
@ -113,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
|
||||
|
@ -46,12 +46,12 @@
|
||||
<logger name="ASC.SQL" minlevel="Debug" writeTo="sql" final="true" />
|
||||
<logger name="ASC*" minlevel="Debug" writeTo="web">
|
||||
<filters defaultAction="Log">
|
||||
<when condition="equals('${scope-property:RequestPath}', '/health')" action="Ignore" />
|
||||
<when condition="regex-matches('${scope-property:RequestPath}', '^/health/?$', 'ignorecase,singleline')" action="Ignore" />
|
||||
</filters>
|
||||
</logger>
|
||||
<logger name="Microsoft.AspNetCore.Hosting.Diagnostics" minlevel="Debug" writeTo="ownFile-web" final="true">
|
||||
<filters defaultAction="Log">
|
||||
<when condition="equals('${scope-property:RequestPath}', '/health')" action="Ignore" />
|
||||
<when condition="regex-matches('${scope-property:RequestPath}', '^/health/?$', 'ignorecase,singleline')" action="Ignore" />
|
||||
</filters>
|
||||
</logger>
|
||||
<logger name="Microsoft.*" maxlevel="Off" final="true" />
|
||||
|
@ -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",
|
||||
|
97
debuginfo.py
Executable file
97
debuginfo.py
Executable file
@ -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()
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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
|
||||
}
|
87
install/common/build-services.py
Executable file
87
install/common/build-services.py
Executable file
@ -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))
|
@ -50,6 +50,7 @@ override_dh_auto_build:
|
||||
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
|
||||
|
@ -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 && \
|
||||
@ -54,8 +55,8 @@ RUN cd ${SRC_PATH} && \
|
||||
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/* && \
|
||||
@ -313,7 +314,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
|
||||
|
@ -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
|
||||
|
@ -26,6 +26,7 @@ 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 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
|
||||
|
@ -1079,7 +1079,7 @@
|
||||
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]" MultiBuildTarget="DefaultBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace#ExeBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
|
||||
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
|
||||
<ROW Action="SetDocumentServerJWTSecretProp" Type="6" Source="utils.vbs" Target="SetDocumentServerJWTSecretProp"/>
|
||||
<ROW Action="SetMACHINEKEY" Type="6" Source="utils.vbs" Target="SetMACHINEKEY"/>
|
||||
<ROW Action="SetMACHINEKEY" Type="262" Source="utils.vbs" Target="SetMACHINEKEY"/>
|
||||
<ROW Action="SetSERVERNAME" Type="51" Source="SERVER_NAME" Target="[ComputerName]"/>
|
||||
<ROW Action="Set_APPDIR_FORWARD_SLASH" Type="38" Target="Script Text" TargetUnformatted="Session.Property("APPDIR_FORWARD_SLASH") = Replace(Session.Property("APPDIR"), "\", "/") " AdditionalSeq="AI_DATA_SETTER_6"/>
|
||||
<ROW Action="Set_DS_JWT_ENABLED" Type="51" Source="DOCUMENT_SERVER_JWT_ENABLED" Target="[JWT_ENABLED]"/>
|
||||
@ -1254,7 +1254,6 @@
|
||||
<ROW Action="StartMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1613"/>
|
||||
<ROW Action="AI_DATA_SETTER_11" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1612"/>
|
||||
<ROW Action="StartMigrationRunner" Condition="( NOT Installed )" Sequence="5826"/>
|
||||
<ROW Action="SetMACHINEKEY" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( MACHINE_KEY = " " )" Sequence="1605"/>
|
||||
<ROW Action="AI_DETECT_MODERNWIN" Condition="(VersionNT >= 603)" Sequence="55" MsiKey="AI_DETECT_MODERNWIN"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||
<ROW Action="MySQLConfigure" Condition="( NOT Installed )" Sequence="1606"/>
|
||||
@ -1309,6 +1308,7 @@
|
||||
<ROW Action="PostgreSQLConfigure" Condition="( NOT Installed )" Sequence="1102"/>
|
||||
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
|
||||
<ROW Action="AI_RestartElevated" Sequence="51" Builds="ExeBuild"/>
|
||||
<ROW Action="SetMACHINEKEY" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) ) AND ( MACHINE_KEY = " " )" Sequence="1107"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||
<ROW Condition="( Version9X OR ( NOT VersionNT64 ) OR ( VersionNT64 AND ((VersionNT64 <> 600) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 600) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 601) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 602) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 602) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 603) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 603) OR (MsiNTProductType = 1)) AND ((VersionNT64 <> 1000) OR (MsiNTProductType <> 1)) AND ((VersionNT64 <> 1100) OR (MsiNTProductType <> 1)) ) )" Description="[ProductName] cannot be installed on the following Windows versions: [WindowsTypeNT64Display]." DescriptionLocId="AI.LaunchCondition.NoSpecificNT64" IsPredefined="true" Builds="DefaultBuild;ExeBuild"/>
|
||||
@ -1566,38 +1566,38 @@
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.PreReqComponent">
|
||||
<ROW PrereqKey="A918597FE054CCCB65ABDBA0AD8F63C" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x86" VersionMin="14.26" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/d60aa805-26e9-47df-b4e3-cd6fcc392333/A06AAC66734A618AB33C1522920654DDFC44FC13CAFAA0F0AB85B199C3D51DC0/VC_redist.x86.exe" Location="1" ExactSize="14413048" WinNTVersions="Windows Vista RTM x86, Windows Vista SP1 x86, Windows Server 2008 RTM x86, Windows 7 RTM x86" WinNT64Versions="Windows Vista RTM x64, Windows Vista SP1 x64, Windows Server 2008 RTM x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64" Operator="0" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="fe6eae1c34528d1ea224569dcdc35618" TargetName="Visual C++ Redistributable for Visual Studio 2015-2019" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="B96F93FA27E74B02866727AAE83982D0" DisplayName=".NET Framework 4.8" VersionMin="4.8" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe" Location="1" ExactSize="117380440" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86, Windows 10 version 1903 x86, Windows 10 version 1909 x86, Windows 10 version 2004 x86, Windows 10 version 20H2 x86, Windows 10 version 21H1 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64, Windows 8 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64, Windows 10 version 1903 x64, Windows 10 version 1909 x64, Windows 10 version 2004 x64, Windows 10 version 20H2 x64, Windows 10 version 21H1 x64" Operator="1" ComLine="/q /promptrestart" BasicUiComLine="/q /promptrestart" NoUiComLine="/q /promptrestart" Options="xym" MD5="aebcb9fcafa2becf8bb30458a7e1f0a2" TargetName=".NET Framework 4.8" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="B96F93FA27E74B02866727AAE83982D0" DisplayName=".NET Framework 4.8" VersionMin="4.8" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe" Location="1" ExactSize="117380440" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86, Windows 10 version 1903 x86, Windows 10 version 1909 x86, Windows 10 version 2004 x86, Windows 10 version 20H2 x86, Windows 10 version 21H1 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64, Windows 8 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64, Windows 10 version 1903 x64, Windows 10 version 1909 x64, Windows 10 version 2004 x64, Windows 10 version 20H2 x64, Windows 10 version 21H1 x64" Operator="1" ComLine="/q /promptrestart" BasicUiComLine="/q /promptrestart" NoUiComLine="/q /promptrestart" Options="ym" MD5="aebcb9fcafa2becf8bb30458a7e1f0a2" TargetName=".NET Framework 4.8" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="C4FE6FD5B7C4D07B3A313E754A9A6A8" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x64" VersionMin="14.26" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/d60aa805-26e9-47df-b4e3-cd6fcc392333/7D7105C52FCD6766BEEE1AE162AA81E278686122C1E44890712326634D0B055E/VC_redist.x64.exe" Location="1" ExactSize="14974616" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista RTM x64, Windows Vista SP1 x64, Windows Server 2008 RTM x64, Windows 7 RTM x64, Windows Server 2008 R2 RTM x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" MD5="264c296cc0bf00db6ba8e7bf8cc4e706" TargetName="Visual C++ Redistributable for Visual Studio 2015-2019" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="CA62D813A4E74FA2AAE86A7D7B7B1493" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x64" VersionMin="12.0" SetupFileUrl="http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x64.exe" Location="1" ExactSize="7201056" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="xym" MD5="b364dd867258dfc79342e00d57c81bb5" TargetName="Visual C++ Redistributable for Visual Studio 2013?vcredist_2013u5_x64.exe" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="Certbot" DisplayName="Certbot" VersionMin="2.6.0" SetupFileUrl="https://github.com/certbot/certbot/releases/download/v2.6.0/certbot-beta-installer-win_amd64_signed.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="Certbot" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="Certbot" DisplayName="Certbot v2.6.0" VersionMin="2.6.0" SetupFileUrl="https://github.com/certbot/certbot/releases/download/v2.6.0/certbot-beta-installer-win_amd64_signed.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yxm" TargetName="Certbot" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="DocumentServer" DisplayName="DocumentServer" SetupFileUrl="onlyoffice-documentserver.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" NoUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" Options="fi=" TargetName="onlyoffice-documentserver.exe" Builds="DefaultBuild" Feature="DocumentServer" RepairComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG"/>
|
||||
<ROW PrereqKey="DocumentServer.EE" DisplayName="DocumentServer-EE" SetupFileUrl="onlyoffice-documentserver-ee.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" NoUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG" Options="fi=" TargetName="onlyoffice-documentserver-ee.exe" Builds="ExeBuild" Feature="DocumentServer.EE" RepairComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LOG"/>
|
||||
<ROW PrereqKey="DocumentServer.EE" DisplayName="DocumentServer-EE" SetupFileUrl="onlyoffice-documentserver-ee.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG" NoUiComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG" Options="fi=" TargetName="onlyoffice-documentserver-ee.exe" Builds="ExeBuild" Feature="DocumentServer.EE" RepairComLine="/VERYSILENT /norestart /DIR="[APPDIR]..\DocumentServer" /DS_PORT="[DOCUMENT_SERVER_PORT]" /JWT_ENABLED="[DOCUMENT_SERVER_JWT_ENABLED]" /JWT_SECRET="[DOCUMENT_SERVER_JWT_SECRET]" /JWT_HEADER="[DOCUMENT_SERVER_JWT_HEADER]" /DB_HOST="[PS_DB_HOST]" /DB_USER="[PS_DB_USER]" /DB_PWD="[PS_DB_PWD]" /DB_NAME="[PS_DB_NAME]" /LICENSE_PATH="[APPDIR]Data\license.lic" /LOG"/>
|
||||
<ROW PrereqKey="EA5B60A5CAD4115A8386D017CC889B9" DisplayName="ASP.NET Core Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/d37efccc-2ba1-4fc9-a1ef-a8e1e77fb681/b9a20fc29ff05f18d81620ec88ade699/aspnetcore-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="9562088" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" MD5="a87c53a62579d43c6e20683ad686c991" TargetName="ASP.NET Core 7.0" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="Elasticsearch7.16.3" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="redist\elasticsearch-7.16.3.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch 7.16.3\elasticsearch-7.16.3.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="ErlangOTP" DisplayName="Erlang v26.0.2 x64" VersionMin="26.0.2" SetupFileUrl="redist\otp_win64_26.0.2.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="ErlangOTP\otp_win64_26.0.2.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="Erlangv26.0x64" DisplayName="Erlang v26.0.2 x64" VersionMin="26.0.2" SetupFileUrl="https://github.com/erlang/otp/releases/download/OTP-26.0.2/otp_win64_26.0.2.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="Erlang v26.0 x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="ErlangOTP" DisplayName="Erlang v26.0.2 x64" VersionMin="26.0.2" SetupFileUrl="redist\otp_win64_26.0.2.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="ym" TargetName="ErlangOTP\otp_win64_26.0.2.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="Erlangv26.0x64" DisplayName="Erlang v26.0.2 x64" VersionMin="26.0.2" SetupFileUrl="https://github.com/erlang/otp/releases/download/OTP-26.0.2/otp_win64_26.0.2.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="ym" TargetName="Erlang v26.0 x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="F3520F64DA5998338D97129FAD2" DisplayName=".NET Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/c69813b7-2ece-4c2e-8c45-e33006985e18/61cc8fe4693a662b2da55ad932a46446/dotnet-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="28223424" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="c9d6796b57a1630d4f004302262c241e" TargetName=".NET 7.0" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="FFmpegEssentials" DisplayName="FFmpeg x64" VersionMin="6.0.0" SetupFileUrl="redist\FFmpeg_Essentials.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="yx" TargetName="FFmpeg Essentials\FFmpeg_Essentials.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="FFmpegx64" DisplayName="FFmpeg x64" VersionMin="6.0.0" SetupFileUrl="https://github.com/icedterminal/ffmpeg-installer/releases/download/6.0.0.20230306/FFmpeg_Essentials.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="yx" TargetName="FFmpeg x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="Microsoft.NETFrame" DisplayName=".NET Framework 4.8" VersionMin="4.8" SetupFileUrl="redist\.net_framework_4.8.exe" Location="0" ExactSize="0" Operator="1" ComLine="/q /promptrestart" BasicUiComLine="/q /promptrestart" NoUiComLine="/q /promptrestart" Options="yx" TargetName="Microsoft .NET Framework 4.8\.net_framework_4.8.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="FFmpegEssentials" DisplayName="FFmpeg v6.0 x64" VersionMin="6.0.0" SetupFileUrl="redist\FFmpeg_Essentials.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="FFmpeg Essentials\FFmpeg_Essentials.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="FFmpegx64" DisplayName="FFmpeg v6.0 x64" VersionMin="6.0.0" SetupFileUrl="https://github.com/icedterminal/ffmpeg-installer/releases/download/6.0.0.20230306/FFmpeg_Essentials.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="FFmpeg x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="Microsoft.NETFrame" DisplayName=".NET Framework 4.8" VersionMin="4.8" SetupFileUrl="redist\.net_framework_4.8.exe" Location="0" ExactSize="0" Operator="1" ComLine="/q /promptrestart" BasicUiComLine="/q /promptrestart" NoUiComLine="/q /promptrestart" Options="ym" TargetName="Microsoft .NET Framework 4.8\.net_framework_4.8.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="Microsoft.NETRunti" DisplayName=".NET Runtime - 7.0.4" VersionMin="7.0" SetupFileUrl="redist\dotnet-runtime-7.0.4-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Microsoft .NET Runtime - 7.0.4 (x64)\dotnet-runtime-7.0.4-win-x64.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MicrosoftASP.NETCo" DisplayName="ASP.NET Core Runtime 7.0.4 x64" VersionMin="7.0" SetupFileUrl="redist\aspnetcore-runtime-7.0.4-win-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="yxm" TargetName="Microsoft ASP.NET Core 7.0.4 - Shared Framework (x64)\aspnetcore-runtime-7.0.4-win-x64.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MicrosoftVisualC" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x64" VersionMin="12.0" SetupFileUrl="redist\vcredist_2013u5_x64.exe" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="Microsoft Visual C++ 2013 Redistributable (x64) - 12.0.40649\vcredist_2013u5_x64.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MicrosoftVisualC_1" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x86" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x86.exe" Location="0" ExactSize="0" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.26.28720\VC_redist.x86.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MicrosoftVisualC_1" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x86" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x86.exe" Location="0" ExactSize="0" Operator="0" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" TargetName="Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.26.28720\VC_redist.x86.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MicrosoftVisualC_2" DisplayName="Visual C++ Redistributable for Visual Studio 2015-2019 x64" VersionMin="14.26" SetupFileUrl="redist\VC_redist.x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 x64, Windows Server 2008 R2 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="yxm" TargetName="Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.26.28720\VC_redist.x64.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MySQLConnectorODBC" DisplayName="MySQL Connector/ODBC 8.0.33 x86" VersionMin="8.0.33" SetupFileUrl="redist\mysql-connector-odbc-8.0.33-win32.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL ConnectorODBC 8.0 (32-bit)\mysql-connector-odbc-8.0.33-win32.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MySQLInstallerCo" DisplayName="MySQL Installer Community 8.0.33 x86" VersionMin="1.6.6.0" SetupFileUrl="redist\mysql-installer-community-8.0.33.0.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer - Community\mysql-installer-community-8.0.33.0.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="MySQLInstallerRunn" DisplayName="MySQL Installer Community 8.0.33 x86 Runner" SetupFileUrl="MySQL Installer Runner.exe" Location="0" ExactSize="0" Operator="1" ComLine="/VERYSILENT /DB_PWD="root" /MYSQL_VERSION="8.0.33"" BasicUiComLine="/VERYSILENT /DB_PWD="root" /MYSQL_VERSION="8.0.33"" NoUiComLine="/VERYSILENT /DB_PWD="root" /MYSQL_VERSION="8.0.33"" Options="y" TargetName="MySQL Installer Runner \MySQL Installer Runner.exe" ParentPrereq="RequiredApplication_2"/>
|
||||
<ROW PrereqKey="Node.js" DisplayName="Node.js 18.16.1" VersionMin="18.16.0" SetupFileUrl="redist\node-v18.16.1-x64.msi" Location="0" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="Node.js\node-v18.16.1-x64.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="OpenResty" DisplayName="OpenResty" VersionMin="1.21.4.2" SetupFileUrl="publish\OpenResty.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="OpenResty\OpenResty.msi"/>
|
||||
<ROW PrereqKey="PostgreSQL_ODBC" DisplayName="PostgreSQL ODBC Driver x64" SetupFileUrl="psqlodbc_15_x64.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="myx" TargetName="psqlodbc_x64.msi"/>
|
||||
<ROW PrereqKey="OpenResty" DisplayName="OpenResty v1.21.4" VersionMin="1.21.4.2" SetupFileUrl="publish\OpenResty.msi" Location="0" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="yxm" TargetName="OpenResty\OpenResty.msi"/>
|
||||
<ROW PrereqKey="PostgreSQL_ODBC" DisplayName="PostgreSQL ODBC Driver v15.0 x64" SetupFileUrl="psqlodbc_15_x64.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="myx" TargetName="psqlodbc_x64.msi"/>
|
||||
<ROW PrereqKey="PostgresSQL" DisplayName="PostgresSQL v14.0 x64" VersionMin="14.0" SetupFileUrl="postgresql-14.0-1-windows-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount "postgres" --superpassword "postgres"" BasicUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount "postgres" --superpassword "postgres"" NoUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount "postgres" --superpassword "postgres"" Options="xy" TargetName="postgresql-14.0-1-windows-x64.exe"/>
|
||||
<ROW PrereqKey="RabbitMQServer" DisplayName="RabbitMQ v3.12.1 x64" VersionMin="3.12" SetupFileUrl="redist\rabbitmq-server-3.12.1.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ Server\rabbitmq-server-3.12.1.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="RedisonWindows" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="redist\Redis-x64-5.0.10.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis on Windows\Redis-x64-5.0.10.msi" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication" DisplayName="MySQL Connector/ODBC 8.0.33 x86" VersionMin="8.0.33" SetupFileUrl="https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.33-win32.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL Connector ODBC 8.0.33 x86" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_1" DisplayName="Node.js 18.16.1" VersionMin="18.16.0" SetupFileUrl="https://nodejs.org/dist/v18.16.1/node-v18.16.1-x64.msi" Location="1" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="my" TargetName="Node.js v18.16.1 x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_2" DisplayName="MySQL Installer Community 8.0.33 x86" VersionMin="1.6.6.0" SetupFileUrl="https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.33.0.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer Community 8.0.33 x86" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_3" DisplayName="Certbot" VersionMin="2.6.0" SetupFileUrl="redist\certbot-2.6.0.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="Required Application\certbot-2.6.0.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_3" DisplayName="Certbot v2.6.0" VersionMin="2.6.0" SetupFileUrl="redist\certbot-2.6.0.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yxm" TargetName="Required Application\certbot-2.6.0.exe" Builds="ExeBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_4" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch v7.16.3 x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_5" DisplayName="RabbitMQ v3.12.1 x64" VersionMin="3.12" SetupFileUrl="https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.1/rabbitmq-server-3.12.1.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ v3.12.1 x64" Builds="DefaultBuild"/>
|
||||
<ROW PrereqKey="RequiredApplication_6" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="http://download.onlyoffice.com/install/windows/redist/Redis-x64-5.0.10.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis 5.0.10 x64" Builds="DefaultBuild"/>
|
||||
|
@ -68,6 +68,10 @@ REM echo ######## Remove AWSTarget from nlog.config ########
|
||||
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
|
||||
|
@ -4,6 +4,7 @@
|
||||
<description>ONLYOFFICE DocSpace DocEditor</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<autoRefresh>false</autoRefresh>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}products\ASC.Files\editor\server.js"</arguments>
|
||||
|
@ -4,6 +4,7 @@
|
||||
<description>ONLYOFFICE DocSpace Login</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<autoRefresh>false</autoRefresh>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}products\ASC.Login\login\server.js"</arguments>
|
||||
|
@ -4,6 +4,7 @@
|
||||
<description>ONLYOFFICE DocSpace Socket.IO</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<autoRefresh>false</autoRefresh>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}services\ASC.Socket.IO\service\server.js"</arguments>
|
||||
|
@ -4,6 +4,7 @@
|
||||
<description>ONLYOFFICE DocSpace ASC.SsoAuth.Svc</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<autoRefresh>false</autoRefresh>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}services\ASC.SsoAuth\service\app.js"</arguments>
|
||||
|
@ -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
|
||||
|
||||
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
gitdb==4.0.11
|
||||
GitPython==3.1.40
|
||||
smmap==5.0.1
|
@ -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"
|
||||
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"
|
@ -1,7 +0,0 @@
|
||||
@echo off
|
||||
|
||||
pwsh %~dp0/restart.backend.docker.ps1 %*
|
||||
|
||||
echo.
|
||||
|
||||
pause
|
@ -1,5 +0,0 @@
|
||||
# Stop all backend services"
|
||||
& "$PSScriptRoot\stop.backend.docker.ps1"
|
||||
|
||||
# Start all backend services"
|
||||
& "$PSScriptRoot\start.backend.docker.ps1"
|
16
start/restart.backend.docker.py
Normal file
16
start/restart.backend.docker.py
Normal file
@ -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)
|
@ -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
|
@ -1,7 +0,0 @@
|
||||
@echo off
|
||||
|
||||
pwsh %~dp0/start.backend.docker.ps1 %*
|
||||
|
||||
echo.
|
||||
|
||||
pause
|
15
start/start.backend.docker.py
Normal file
15
start/start.backend.docker.py
Normal file
@ -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)
|
@ -1,41 +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
|
||||
|
||||
echo "SERVICE_DOCEDITOR: $doceditor"
|
||||
echo "SERVICE_LOGIN: $login"
|
||||
echo "SERVICE_CLIENT: $client"
|
||||
|
||||
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 \
|
||||
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
|
@ -1,7 +0,0 @@
|
||||
@echo off
|
||||
|
||||
pwsh %~dp0/stop.backend.docker.ps1
|
||||
|
||||
echo.
|
||||
|
||||
pause
|
@ -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
|
17
start/stop.backend.docker.py
Executable file
17
start/stop.backend.docker.py
Executable file
@ -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)
|
@ -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}')
|
Loading…
Reference in New Issue
Block a user