Merge branch 'develop' into feature/custom-theme
This commit is contained in:
commit
d3d91ba54e
1
.gitignore
vendored
1
.gitignore
vendored
@ -50,4 +50,3 @@ TestsResults/
|
||||
|
||||
**/.yarn/cache
|
||||
**/.yarn/install-state.gz
|
||||
config/appsettings.dev.json
|
||||
|
81
build/build.backend.docker.ps1
Normal file
81
build/build.backend.docker.ps1
Normal file
@ -0,0 +1,81 @@
|
||||
$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
|
||||
}
|
||||
|
||||
$Branch = git branch --show-current
|
||||
$BranchExistRemote = git ls-remote --heads origin $Branch
|
||||
|
||||
if (-not $BranchExistRemote) {
|
||||
Write-Error "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit
|
||||
}
|
||||
|
||||
$RootDir = Split-Path -Parent $PSScriptRoot
|
||||
$DockerDir = ($RootDir + "\build\install\docker")
|
||||
$BuildDate = Get-Date -Format "yyyy-MM-dd"
|
||||
$LocalIp = (Get-WmiObject -Class 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")
|
||||
|
||||
$DockerFile = "Dockerfile.dev"
|
||||
$EnvExtension = "dev"
|
||||
$CoreBaseDomain = "localhost"
|
||||
|
||||
# Stop all backend services"
|
||||
& "$PSScriptRoot\start\stop.backend.docker.ps1"
|
||||
|
||||
$Env:COMPOSE_IGNORE_ORPHANS = "True"
|
||||
|
||||
$Containers = docker ps -a -f "name=^onlyoffice" --format="{{.ID}} {{.Names}}" | Select-String -Pattern ("mysql|rabbitmq|redis|elasticsearch|documentserver") -NotMatch | ConvertFrom-String | ForEach-Object P1
|
||||
$Images = docker images onlyoffice/docspace* -q
|
||||
|
||||
if ($Containers) {
|
||||
Write-Host "Remove all backend containers" -ForegroundColor Blue
|
||||
docker rm -f $Containers
|
||||
}
|
||||
|
||||
if ($Images) {
|
||||
Write-Host "Remove all docker images except 'mysql, rabbitmq, redis, elasticsearch, documentserver'" -ForegroundColor Blue
|
||||
docker rmi -f $Images
|
||||
}
|
||||
|
||||
Write-Host "Run MySQL" -ForegroundColor Green
|
||||
docker compose -f ($DockerDir + "\db.yml") up -d
|
||||
|
||||
Write-Host "Run environments (redis, rabbitmq)" -ForegroundColor Green
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
docker compose -f ($DockerDir + "\redis.yml") -f ($DockerDir + "\rabbitmq.yml") up -d
|
||||
|
||||
if ($args[0] -eq "--no_ds") {
|
||||
Write-Host "SKIP Document server" -ForegroundColor Blue
|
||||
}
|
||||
else {
|
||||
Write-Host "Run Document server" -ForegroundColor Green
|
||||
$Env:DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver-de:latest"
|
||||
$Env:ROOT_DIR = $RootDir
|
||||
docker compose -f ($DockerDir + "\ds.dev.yml") up -d
|
||||
}
|
||||
|
||||
Write-Host "Build all backend services" -ForegroundColor Blue
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
$Env:RELEASE_DATE = $BuildDate
|
||||
$Env:GIT_BRANCH = $Branch
|
||||
$Env:SERVICE_DOCEDITOR = $Doceditor
|
||||
$Env:SERVICE_LOGIN = $Login
|
||||
$Env:SERVICE_CLIENT = $Client
|
||||
$Env:APP_CORE_BASE_DOMAIN = $CoreBaseDomain
|
||||
$Env:ENV_EXTENSION = $EnvExtension
|
||||
docker compose -f ($DockerDir + "\build.dev.yml") build --build-arg GIT_BRANCH=$Branch --build-arg RELEASE_DATE=$BuildDate
|
||||
|
||||
Write-Host "Run DB migration" -ForegroundColor Green
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
docker compose -f ($DockerDir + "\migration-runner.yml") up -d
|
||||
|
||||
# Start all backend services"
|
||||
& "$PSScriptRoot\start\start.backend.docker.ps1"
|
@ -9,10 +9,17 @@ echo "Root directory:" $dir
|
||||
|
||||
cd $dir
|
||||
|
||||
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
|
||||
branch=$(git branch --show-current)
|
||||
|
||||
echo "GIT_BRANCH:" $branch
|
||||
|
||||
branch_exist_remote=$(git ls-remote --heads origin $branch)
|
||||
|
||||
if [ -z "$branch_exist_remote" ]; then
|
||||
echo "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $dir/build/install/docker/
|
||||
|
||||
docker_dir="$( pwd )"
|
||||
@ -43,11 +50,9 @@ $dir/build/start/stop.backend.docker.sh
|
||||
|
||||
echo "Remove all backend containers"
|
||||
docker rm -f $(docker ps -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $1}')
|
||||
echo "Remove all backend images"
|
||||
docker rmi -f $(docker images -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $3}')
|
||||
|
||||
echo "Remove all docker images except 'mysql, rabbitmq, redis, elasticsearch, documentserver'"
|
||||
docker image rm -f $(docker images -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $3}')
|
||||
docker rmi -f $(docker images -a | egrep "onlyoffice" | egrep -v "mysql|rabbitmq|redis|elasticsearch|documentserver" | awk 'NR>0 {print $3}')
|
||||
|
||||
echo "Run MySQL"
|
||||
|
||||
@ -58,7 +63,7 @@ if [ "${arch_name}" = "x86_64" ]; then
|
||||
docker compose -f db.yml up -d
|
||||
elif [ "${arch_name}" = "arm64" ]; then
|
||||
echo "CPU Type: arm64 -> run db.yml with arm64v8 image"
|
||||
MYSQL_IMAGE=arm64v8/mysql:oracle \
|
||||
MYSQL_IMAGE=arm64v8/mysql:8.0.31-oracle \
|
||||
docker compose -f db.yml up -d
|
||||
else
|
||||
echo "Error: Unknown CPU Type: ${arch_name}."
|
||||
|
9
build/build.docker.bat
Normal file
9
build/build.docker.bat
Normal file
@ -0,0 +1,9 @@
|
||||
@echo off
|
||||
|
||||
if %errorlevel% == 0 (
|
||||
pwsh %~dp0/build.backend.docker.ps1 "start"
|
||||
)
|
||||
|
||||
echo.
|
||||
|
||||
pause
|
21
build/clear.backend.docker.ps1
Normal file
21
build/clear.backend.docker.ps1
Normal file
@ -0,0 +1,21 @@
|
||||
$Containers = docker ps -aqf "name=^onlyoffice"
|
||||
$Images = docker images onlyoffice/docspace* -q
|
||||
|
||||
if ($Containers) {
|
||||
Write-Host "Stop all backend containers" -ForegroundColor Blue
|
||||
docker stop $Containers
|
||||
|
||||
Write-Host "Remove all backend containers" -ForegroundColor Blue
|
||||
docker rm -f $Containers
|
||||
}
|
||||
|
||||
if ($Images) {
|
||||
Write-Host "Remove all docker images except 'mysql, rabbitmq, redis, elasticsearch, documentserver'" -ForegroundColor Blue
|
||||
docker rmi -f $Images
|
||||
}
|
||||
|
||||
Write-Host "Remove unused volumes." -ForegroundColor Blue
|
||||
docker volume prune -f
|
||||
|
||||
Write-Host "Remove unused networks." -ForegroundColor Blue
|
||||
docker network prune -f
|
@ -5,7 +5,7 @@
|
||||
DOCKER_IMAGE_PREFIX=${STATUS}docspace
|
||||
DOCKER_TAG=latest
|
||||
CONTAINER_PREFIX=${PRODUCT}-
|
||||
MYSQL_VERSION=8.0.18
|
||||
MYSQL_VERSION=8.0.31
|
||||
MYSQL_IMAGE=mysql:${MYSQL_VERSION}
|
||||
ELK_VERSION=7.13.1
|
||||
SERVICE_PORT=5050
|
||||
|
@ -319,26 +319,7 @@ ARG SRC_PATH
|
||||
ENV BUILD_PATH=${BUILD_PATH}
|
||||
ENV SRC_PATH=${SRC_PATH}
|
||||
WORKDIR ${BUILD_PATH}/services/ASC.Migration.Runner/
|
||||
COPY ./docker-migration-entrypoint.sh ./docker-migration-entrypoint.sh
|
||||
COPY docker-migration-entrypoint.sh docker-migration-entrypoint.sh
|
||||
COPY --from=base ${SRC_PATH}/ASC.Migration.Runner/service/ .
|
||||
|
||||
ENTRYPOINT ["./docker-migration-entrypoint.sh"]
|
||||
|
||||
## image for k8s bin-share ##
|
||||
FROM busybox:latest AS bin_share
|
||||
RUN mkdir -p /app/appserver/ASC.Files/server && \
|
||||
mkdir -p /app/appserver/ASC.People/server/ && \
|
||||
addgroup --system --gid 107 onlyoffice && \
|
||||
adduser -u 104 onlyoffice --home /var/www/onlyoffice --system -G onlyoffice
|
||||
|
||||
COPY bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
COPY --from=base /var/www/products/ASC.Files/server/ /app/appserver/ASC.Files/server/
|
||||
COPY --from=base /var/www/products/ASC.People/server/ /app/appserver/ASC.People/server/
|
||||
ENTRYPOINT ["./app/docker-entrypoint.sh"]
|
||||
|
||||
## image for k8s wait-bin-share ##
|
||||
FROM busybox:latest AS wait_bin_share
|
||||
RUN mkdir /app
|
||||
|
||||
COPY wait-bin-share-docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
ENTRYPOINT ["./app/docker-entrypoint.sh"]
|
||||
|
@ -1,34 +1,33 @@
|
||||
version: "3.8"
|
||||
x-service:
|
||||
&x-service-base
|
||||
container_name: base
|
||||
restart: always
|
||||
expose:
|
||||
x-service: &x-service-base
|
||||
container_name: base
|
||||
restart: always
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
|
||||
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
|
||||
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
|
||||
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
|
||||
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
|
||||
DOCUMENT_SERVER_URL_INTERNAL: ${DOCUMENT_SERVER_URL_INTERNAL}
|
||||
KAFKA_HOST: ${KAFKA_HOST}
|
||||
ELK_HOST: ${ELK_HOST}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
volumes:
|
||||
environment:
|
||||
MYSQL_HOST: ${MYSQL_HOST}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
|
||||
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
|
||||
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
|
||||
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
|
||||
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC}
|
||||
DOCUMENT_SERVER_URL_INTERNAL: ${DOCUMENT_SERVER_URL_INTERNAL}
|
||||
KAFKA_HOST: ${KAFKA_HOST}
|
||||
ELK_HOST: ${ELK_HOST}
|
||||
PROXY_HOST: ${PROXY_HOST}
|
||||
volumes:
|
||||
#- /app/onlyoffice/CommunityServer/data:/app/onlyoffice/data
|
||||
- app_data:/app/onlyoffice/data
|
||||
- files_data:/var/www/products/ASC.Files/server/
|
||||
- people_data:/var/www/products/ASC.People/server/
|
||||
|
||||
services:
|
||||
|
||||
services:
|
||||
onlyoffice-elasticsearch:
|
||||
image: docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
|
||||
container_name: ${ELK_HOST}
|
||||
@ -58,7 +57,7 @@ services:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup:${DOCKER_TAG}"
|
||||
container_name: ${BACKUP_HOST}
|
||||
|
||||
|
||||
onlyoffice-clear-events:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-clear-events:${DOCKER_TAG}"
|
||||
@ -78,7 +77,7 @@ services:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files-services:${DOCKER_TAG}"
|
||||
container_name: ${FILES_SERVICES_HOST}
|
||||
|
||||
|
||||
onlyoffice-people-server:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-people-server:${DOCKER_TAG}"
|
||||
@ -89,8 +88,8 @@ services:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-socket:${DOCKER_TAG}"
|
||||
container_name: ${SOCKET_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
|
||||
- ${SERVICE_PORT}
|
||||
|
||||
onlyoffice-studio-notify:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio-notify:${DOCKER_TAG}"
|
||||
@ -106,8 +105,8 @@ services:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-urlshortener:${DOCKER_TAG}"
|
||||
container_name: ${URLSHORTENER_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
- "9999"
|
||||
- ${SERVICE_PORT}
|
||||
- "9999"
|
||||
|
||||
onlyoffice-api:
|
||||
<<: *x-service-base
|
||||
@ -123,19 +122,19 @@ services:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio:${DOCKER_TAG}"
|
||||
container_name: ${STUDIO_HOST}
|
||||
|
||||
|
||||
onlyoffice-ssoauth:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-ssoauth:${DOCKER_TAG}"
|
||||
container_name: ${SSOAUTH_HOST}
|
||||
expose:
|
||||
- ${SERVICE_PORT}
|
||||
- "9834"
|
||||
- ${SERVICE_PORT}
|
||||
- "9834"
|
||||
|
||||
onlyoffice-webhooks-service:
|
||||
<<: *x-service-base
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-webhooks-service:${DOCKER_TAG}"
|
||||
container_name: ${WEBHOOKS_SERVICE_HOST}
|
||||
container_name: ${WEBHOOKS_SERVICE_HOST}
|
||||
|
||||
onlyoffice-doceditor:
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-doceditor:${DOCKER_TAG}"
|
||||
@ -160,7 +159,7 @@ services:
|
||||
- "8099"
|
||||
- "8092"
|
||||
ports:
|
||||
- 8092:8092
|
||||
- 8092:8092
|
||||
depends_on:
|
||||
- onlyoffice-backup-background-tasks
|
||||
- onlyoffice-backup
|
||||
@ -206,8 +205,8 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
es_data:
|
||||
|
@ -120,20 +120,6 @@ services:
|
||||
target: webhooks-service
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-webhooks-service:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-bin-share:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: bin_share
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-bin-share:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-wait-bin-share:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: "${DOCKERFILE}"
|
||||
target: wait_bin_share
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-wait-bin-share:${DOCKER_TAG}"
|
||||
|
||||
onlyoffice-proxy:
|
||||
build:
|
||||
context: ./
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/bin/bash
|
||||
|
||||
MYSQL_HOST=${MYSQL_HOST:-"localhost"}
|
||||
MYSQL_DATABASE=${MYSQL_DATABASE:-"onlyoffice"}
|
||||
@ -7,4 +7,4 @@ MYSQL_PASSWORD=${MYSQL_PASSWORD:-"onlyoffice_pass"}
|
||||
|
||||
sed -i "s!\"ConnectionString\".*!\"ConnectionString\": \"Server=${MYSQL_HOST};Database=${MYSQL_DATABASE};User ID=${MYSQL_USER};Password=${MYSQL_PASSWORD}\",!g" ./appsettings.json
|
||||
|
||||
dotnet ASC.Migration.Runner.dll
|
||||
dotnet ASC.Migration.Runner.dll
|
@ -196,8 +196,8 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
es_data:
|
||||
|
@ -13,5 +13,5 @@ services:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
@ -1,2 +1,3 @@
|
||||
#!/bin/sh
|
||||
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 > /etc/nginx/nginx.conf
|
@ -1,6 +1,6 @@
|
||||
version: '3'
|
||||
services:
|
||||
onlyoffice-rabbitmq:
|
||||
version: "3"
|
||||
services:
|
||||
onlyoffice-rabbitmq:
|
||||
image: rabbitmq:3
|
||||
container_name: onlyoffice-rabbitmq
|
||||
restart: always
|
||||
@ -9,5 +9,5 @@ services:
|
||||
- "80"
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
@ -1,6 +1,6 @@
|
||||
version: '3'
|
||||
services:
|
||||
onlyoffice-redis:
|
||||
version: "3"
|
||||
services:
|
||||
onlyoffice-redis:
|
||||
image: redis:7
|
||||
container_name: onlyoffice-redis
|
||||
restart: always
|
||||
@ -8,5 +8,5 @@ services:
|
||||
- "6379"
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${NETWORK_NAME}
|
||||
name: ${NETWORK_NAME}
|
||||
external: true
|
||||
|
5
build/start/restart.backend.docker.ps1
Normal file
5
build/start/restart.backend.docker.ps1
Normal file
@ -0,0 +1,5 @@
|
||||
# Stop all backend services"
|
||||
& "$PSScriptRoot\stop.backend.docker.ps1"
|
||||
|
||||
# Start all backend services"
|
||||
& "$PSScriptRoot\start.backend.docker.ps1"
|
41
build/start/start.backend.docker.ps1
Normal file
41
build/start/start.backend.docker.ps1
Normal file
@ -0,0 +1,41 @@
|
||||
$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
|
||||
}
|
||||
|
||||
$Branch = git branch --show-current
|
||||
$BranchExistRemote = git ls-remote --heads origin $Branch
|
||||
|
||||
if (-not $BranchExistRemote) {
|
||||
Write-Error "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit
|
||||
}
|
||||
|
||||
$RootDir = Split-Path (Split-Path -Parent $PSScriptRoot) -Parent
|
||||
$DockerDir = ($RootDir + "\build\install\docker")
|
||||
$BuildDate = Get-Date -Format "yyyy-MM-dd"
|
||||
$LocalIp = (Get-WmiObject -Class 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")
|
||||
|
||||
$DockerFile = "Dockerfile.dev"
|
||||
$EnvExtension = "dev"
|
||||
$CoreBaseDomain = "localhost"
|
||||
|
||||
Write-Host "Start all backend services (containers)" -ForegroundColor Green
|
||||
$Env:DOCKERFILE = $DockerFile
|
||||
$Env:ROOT_DIR = $RootDir
|
||||
$Env:RELEASE_DATE = $BuildDate
|
||||
$Env:GIT_BRANCH = $Branch
|
||||
$Env:SERVICE_DOCEDITOR = $Doceditor
|
||||
$Env:SERVICE_LOGIN = $Login
|
||||
$Env:SERVICE_CLIENT = $Client
|
||||
$Env:APP_CORE_BASE_DOMAIN = $CoreBaseDomain
|
||||
$Env:APP_URL_PORTAL = ("http://" + $LocalIp + ":8092")
|
||||
$Env:ENV_EXTENSION = $EnvExtension
|
||||
docker compose -f ($DockerDir + "\docspace.dev.yml") up -d
|
@ -9,10 +9,17 @@ echo "Root directory:" $dir
|
||||
|
||||
cd $dir
|
||||
|
||||
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
|
||||
branch=$(git branch --show-current)
|
||||
|
||||
echo "GIT_BRANCH:" $branch
|
||||
|
||||
branch_exist_remote=$(git ls-remote --heads origin $branch)
|
||||
|
||||
if [ -z "$branch_exist_remote" ]; then
|
||||
echo "The current branch does not exist in the remote repository. Please push changes."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $dir/build/install/docker/
|
||||
|
||||
docker_dir="$( pwd )"
|
||||
|
17
build/start/stop.backend.docker.ps1
Normal file
17
build/start/stop.backend.docker.ps1
Normal file
@ -0,0 +1,17 @@
|
||||
$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
|
@ -59,7 +59,7 @@ public static class BaseDbContextExtension
|
||||
{
|
||||
case Provider.MySql:
|
||||
optionsBuilder.ReplaceService<IMigrationsSqlGenerator, CustomMySqlMigrationsSqlGenerator>();
|
||||
optionsBuilder.UseMySql(connectionString.ConnectionString, ServerVersion.Parse("8.0.25"), providerOptions =>
|
||||
optionsBuilder.UseMySql(connectionString.ConnectionString, ServerVersion.AutoDetect(connectionString.ConnectionString), providerOptions =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(migrateAssembly))
|
||||
{
|
||||
|
@ -11,14 +11,18 @@ module.exports = (socket, next) => {
|
||||
const token = req?.headers?.authorization;
|
||||
|
||||
if (!cookie && !token) {
|
||||
const err = new Error("Authentication error (not token or cookie)");
|
||||
logger.error(err);
|
||||
socket.disconnect("unauthorized");
|
||||
next(new Error("Authentication error"));
|
||||
next(err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (token) {
|
||||
if (!check(token)) {
|
||||
next(new Error("Authentication error"));
|
||||
const err = new Error("Authentication error (token check)");
|
||||
logger.error(err);
|
||||
next(err);
|
||||
} else {
|
||||
session.system = true;
|
||||
session.save();
|
||||
@ -33,7 +37,9 @@ module.exports = (socket, next) => {
|
||||
Authorization: cookie,
|
||||
};
|
||||
|
||||
const basePath = portalManager(req).replace(/\/$/g, "");
|
||||
const basePath = portalManager(req)?.replace(/\/$/g, "");
|
||||
|
||||
logger.info(`API basePath='${basePath}' Authorization='${cookie}'`);
|
||||
|
||||
const getUser = () => {
|
||||
return request({
|
||||
@ -55,14 +61,15 @@ module.exports = (socket, next) => {
|
||||
|
||||
return Promise.all([getUser(), getPortal()])
|
||||
.then(([user, portal]) => {
|
||||
logger.info("Get account info", { user, portal });
|
||||
session.user = user;
|
||||
session.portal = portal;
|
||||
session.save();
|
||||
next();
|
||||
})
|
||||
.catch((err) => {
|
||||
logger.error(err);
|
||||
logger.error("Error of getting account info", err);
|
||||
socket.disconnect("Unauthorized");
|
||||
next(new Error("Authentication error"));
|
||||
next(err);
|
||||
});
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
const conf = require("../config");
|
||||
const portalInternalUrl = conf.get("core")["base-domain"] === "localhost" ? "http://localhost" : "";
|
||||
//const conf = require("../config");
|
||||
//const portalInternalUrl = conf.get("core")["base-domain"] === "localhost" ? "http://localhost" : ""; //Do not use base-domain for portalInternalUrl
|
||||
module.exports = (req) => {
|
||||
if (portalInternalUrl) return portalInternalUrl;
|
||||
//if (portalInternalUrl) return portalInternalUrl; //TODO: Fix internal api url setup after external api domain complete
|
||||
|
||||
const xRewriterUrlInternalHeader = "x-rewriter-url-internal";
|
||||
if (req.headers && req.headers[xRewriterUrlInternalHeader]) {
|
||||
|
1
config/appsettings.dev.json
Normal file
1
config/appsettings.dev.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
@ -1,3 +1,3 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM5.92946 11.3447C6.38262 11.7704 7.11827 11.7704 7.57165 11.3447L12.705 6.52487C13.5659 5.66404 12.5449 4.32781 11.4764 5.39665L7.04492 9.57739C6.93026 9.68463 6.74449 9.68463 6.63005 9.57739L4.70054 7.7408C3.54497 6.58529 2.37389 8.00675 3.38509 8.95572L5.92946 11.3447Z" fill="#657077"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.0005 8C14.0005 7.75799 13.9862 7.51933 13.9583 7.28482L15.6364 5.60676C15.873 6.36243 16.0005 7.16632 16.0005 8C16.0005 12.4183 12.4188 16 8.00049 16C3.58221 16 0.000488281 12.4183 0.000488281 8C0.000488281 3.58172 3.58221 0 8.00049 0C9.37555 0 10.6696 0.34692 11.7998 0.95801L10.301 2.45685C9.59253 2.16249 8.81549 2 8.00049 2C4.68678 2 2.00049 4.68629 2.00049 8C2.00049 11.3137 4.68678 14 8.00049 14C11.3142 14 14.0005 11.3137 14.0005 8ZM14.2076 4.20678L7.7076 10.7068C7.31708 11.0973 6.68391 11.0973 6.29339 10.7068L3.29338 7.70677L4.7076 6.29256L7.0005 8.58546L12.7934 2.79257L14.2076 4.20678Z" fill="#657077"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 772 B |
@ -102,9 +102,9 @@ const StyledComboBox = styled(ComboBox)`
|
||||
}
|
||||
|
||||
.combo-buttons_arrow-icon {
|
||||
margin-top: 12px;
|
||||
margin-top: 6px;
|
||||
margin-right: 8px;
|
||||
margin-left: 0px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
padding: 0px;
|
||||
|
@ -2630,6 +2630,14 @@ class FilesStore {
|
||||
|
||||
setCreatedItem = (createdItem) => {
|
||||
this.createdItem = createdItem;
|
||||
|
||||
const { socketHelper } = this.authStore.settingsStore;
|
||||
if (createdItem?.type == "file") {
|
||||
socketHelper.emit({
|
||||
command: "subscribe",
|
||||
data: `FILE-${createdItem.id}`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
setScrollToItem = (item) => {
|
||||
|
@ -138,7 +138,12 @@ const Article = ({
|
||||
)}
|
||||
{isAvailableArticlePaymentAlert &&
|
||||
(isFreeTariff || isGracePeriod) &&
|
||||
showText && <ArticlePaymentAlert isFreeTariff={isFreeTariff} />}
|
||||
showText && (
|
||||
<ArticlePaymentAlert
|
||||
isFreeTariff={isFreeTariff}
|
||||
toggleArticleOpen={toggleArticleOpen}
|
||||
/>
|
||||
)}
|
||||
</SubArticleBody>
|
||||
</StyledArticle>
|
||||
{articleOpen && (isMobileOnly || window.innerWidth <= 375) && (
|
||||
|
@ -27,6 +27,7 @@ const ArticlePaymentAlert = ({
|
||||
currencySymbol,
|
||||
setPortalPaymentQuotas,
|
||||
currentTariffPlanTitle,
|
||||
toggleArticleOpen,
|
||||
}) => {
|
||||
const { t, ready } = useTranslation("Payments");
|
||||
|
||||
@ -40,6 +41,7 @@ const ArticlePaymentAlert = ({
|
||||
"/payments/portal-payments"
|
||||
);
|
||||
history.push(paymentPageUrl);
|
||||
toggleArticleOpen();
|
||||
};
|
||||
|
||||
const isShowLoader = !ready;
|
||||
|
@ -1,6 +1,7 @@
|
||||
import io from "socket.io-client";
|
||||
|
||||
let client = null;
|
||||
let callbacks = [];
|
||||
|
||||
class SocketIOHelper {
|
||||
socketUrl = null;
|
||||
@ -21,7 +22,15 @@ class SocketIOHelper {
|
||||
path: url,
|
||||
});
|
||||
|
||||
client.on("connect", () => console.log("socket is connected"));
|
||||
client.on("connect", () => {
|
||||
console.log("socket is connected");
|
||||
if (callbacks?.length > 0) {
|
||||
callbacks.forEach(({ eventName, callback }) =>
|
||||
client.on(eventName, callback)
|
||||
);
|
||||
callbacks = [];
|
||||
}
|
||||
});
|
||||
client.on("connect_error", (err) =>
|
||||
console.log("socket connect error", err)
|
||||
);
|
||||
@ -49,7 +58,10 @@ class SocketIOHelper {
|
||||
};
|
||||
|
||||
on = (eventName, callback) => {
|
||||
if (!this.isEnabled) return;
|
||||
if (!this.isEnabled) {
|
||||
callbacks.push({ eventName, callback });
|
||||
return;
|
||||
}
|
||||
|
||||
if (!client.connected) {
|
||||
client.on("connect", () => {
|
||||
|
@ -216,6 +216,8 @@ function Editor({
|
||||
|
||||
const onSDKRequestEditRights = async () => {
|
||||
console.log("ONLYOFFICE Document Editor requests editing rights");
|
||||
const url = window.location.href;
|
||||
|
||||
const index = url.indexOf("&action=view");
|
||||
|
||||
if (index) {
|
||||
@ -233,6 +235,8 @@ function Editor({
|
||||
};
|
||||
|
||||
const onMakeActionLink = (event) => {
|
||||
const url = window.location.href;
|
||||
|
||||
const actionData = event.data;
|
||||
|
||||
const link = generateLink(actionData);
|
||||
@ -370,33 +374,33 @@ function Editor({
|
||||
assign(window, ["ASC", "Files", "Editor", "docEditor"], docEditor); //Do not remove: it's for Back button on Mobile App
|
||||
};
|
||||
|
||||
const updateFavorite = (favorite) => {
|
||||
docEditor.setFavorite(favorite);
|
||||
};
|
||||
// const updateFavorite = (favorite) => {
|
||||
// docEditor.setFavorite(favorite);
|
||||
// };
|
||||
|
||||
const onMetaChange = (event) => {
|
||||
const newTitle = event.data.title;
|
||||
const favorite = event.data.favorite;
|
||||
//const favorite = event.data.favorite;
|
||||
|
||||
if (newTitle && newTitle !== docTitle) {
|
||||
setDocumentTitle(newTitle);
|
||||
docTitle = newTitle;
|
||||
}
|
||||
|
||||
if (!newTitle) {
|
||||
const onlyNumbers = new RegExp("^[0-9]+$");
|
||||
const isFileWithoutProvider = onlyNumbers.test(fileId);
|
||||
// if (!newTitle) {
|
||||
// const onlyNumbers = new RegExp("^[0-9]+$");
|
||||
// const isFileWithoutProvider = onlyNumbers.test(fileId);
|
||||
|
||||
const convertFileId = isFileWithoutProvider ? +fileId : fileId;
|
||||
// const convertFileId = isFileWithoutProvider ? +fileId : fileId;
|
||||
|
||||
favorite
|
||||
? markAsFavorite([convertFileId])
|
||||
.then(() => updateFavorite(favorite))
|
||||
.catch((error) => console.log("error", error))
|
||||
: removeFromFavorite([convertFileId])
|
||||
.then(() => updateFavorite(favorite))
|
||||
.catch((error) => console.log("error", error));
|
||||
}
|
||||
// favorite
|
||||
// ? markAsFavorite([convertFileId])
|
||||
// .then(() => updateFavorite(favorite))
|
||||
// .catch((error) => console.log("error", error))
|
||||
// : removeFromFavorite([convertFileId])
|
||||
// .then(() => updateFavorite(favorite))
|
||||
// .catch((error) => console.log("error", error));
|
||||
// }
|
||||
};
|
||||
|
||||
const setDocumentTitle = (subTitle = null) => {
|
||||
@ -417,6 +421,10 @@ function Editor({
|
||||
} else {
|
||||
title = organizationName;
|
||||
}
|
||||
|
||||
if (!documentIsReady) {
|
||||
docTitle = title;
|
||||
}
|
||||
document.title = title;
|
||||
};
|
||||
|
||||
@ -441,8 +449,10 @@ function Editor({
|
||||
|
||||
if (index > -1) {
|
||||
const splitUrl = url.split("#message/");
|
||||
|
||||
if (splitUrl.length === 2) {
|
||||
const message = decodeURIComponent(raw).replace(/\+/g, " ");
|
||||
const message = decodeURIComponent(splitUrl[1]).replace(/\+/g, " ");
|
||||
|
||||
docEditor.showMessage(message);
|
||||
history.pushState({}, null, url.substring(0, index));
|
||||
} else {
|
||||
@ -528,7 +538,8 @@ function Editor({
|
||||
onRequestInsertImage,
|
||||
onRequestMailMergeRecipients,
|
||||
onRequestCompareFile,
|
||||
onRequestRestore;
|
||||
onRequestRestore,
|
||||
onRequestHistory;
|
||||
|
||||
// if (isSharingAccess) {
|
||||
// onRequestSharingSettings = onSDKRequestSharingSettings;
|
||||
@ -538,6 +549,10 @@ function Editor({
|
||||
onRequestRename = onSDKRequestRename;
|
||||
}
|
||||
|
||||
if (userAccessRights.viewVersionHistory) {
|
||||
onRequestHistory = onSDKRequestHistory;
|
||||
}
|
||||
|
||||
if (successAuth && !user.isVisitor) {
|
||||
onRequestSaveAs = onSDKRequestSaveAs;
|
||||
}
|
||||
@ -569,7 +584,7 @@ function Editor({
|
||||
onRequestMailMergeRecipients,
|
||||
onRequestCompareFile,
|
||||
onRequestEditRights: onSDKRequestEditRights,
|
||||
onRequestHistory: onSDKRequestHistory,
|
||||
onRequestHistory: onRequestHistory,
|
||||
onRequestHistoryClose: onSDKRequestHistoryClose,
|
||||
onRequestHistoryData: onSDKRequestHistoryData,
|
||||
onRequestRestore,
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
namespace ASC.Web.Files;
|
||||
|
||||
[Scope]
|
||||
[Scope(Additional = typeof(FilesSpaceUsageStatExtension))]
|
||||
public class FilesSpaceUsageStatManager : SpaceUsageStatManager, IUserSpaceUsage
|
||||
{
|
||||
private readonly IDbContextFactory<FilesDbContext> _dbContextFactory;
|
||||
@ -139,5 +139,12 @@ public class FilesSpaceUsageStatManager : SpaceUsageStatManager, IUserSpaceUsage
|
||||
new TenantQuotaRow { Tenant = TenantId, Path = $"/{FileConstant.ModuleId}/", Counter = size, Tag = WebItemManager.DocumentsProductID.ToString(), UserId = userId, LastModified = DateTime.UtcNow },
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public static class FilesSpaceUsageStatExtension
|
||||
{
|
||||
public static void Register(DIHelper services)
|
||||
{
|
||||
services.ServiceCollection.AddBaseDbContextPool<FilesDbContext>();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user