mirror of
https://github.com/ONLYOFFICE/Docker-DocumentServer.git
synced 2026-04-07 14:01:38 +08:00
Compare commits
45 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ba4961c28f | |||
| 5279cd3ea4 | |||
| a26d08992a | |||
| 5da9390fe6 | |||
| 1e6815a0c0 | |||
| fce9f747a2 | |||
| b42b6628e6 | |||
| 1197520921 | |||
| d937c9aa89 | |||
| 289ce658d9 | |||
| c533386cd9 | |||
| bd0a5d0099 | |||
| 00aee48855 | |||
| 38946cb641 | |||
| 0671c29443 | |||
| a610326360 | |||
| 2273e04980 | |||
| 3c5f2f40a6 | |||
| 50d7503004 | |||
| 58c97b868f | |||
| 7f46a5be42 | |||
| e05a117d08 | |||
| 23dc78fab4 | |||
| 448caaf01d | |||
| 2d7c015e6d | |||
| 2480f24dfd | |||
| 1d7b5cc6a6 | |||
| 0fad4d043f | |||
| bd275e8276 | |||
| 68760883fe | |||
| a085cb962b | |||
| 1bdda91da3 | |||
| 11f153dd60 | |||
| 019d1b881f | |||
| 39b82a3c9a | |||
| d50eda45dd | |||
| 6d856cc70f | |||
| ede8569ec2 | |||
| ff98f18cb9 | |||
| b8dabf842d | |||
| 9c2012b534 | |||
| 0fecfc5d4c | |||
| 2df1459d80 | |||
| f4ae743455 | |||
| b1fda38596 |
2
.github/workflows/4testing-build.yml
vendored
2
.github/workflows/4testing-build.yml
vendored
@ -155,7 +155,7 @@ jobs:
|
||||
|
||||
### ==>> Build and push images at this step ###
|
||||
|
||||
docker buildx bake -f docker-bake.hcl "${IMAGE}" --push
|
||||
docker buildx bake --sbom=true --provenance=mode=max -f docker-bake.hcl "${IMAGE}" --push
|
||||
echo "DONE: Build success"
|
||||
|
||||
### Set output for Zap scanner
|
||||
|
||||
30
.github/workflows/dockerhub-description-size.yml
vendored
Normal file
30
.github/workflows/dockerhub-description-size.yml
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
name: Check DockerHub README limit
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- README.md
|
||||
|
||||
env:
|
||||
MAX_BYTES: "25000"
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Measure size
|
||||
id: measure
|
||||
run: |
|
||||
BYTES=$(wc -c < README.md | tr -d '[:space:]')
|
||||
echo "BYTES=$BYTES" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Fail if oversize
|
||||
run: |
|
||||
BYTES='${{ steps.measure.outputs.BYTES }}'
|
||||
echo "README.md size: $BYTES bytes (limit $MAX_BYTES)"
|
||||
if [ "$BYTES" -gt "$MAX_BYTES" ]; then
|
||||
echo "::error::README.md exceeds Docker Hub 25 KB limit"
|
||||
exit 1
|
||||
fi
|
||||
19
.github/workflows/stable-build.yml
vendored
19
.github/workflows/stable-build.yml
vendored
@ -14,12 +14,18 @@ on:
|
||||
type: string
|
||||
required: true
|
||||
default: '1'
|
||||
latest:
|
||||
description: 'Push latest tag?'
|
||||
type: boolean
|
||||
required: true
|
||||
default: true
|
||||
|
||||
env:
|
||||
COMPANY_NAME: "onlyoffice"
|
||||
PRODUCT_NAME: "documentserver"
|
||||
VERSION: ${{ github.event.inputs.tag }}
|
||||
RELEASE_NUMBER: ${{ github.event.inputs.release_number }}
|
||||
LATEST: ${{ github.event.inputs.latest }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@ -58,11 +64,18 @@ jobs:
|
||||
export TAG=${VERSION%.*}.${RELEASE_NUMBER}
|
||||
export SHORTER_TAG=${VERSION%.*}
|
||||
export SHORTEST_TAG=${VERSION%.*.*}
|
||||
docker buildx bake -f docker-bake.hcl "${TARGET}" --push
|
||||
docker buildx bake --sbom=true --provenance=mode=max -f docker-bake.hcl "${TARGET}" --push
|
||||
echo "DONE: Build success >> exit with 0"
|
||||
exit 0
|
||||
shell: bash
|
||||
|
||||
- name: Update Docker Hub README
|
||||
uses: peter-evans/dockerhub-description@v4
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||
repository: ${{ env.COMPANY_NAME }}/${{ env.PRODUCT_NAME }}${{ matrix.edition }}
|
||||
|
||||
build-nonexample:
|
||||
name: "Release image: DocumentServer${{ matrix.edition }}-nonExample"
|
||||
runs-on: ubuntu-latest
|
||||
@ -97,7 +110,7 @@ jobs:
|
||||
set -eux
|
||||
export PULL_TAG=${VERSION%.*}.${RELEASE_NUMBER}
|
||||
export TAG=${VERSION%.*}.${RELEASE_NUMBER}
|
||||
docker buildx bake -f docker-bake.hcl "${TARGET}" --push
|
||||
docker buildx bake --sbom=true --provenance=mode=max -f docker-bake.hcl "${TARGET}" --push
|
||||
shell: bash
|
||||
|
||||
build-ucs-ubuntu20:
|
||||
@ -135,5 +148,5 @@ jobs:
|
||||
export PACKAGE_SUFFIX=
|
||||
export TAG=${VERSION%.*}.${RELEASE_NUMBER}
|
||||
export PACKAGE_VERSION=$( echo ${VERSION} | sed -E 's/(.*)\./\1-/')
|
||||
docker buildx bake -f docker-bake.hcl documentserver-ucs --push
|
||||
docker buildx bake --sbom=true --provenance=mode=max -f docker-bake.hcl documentserver-ucs --push
|
||||
shell: bash
|
||||
|
||||
2
.github/workflows/zap-ds.yaml
vendored
2
.github/workflows/zap-ds.yaml
vendored
@ -61,7 +61,7 @@ jobs:
|
||||
# -j mean that scanning use AJAX Spider, with this spider the scan takes approximately an hour
|
||||
# Without any cmd options will be used default spider and the scan takes approximately ~10-15 minutes
|
||||
- name: ZAP Scan
|
||||
uses: zaproxy/action-full-scan@v0.8.0
|
||||
uses: zaproxy/action-full-scan@v0.12.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
docker_name: 'ghcr.io/zaproxy/zaproxy:stable'
|
||||
|
||||
21
Dockerfile
21
Dockerfile
@ -9,13 +9,13 @@ ARG BASE_VERSION
|
||||
ARG PG_VERSION=16
|
||||
ARG PACKAGE_SUFFIX=t64
|
||||
|
||||
ENV OC_RELEASE_NUM=21
|
||||
ENV OC_RU_VER=12
|
||||
ENV OC_RELEASE_NUM=23
|
||||
ENV OC_RU_VER=7
|
||||
ENV OC_RU_REVISION_VER=0
|
||||
ENV OC_RESERVED_NUM=0
|
||||
ENV OC_RU_DATE=0
|
||||
ENV OC_PATH=${OC_RELEASE_NUM}${OC_RU_VER}000
|
||||
ENV OC_FILE_SUFFIX=${OC_RELEASE_NUM}.${OC_RU_VER}.${OC_RU_REVISION_VER}.${OC_RESERVED_NUM}.${OC_RU_DATE}${OC_FILE_SUFFIX}dbru
|
||||
ENV OC_RESERVED_NUM=25
|
||||
ENV OC_RU_DATE=01
|
||||
ENV OC_PATH=${OC_RELEASE_NUM}${OC_RU_VER}0000
|
||||
ENV OC_FILE_SUFFIX=${OC_RELEASE_NUM}.${OC_RU_VER}.${OC_RU_REVISION_VER}.${OC_RESERVED_NUM}.${OC_RU_DATE}
|
||||
ENV OC_VER_DIR=${OC_RELEASE_NUM}_${OC_RU_VER}
|
||||
ENV OC_DOWNLOAD_URL=https://download.oracle.com/otn_software/linux/instantclient/${OC_PATH}
|
||||
|
||||
@ -83,11 +83,12 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
||||
service postgresql restart && \
|
||||
sudo -u postgres psql -c "CREATE USER $ONLYOFFICE_VALUE WITH password '$ONLYOFFICE_VALUE';" && \
|
||||
sudo -u postgres psql -c "CREATE DATABASE $ONLYOFFICE_VALUE OWNER $ONLYOFFICE_VALUE;" && \
|
||||
wget -O basic.zip ${OC_DOWNLOAD_URL}/instantclient-basic-linux.x64-${OC_FILE_SUFFIX}.zip && \
|
||||
wget -O sqlplus.zip ${OC_DOWNLOAD_URL}/instantclient-sqlplus-linux.x64-${OC_FILE_SUFFIX}.zip && \
|
||||
unzip -d /usr/share basic.zip && \
|
||||
unzip -d /usr/share sqlplus.zip && \
|
||||
wget -O basic.zip ${OC_DOWNLOAD_URL}/instantclient-basic-linux.$(dpkg --print-architecture | sed 's/amd64/x64/')-${OC_FILE_SUFFIX}.zip && \
|
||||
wget -O sqlplus.zip ${OC_DOWNLOAD_URL}/instantclient-sqlplus-linux.$(dpkg --print-architecture | sed 's/amd64/x64/')-${OC_FILE_SUFFIX}.zip && \
|
||||
unzip -o basic.zip -d /usr/share && \
|
||||
unzip -o sqlplus.zip -d /usr/share && \
|
||||
mv /usr/share/instantclient_${OC_VER_DIR} /usr/share/instantclient && \
|
||||
find /usr/lib /lib -name "libaio.so.1$PACKAGE_SUFFIX" -exec bash -c 'ln -sf "$0" "$(dirname "$0")/libaio.so.1"' {} \; && \
|
||||
service postgresql stop && \
|
||||
service redis-server stop && \
|
||||
service rabbitmq-server stop && \
|
||||
|
||||
107
README.md
107
README.md
@ -20,28 +20,34 @@
|
||||
|
||||
## Overview
|
||||
|
||||
ONLYOFFICE Document Server is an online office suite comprising viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats: .docx, .xlsx, .pptx and enabling collaborative editing in real time.
|
||||
ONLYOFFICE Docs (Document Server) is an open-source office suite that comprises all the tools you need to work with documents, spreadsheets, presentations, PDFs, and PDF forms. The suite supports office files of all popular formats (DOCX, ODT, XLSX, ODS, CSV, PPTX, ODP, etc.) and enables collaborative editing in real time.
|
||||
|
||||
Starting from version 6.0, Document Server is distributed as ONLYOFFICE Docs. It has [three editions](https://github.com/ONLYOFFICE/DocumentServer#onlyoffice-document-server-editions). With this image, you will install the free Community version.
|
||||
Starting from version 6.0, Document Server is distributed as ONLYOFFICE Docs. It has [three editions](https://github.com/ONLYOFFICE/DocumentServer#onlyoffice-docs-editions). With this image, you will install the free Community version.
|
||||
|
||||
ONLYOFFICE Docs can be used as a part of ONLYOFFICE Workspace or with third-party sync&share solutions (e.g. Nextcloud, ownCloud, Seafile) to enable collaborative editing within their interface.
|
||||
ONLYOFFICE Docs can be used as a part of [ONLYOFFICE DocSpace](https://www.onlyoffice.com/docspace.aspx) and ONLYOFFICE Workspace, or with [third-party sync&share solutions](https://www.onlyoffice.com/all-connectors.aspx) (e.g. Odoo, Moodle, Nextcloud, ownCloud, Seafile, etc.) to enable collaborative editing within their interface.
|
||||
|
||||
***Important*** Please update `docker-engine` to latest version (`20.10.21` as of writing this doc) before using it. We use `ubuntu:22.04` as base image and it older versions of docker have compatibility problems with it
|
||||
***Important*** Please update `docker-engine` to latest version (`20.10.21` as of writing this doc) before using it. We use `ubuntu:24.04` as base image and it older versions of docker have compatibility problems with it
|
||||
|
||||
## Functionality ##
|
||||
* ONLYOFFICE Document Editor
|
||||
* ONLYOFFICE Spreadsheet Editor
|
||||
* ONLYOFFICE Presentation Editor
|
||||
* ONLYOFFICE Documents application for iOS
|
||||
* Collaborative editing
|
||||
* Hieroglyph support
|
||||
* Support for all the popular formats: DOC, DOCX, TXT, ODT, RTF, ODP, EPUB, ODS, XLS, XLSX, CSV, PPTX, HTML
|
||||
|
||||
Integrating it with ONLYOFFICE Community Server you will be able to:
|
||||
* view and edit files stored on Drive, Box, Dropbox, OneDrive, OwnCloud connected to ONLYOFFICE;
|
||||
* share files;
|
||||
* embed documents on a website;
|
||||
* manage access rights to documents.
|
||||
Take advantage of the powerful editors included in ONLYOFFICE Docs:
|
||||
|
||||
* [ONLYOFFICE Document Editor](https://www.onlyoffice.com/document-editor.aspx)
|
||||
* [ONLYOFFICE Spreadsheet Editor](https://www.onlyoffice.com/spreadsheet-editor.aspx)
|
||||
* [ONLYOFFICE Presentation Editor](https://www.onlyoffice.com/presentation-editor.aspx)
|
||||
* [ONLYOFFICE Form Creator](https://www.onlyoffice.com/form-creator.aspx)
|
||||
* [ONLYOFFICE PDF Editor](https://www.onlyoffice.com/pdf-editor.aspx)
|
||||
* [ONLYOFFICE Diagram Viewer](https://www.onlyoffice.com/diagram-viewer.aspx)
|
||||
|
||||
The editors empower you to create, edit, save, and export text docs, sheets, presentations, PDFs, create and fill out PDF forms, open diagrams, all while offering additional advanced features such as:
|
||||
|
||||
* Collaborative editing (review & track changes, comments, chat)
|
||||
* [AI-powered assistants](https://www.onlyoffice.com/ai-assistants.aspx)
|
||||
* Spell-checking
|
||||
* Scalable UI options (including dark mode)
|
||||
* [Security tools & services](https://www.onlyoffice.com/security.aspx)
|
||||
|
||||
ONLYOFFICE Docs offer support for plugins allowing you to add specific features to the editors that are not directly related to the OOXML format. For more details, see [our API](https://api.onlyoffice.com/docs/plugin-and-macros/get-started/overview/) or visit the [plugins repo](https://github.com/ONLYOFFICE/onlyoffice.github.io). Would like to explore the existing plugins? Open the [Marketplace](https://www.onlyoffice.com/app-directory).
|
||||
|
||||
## Recommended System Requirements
|
||||
|
||||
@ -185,13 +191,19 @@ Below is the complete list of parameters that can be set using environment varia
|
||||
- **DB_NAME**: The name of a database to use. Should be existing on container startup.
|
||||
- **DB_USER**: The new user name with superuser permissions for the database account.
|
||||
- **DB_PWD**: The password set for the database account.
|
||||
- **DB_SCHEMA**: Database schema name (optional).
|
||||
- **PostgreSQL** — schema for [search_path](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH), default `public`.
|
||||
- **MSSQL** — schema to set as [DEFAULT_SCHEMA](https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-ver17#default_schema---schema_name--null-), default `dbo`.
|
||||
- **AMQP_URI**: The [AMQP URI](https://www.rabbitmq.com/uri-spec.html "RabbitMQ URI Specification") to connect to message broker server.
|
||||
- **AMQP_TYPE**: The message broker type. Supported values are `rabbitmq` or `activemq`. Defaults to `rabbitmq`.
|
||||
- **REDIS_SERVER_HOST**: The IP address or the name of the host where the Redis server is running.
|
||||
- **REDIS_SERVER_PORT**: The Redis server port number.
|
||||
- **REDIS_SERVER_USER**: The Redis server username. The username is not set by default.
|
||||
- **REDIS_SERVER_PASS**: The Redis server password. The password is not set by default.
|
||||
- **REDIS_SERVER_DB**: The Redis database index number to select. Defaults to `0`.
|
||||
- **NGINX_WORKER_PROCESSES**: Defines the number of nginx worker processes.
|
||||
- **NGINX_WORKER_CONNECTIONS**: Sets the maximum number of simultaneous connections that can be opened by a nginx worker process.
|
||||
- **NGINX_ACCESS_LOG**: Defines whether access logging is enabled. Defaults to `false`.
|
||||
- **SECURE_LINK_SECRET**: Defines secret for the nginx config directive [secure_link_md5](https://nginx.org/en/docs/http/ngx_http_secure_link_module.html#secure_link_md5). Defaults to `random string`.
|
||||
- **JWT_ENABLED**: Specifies the enabling the JSON Web Token validation by the ONLYOFFICE Document Server. Defaults to `true`.
|
||||
- **JWT_SECRET**: Defines the secret key to validate the JSON Web Token in the request to the ONLYOFFICE Document Server. Defaults to random value.
|
||||
@ -210,9 +222,31 @@ Below is the complete list of parameters that can be set using environment varia
|
||||
- **LETS_ENCRYPT_MAIL**: Defines the domain administator mail address for Let's Encrypt certificate.
|
||||
- **PLUGINS_ENABLED**: Defines whether to enable default plugins. Defaults to `true`.
|
||||
|
||||
## Installing ONLYOFFICE Document Server integrated with Community and Mail Servers
|
||||
## Installing ONLYOFFICE Document Server using Docker Compose
|
||||
|
||||
ONLYOFFICE Document Server is a part of ONLYOFFICE Community Edition that comprises also Community Server and Mail Server. To install them, follow these easy steps:
|
||||
You can also install ONLYOFFICE Document Server using [docker-compose](https://docs.docker.com/compose/install "docker-compose").
|
||||
|
||||
First you need to clone this [GitHub repository](https://github.com/ONLYOFFICE/Docker-DocumentServer/):
|
||||
|
||||
```bash
|
||||
git clone https://github.com/ONLYOFFICE/Docker-DocumentServer
|
||||
```
|
||||
|
||||
After that switch to the repository folder:
|
||||
|
||||
```bash
|
||||
cd Docker-DocumentServer
|
||||
```
|
||||
|
||||
After that, assuming you have docker-compose installed, execute the following command:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Installing ONLYOFFICE Document Server as a part of ONLYOFFICE Workspace
|
||||
|
||||
ONLYOFFICE Document Server is a part of ONLYOFFICE Workspace that comprises also Community Server, Mail Server, and Control Panel. To install them, follow these easy steps:
|
||||
|
||||
**STEP 1**: Create the `onlyoffice` network.
|
||||
|
||||
@ -288,8 +322,9 @@ sudo docker run --net onlyoffice -i -t -d --privileged --restart=always --name o
|
||||
-e MAIL_SERVER_DB_NAME=onlyoffice_mailserver \
|
||||
-e MAIL_SERVER_DB_PORT=3306 \
|
||||
-e MAIL_SERVER_DB_USER=root \
|
||||
-e MAIL_SERVER_DB_PASS=my-secret-pw \
|
||||
|
||||
-e MAIL_SERVER_DB_PASS=my-secret-pw \
|
||||
-e CONTROL_PANEL_PORT_80_TCP=80 \
|
||||
-e CONTROL_PANEL_PORT_80_TCP_ADDR=onlyoffice-control-panel \
|
||||
-v /app/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data \
|
||||
-v /app/onlyoffice/CommunityServer/logs:/var/log/onlyoffice \
|
||||
-v /app/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt \
|
||||
@ -302,21 +337,21 @@ Where `${MAIL_SERVER_IP}` is the IP address for **ONLYOFFICE Mail Server**. You
|
||||
MAIL_SERVER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' onlyoffice-mail-server)
|
||||
```
|
||||
|
||||
Alternatively, you can use an automatic installation script to install the whole ONLYOFFICE Community Edition at once. For the mail server correct work you need to specify its hostname 'yourdomain.com'.
|
||||
Alternatively, you can use an automatic installation script to install ONLYOFFICE Workspace at once. For the mail server correct work you need to specify its hostname 'yourdomain.com'.
|
||||
|
||||
**STEP 1**: Download the Community Edition Docker script file
|
||||
**STEP 1**: Download the ONLYOFFICE Workspace Docker script file
|
||||
|
||||
```bash
|
||||
wget https://download.onlyoffice.com/install/opensource-install.sh
|
||||
wget https://download.onlyoffice.com/install/workspace-install.sh
|
||||
```
|
||||
|
||||
**STEP 2**: Install ONLYOFFICE Community Edition executing the following command:
|
||||
**STEP 2**: Install ONLYOFFICE Workspace executing the following command:
|
||||
|
||||
```bash
|
||||
bash opensource-install.sh -md yourdomain.com
|
||||
workspace-install.sh -md yourdomain.com
|
||||
```
|
||||
|
||||
Or, use [docker-compose](https://docs.docker.com/compose/install "docker-compose"). For the mail server correct work you need to specify its hostname 'yourdomain.com'. Assuming you have docker-compose installed, execute the following command:
|
||||
Or, use [docker-compose](https://docs.docker.com/compose/install "docker-compose"). First you need to clone this [GitHub repository](https://github.com/ONLYOFFICE/Docker-CommunityServer/):
|
||||
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/ONLYOFFICE/Docker-CommunityServer/master/docker-compose.groups.yml
|
||||
@ -367,21 +402,23 @@ Please note, that both executing the script and disconnecting users may take a l
|
||||
|
||||
## Project Information
|
||||
|
||||
Official website: [https://www.onlyoffice.com](https://www.onlyoffice.com/?utm_source=github&utm_medium=cpc&utm_campaign=GitHubDockerDS)
|
||||
Official website: [www.onlyoffice.com](https://www.onlyoffice.com/?utm_source=github&utm_medium=cpc&utm_campaign=GitHubDockerDS)
|
||||
|
||||
Code repository: [https://github.com/ONLYOFFICE/DocumentServer](https://github.com/ONLYOFFICE/DocumentServer "https://github.com/ONLYOFFICE/DocumentServer")
|
||||
Code repository: [github.com/ONLYOFFICE/DocumentServer](https://github.com/ONLYOFFICE/DocumentServer "https://github.com/ONLYOFFICE/DocumentServer")
|
||||
|
||||
Docker Image: [https://github.com/ONLYOFFICE/Docker-DocumentServer](https://github.com/ONLYOFFICE/Docker-DocumentServer "https://github.com/ONLYOFFICE/Docker-DocumentServer")
|
||||
Docker Image: [github.com/ONLYOFFICE/Docker-DocumentServer](https://github.com/ONLYOFFICE/Docker-DocumentServer "https://github.com/ONLYOFFICE/Docker-DocumentServer")
|
||||
|
||||
License: [GNU AGPL v3.0](https://help.onlyoffice.com/products/files/doceditor.aspx?fileid=4358397&doc=K0ZUdlVuQzQ0RFhhMzhZRVN4ZFIvaHlhUjN2eS9XMXpKR1M5WEppUk1Gcz0_IjQzNTgzOTci0 "GNU AGPL v3.0")
|
||||
License: [GNU AGPL v3.0](https://onlyo.co/38YZGJh)
|
||||
|
||||
Free version vs commercial builds comparison: https://github.com/ONLYOFFICE/DocumentServer#onlyoffice-document-server-editions
|
||||
|
||||
SaaS version: [https://www.onlyoffice.com/cloud-office.aspx](https://www.onlyoffice.com/cloud-office.aspx?utm_source=github&utm_medium=cpc&utm_campaign=GitHubDockerDS)
|
||||
Free version vs commercial builds comparison: https://github.com/ONLYOFFICE/DocumentServer#onlyoffice-docs-editions
|
||||
|
||||
## User Feedback and Support
|
||||
|
||||
If you have any problems with or questions about this image, please visit our official forum to find answers to your questions: [forum.onlyoffice.com][1] or you can ask and answer ONLYOFFICE development questions on [Stack Overflow][2].
|
||||
If you face any issues or have questions about this image, visit our official forum: [forum.onlyoffice.com][1].
|
||||
|
||||
You are also welcome to ask and answer ONLYOFFICE development questions on [Stack Overflow][2], as well as share your suggestions on [feedback.onlyoffice.com](https://feedback.onlyoffice.com/forums/966080-your-voice-matters).
|
||||
|
||||
Join [our Discord community](https://discord.gg/Hcgtf5n4uF) for connecting with fellow developers.
|
||||
|
||||
[1]: https://forum.onlyoffice.com
|
||||
[2]: https://stackoverflow.com/questions/tagged/onlyoffice
|
||||
[2]: https://stackoverflow.com/questions/tagged/onlyoffice
|
||||
13
config/supervisor/ds/ds-adminpanel.conf
Normal file
13
config/supervisor/ds/ds-adminpanel.conf
Normal file
@ -0,0 +1,13 @@
|
||||
[program:adminpanel]
|
||||
command=/var/www/COMPANY_NAME/documentserver/server/AdminPanel/server/adminpanel
|
||||
directory=/var/www/COMPANY_NAME/documentserver/server/AdminPanel
|
||||
user=ds
|
||||
environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=COMPANY_NAME
|
||||
stdout_logfile=/var/log/COMPANY_NAME/documentserver/adminpanel/out.log
|
||||
stdout_logfile_backups=0
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/var/log/COMPANY_NAME/documentserver/adminpanel/err.log
|
||||
stderr_logfile_backups=0
|
||||
stderr_logfile_maxbytes=0
|
||||
autostart=false
|
||||
autorestart=false
|
||||
@ -1,2 +1,2 @@
|
||||
[group:ds]
|
||||
programs=docservice,converter,metrics,example
|
||||
programs=docservice,converter,metrics,example,adminpanel
|
||||
|
||||
@ -110,7 +110,7 @@ target "documentserver-stable" {
|
||||
tags = ["docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}",
|
||||
"docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${SHORTER_TAG}",
|
||||
"docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${SHORTEST_TAG}",
|
||||
"docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest",
|
||||
equal("true",LATEST) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest": "",
|
||||
equal("-ee",PRODUCT_EDITION) ? "docker.io/${COMPANY_NAME}4enterprise/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}": "",]
|
||||
platforms = ["linux/amd64", "linux/arm64"]
|
||||
args = {
|
||||
|
||||
@ -2,6 +2,7 @@ services:
|
||||
onlyoffice-documentserver:
|
||||
build:
|
||||
context: .
|
||||
image: onlyoffice/documentserver #[-de,-ee]
|
||||
container_name: onlyoffice-documentserver
|
||||
depends_on:
|
||||
- onlyoffice-postgresql
|
||||
@ -21,6 +22,12 @@ services:
|
||||
ports:
|
||||
- '80:80'
|
||||
- '443:443'
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8000/info/info.json"]
|
||||
interval: 30s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
timeout: 10s
|
||||
stdin_open: true
|
||||
restart: always
|
||||
stop_grace_period: 60s
|
||||
@ -33,14 +40,20 @@ services:
|
||||
|
||||
onlyoffice-rabbitmq:
|
||||
container_name: onlyoffice-rabbitmq
|
||||
image: rabbitmq
|
||||
image: rabbitmq:3
|
||||
restart: always
|
||||
expose:
|
||||
- '5672'
|
||||
healthcheck:
|
||||
test: ["CMD", "rabbitmq-diagnostics", "status"]
|
||||
interval: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
timeout: 10s
|
||||
|
||||
onlyoffice-postgresql:
|
||||
container_name: onlyoffice-postgresql
|
||||
image: postgres:12
|
||||
image: postgres:15
|
||||
environment:
|
||||
- POSTGRES_DB=onlyoffice
|
||||
- POSTGRES_USER=onlyoffice
|
||||
@ -50,6 +63,12 @@ services:
|
||||
- '5432'
|
||||
volumes:
|
||||
- postgresql_data:/var/lib/postgresql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U onlyoffice"]
|
||||
interval: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
timeout: 10s
|
||||
|
||||
volumes:
|
||||
postgresql_data:
|
||||
|
||||
@ -51,12 +51,11 @@ if [ "${RELEASE_DATE}" != "${PREV_RELEASE_DATE}" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
SSL_CERTIFICATES_DIR="/usr/share/ca-certificates/ds"
|
||||
mkdir -p ${SSL_CERTIFICATES_DIR}
|
||||
if find "${DATA_DIR}/certs" -type f \( -name "*.crt" -o -name "*.pem" \) -print -quit >/dev/null 2>&1; then
|
||||
cp -f ${DATA_DIR}/certs/* ${SSL_CERTIFICATES_DIR}
|
||||
chmod 644 ${SSL_CERTIFICATES_DIR}/*.{crt,pem} 2>/dev/null
|
||||
chmod 400 ${SSL_CERTIFICATES_DIR}/*.key 2>/dev/null
|
||||
SSL_CERTIFICATES_DIR="/usr/share/ca-certificates/ds"; mkdir -p ${SSL_CERTIFICATES_DIR}
|
||||
find "${DATA_DIR}/certs" -type f \( -iname '*.crt' -o -iname '*.pem' -o -iname '*.key' \) -exec cp -f {} "${SSL_CERTIFICATES_DIR}"/ \;
|
||||
if find "${SSL_CERTIFICATES_DIR}" -maxdepth 1 -type f | read _; then
|
||||
find "${SSL_CERTIFICATES_DIR}" -type f \( -iname '*.crt' -o -iname '*.pem' \) -exec chmod 644 {} \;
|
||||
find "${SSL_CERTIFICATES_DIR}" -type f -iname '*.key' -exec chmod 400 {} \;
|
||||
fi
|
||||
|
||||
if [[ -z $SSL_CERTIFICATE_PATH ]] && [[ -f ${SSL_CERTIFICATES_DIR}/${COMPANY_NAME}.crt ]]; then
|
||||
@ -104,6 +103,7 @@ NGINX_ONLYOFFICE_EXAMPLE_CONF="${NGINX_ONLYOFFICE_EXAMPLE_PATH}/includes/ds-exam
|
||||
|
||||
NGINX_CONFIG_PATH="/etc/nginx/nginx.conf"
|
||||
NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1}
|
||||
NGINX_ACCESS_LOG=${NGINX_ACCESS_LOG:-false}
|
||||
# Limiting the maximum number of simultaneous connections due to possible memory shortage
|
||||
LIMIT=$(ulimit -n); [ $LIMIT -gt 1048576 ] && LIMIT=1048576
|
||||
NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$LIMIT}
|
||||
@ -274,8 +274,7 @@ waiting_for_connection(){
|
||||
waiting_for_db_ready(){
|
||||
case $DB_TYPE in
|
||||
"oracle")
|
||||
PDB="XEPDB1"
|
||||
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB"
|
||||
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/${DB_NAME}"
|
||||
DB_TEST="echo \"SELECT version FROM V\$INSTANCE;\" | $ORACLE_SQL 2>/dev/null | grep \"Connected\" | wc -l"
|
||||
;;
|
||||
*)
|
||||
@ -376,10 +375,11 @@ update_redis_settings(){
|
||||
${JSON} -I -e "this.services.CoAuthoring.redis.host = '${REDIS_SERVER_HOST}'"
|
||||
${JSON} -I -e "this.services.CoAuthoring.redis.port = '${REDIS_SERVER_PORT}'"
|
||||
|
||||
if [ -n "${REDIS_SERVER_PASS}" ]; then
|
||||
${JSON} -I -e "this.services.CoAuthoring.redis.options = {'password':'${REDIS_SERVER_PASS}'}"
|
||||
fi
|
||||
|
||||
${JSON} -I -e "this.services.CoAuthoring.redis.options = {
|
||||
${REDIS_SERVER_USER:+username: '${REDIS_SERVER_USER}',}
|
||||
${REDIS_SERVER_PASS:+password: '${REDIS_SERVER_PASS}',}
|
||||
${REDIS_SERVER_DB:+database: '${REDIS_SERVER_DB}',}
|
||||
}"
|
||||
}
|
||||
|
||||
update_ds_settings(){
|
||||
@ -390,6 +390,7 @@ update_ds_settings(){
|
||||
${JSON} -I -e "this.services.CoAuthoring.secret.inbox.string = '${JWT_SECRET}'"
|
||||
${JSON} -I -e "this.services.CoAuthoring.secret.outbox.string = '${JWT_SECRET}'"
|
||||
${JSON} -I -e "this.services.CoAuthoring.secret.session.string = '${JWT_SECRET}'"
|
||||
${JSON} -I -e "this.services.CoAuthoring.secret.browser.string = '${JWT_SECRET}'"
|
||||
|
||||
${JSON} -I -e "this.services.CoAuthoring.token.inbox.header = '${JWT_HEADER}'"
|
||||
${JSON} -I -e "this.services.CoAuthoring.token.outbox.header = '${JWT_HEADER}'"
|
||||
@ -451,9 +452,7 @@ create_postgresql_db(){
|
||||
}
|
||||
|
||||
create_mssql_db(){
|
||||
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT"
|
||||
|
||||
$MSSQL -U $DB_USER -P "$DB_PWD" -C -Q "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DB_NAME') BEGIN CREATE DATABASE $DB_NAME; END"
|
||||
${MSSQL/ -d $DB_NAME/} -b -Q "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DB_NAME') BEGIN CREATE DATABASE [$DB_NAME]; END"
|
||||
}
|
||||
|
||||
create_db_tbl() {
|
||||
@ -490,6 +489,22 @@ upgrade_db_tbl() {
|
||||
esac
|
||||
}
|
||||
|
||||
postgresql_check_schema(){
|
||||
DB_SCHEMA=${DB_SCHEMA:-$(${JSON} services.CoAuthoring.sql.pgPoolExtraOptions.options 2>/dev/null | sed -n 's/.*search_path=\([^, ]*\).*/\1/p')}
|
||||
if [ -n "${DB_SCHEMA}" ]; then
|
||||
export PGOPTIONS="-c search_path=${DB_SCHEMA}"
|
||||
$PSQL -c "CREATE SCHEMA IF NOT EXISTS ${DB_SCHEMA};" >/dev/null 2>&1
|
||||
${JSON} -I -e "this.services.CoAuthoring.sql.pgPoolExtraOptions ||= {}; this.services.CoAuthoring.sql.pgPoolExtraOptions.options = '${PGOPTIONS}'"
|
||||
fi
|
||||
}
|
||||
|
||||
mssql_check_schema(){
|
||||
if [ -n "${DB_SCHEMA}" ]; then
|
||||
${MSSQL} -b -Q "DECLARE @s sysname=N'${DB_SCHEMA}'; IF SCHEMA_ID(@s) IS NULL BEGIN DECLARE @sql nvarchar(max); SET @sql=N'CREATE SCHEMA '+QUOTENAME(@s)+N' AUTHORIZATION '+QUOTENAME(N'${DB_USER}'); EXEC(@sql); END"
|
||||
${MSSQL} -b -Q "DECLARE @s sysname=N'${DB_SCHEMA}'; DECLARE @u sysname=N'${DB_USER}'; IF USER_ID(@u) IS NOT NULL BEGIN DECLARE @sql nvarchar(max); SET @sql=N'ALTER USER '+QUOTENAME(@u)+N' WITH DEFAULT_SCHEMA = '+QUOTENAME(@s); EXEC(@sql); END"
|
||||
fi
|
||||
}
|
||||
|
||||
upgrade_postgresql_tbl() {
|
||||
if [ -n "$DB_PWD" ]; then
|
||||
export PGPASSWORD=$DB_PWD
|
||||
@ -497,6 +512,7 @@ upgrade_postgresql_tbl() {
|
||||
|
||||
PSQL="psql -q -h$DB_HOST -p$DB_PORT -d$DB_NAME -U$DB_USER -w"
|
||||
|
||||
postgresql_check_schema
|
||||
$PSQL -f "$APP_DIR/server/schema/postgresql/removetbl.sql"
|
||||
$PSQL -f "$APP_DIR/server/schema/postgresql/createdb.sql"
|
||||
}
|
||||
@ -510,16 +526,19 @@ upgrade_mysql_tbl() {
|
||||
}
|
||||
|
||||
upgrade_mssql_tbl() {
|
||||
CONN_PARAMS="-U $DB_USER -P "$DB_PWD" -C"
|
||||
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS"
|
||||
if [ -n "$DB_PWD" ]; then
|
||||
export SQLCMDPASSWORD=$DB_PWD
|
||||
fi
|
||||
|
||||
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT -d $DB_NAME -U $DB_USER -C"
|
||||
|
||||
mssql_check_schema
|
||||
$MSSQL < "$APP_DIR/server/schema/mssql/removetbl.sql" >/dev/null 2>&1
|
||||
$MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
upgrade_oracle_tbl() {
|
||||
PDB="XEPDB1"
|
||||
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB"
|
||||
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/${DB_NAME}"
|
||||
|
||||
$ORACLE_SQL @$APP_DIR/server/schema/oracle/removetbl.sql >/dev/null 2>&1
|
||||
$ORACLE_SQL @$APP_DIR/server/schema/oracle/createdb.sql >/dev/null 2>&1
|
||||
@ -531,6 +550,8 @@ create_postgresql_tbl() {
|
||||
fi
|
||||
|
||||
PSQL="psql -q -h$DB_HOST -p$DB_PORT -d$DB_NAME -U$DB_USER -w"
|
||||
|
||||
postgresql_check_schema
|
||||
$PSQL -f "$APP_DIR/server/schema/postgresql/createdb.sql"
|
||||
}
|
||||
|
||||
@ -545,17 +566,19 @@ create_mysql_tbl() {
|
||||
}
|
||||
|
||||
create_mssql_tbl() {
|
||||
if [ -n "$DB_PWD" ]; then
|
||||
export SQLCMDPASSWORD=$DB_PWD
|
||||
fi
|
||||
|
||||
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT -d $DB_NAME -U $DB_USER -C"
|
||||
|
||||
create_mssql_db
|
||||
|
||||
CONN_PARAMS="-U $DB_USER -P "$DB_PWD" -C"
|
||||
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS"
|
||||
|
||||
mssql_check_schema
|
||||
$MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
create_oracle_tbl() {
|
||||
PDB="XEPDB1"
|
||||
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB"
|
||||
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/${DB_NAME}"
|
||||
|
||||
$ORACLE_SQL @$APP_DIR/server/schema/oracle/createdb.sql >/dev/null 2>&1
|
||||
}
|
||||
@ -582,7 +605,13 @@ update_nginx_settings(){
|
||||
# Set up nginx
|
||||
sed 's/^worker_processes.*/'"worker_processes ${NGINX_WORKER_PROCESSES};"'/' -i ${NGINX_CONFIG_PATH}
|
||||
sed 's/worker_connections.*/'"worker_connections ${NGINX_WORKER_CONNECTIONS};"'/' -i ${NGINX_CONFIG_PATH}
|
||||
sed 's/access_log.*/'"access_log off;"'/' -i ${NGINX_CONFIG_PATH}
|
||||
|
||||
if [ "${NGINX_ACCESS_LOG}" = "true" ]; then
|
||||
touch "${DS_LOG_DIR}/nginx.access.log"
|
||||
sed -ri 's|^\s*access_log\b.*;|access_log '"${DS_LOG_DIR}"'/nginx.access.log;|' "${NGINX_CONFIG_PATH}" "${NGINX_ONLYOFFICE_PATH}/includes/ds-common.conf" 2>/dev/null
|
||||
else
|
||||
sed -ri 's|^\s*access_log\b.*;|access_log off;|' "${NGINX_CONFIG_PATH}"
|
||||
fi
|
||||
|
||||
# setup HTTPS
|
||||
if [ -f "${SSL_CERTIFICATE_PATH}" -a -f "${SSL_KEY_PATH}" ]; then
|
||||
@ -643,11 +672,11 @@ update_release_date(){
|
||||
}
|
||||
|
||||
# create base folders
|
||||
for i in converter docservice metrics; do
|
||||
mkdir -p "${DS_LOG_DIR}/$i"
|
||||
for i in converter docservice metrics adminpanel; do
|
||||
mkdir -p "$DS_LOG_DIR/$i" && touch "$DS_LOG_DIR/$i"/{out,err}.log
|
||||
done
|
||||
|
||||
mkdir -p ${DS_LOG_DIR}-example
|
||||
mkdir -p "${DS_LOG_DIR}-example" && touch "${DS_LOG_DIR}-example"/{out,err}.log
|
||||
|
||||
# create app folders
|
||||
for i in ${DS_LIB_DIR}/App_Data/cache/files ${DS_LIB_DIR}/App_Data/docbuilder ${DS_LIB_DIR}-example/files; do
|
||||
@ -655,11 +684,16 @@ for i in ${DS_LIB_DIR}/App_Data/cache/files ${DS_LIB_DIR}/App_Data/docbuilder ${
|
||||
done
|
||||
|
||||
# change folder rights
|
||||
chown ds:ds "${DATA_DIR}"
|
||||
for i in ${DS_LOG_DIR} ${DS_LOG_DIR}-example ${LIB_DIR}; do
|
||||
chown -R ds:ds "$i"
|
||||
chmod -R 755 "$i"
|
||||
done
|
||||
|
||||
# Bug 75324 - Update permissions for runtime.json
|
||||
AI_CONFIG_FILE="${DATA_DIR}/runtime.json"
|
||||
[ -f "${AI_CONFIG_FILE}" ] && { chown ds:ds "${AI_CONFIG_FILE}" && chmod 644 "${AI_CONFIG_FILE}"; }
|
||||
|
||||
if [ ${ONLYOFFICE_DATA_CONTAINER_HOST} = "localhost" ]; then
|
||||
|
||||
read_setting
|
||||
@ -792,4 +826,4 @@ start_process documentserver-static-gzip.sh ${ONLYOFFICE_DATA_CONTAINER}
|
||||
|
||||
echo "${JWT_MESSAGE}"
|
||||
|
||||
start_process tail -f /var/log/${COMPANY_NAME}/**/*.log
|
||||
start_process find "$DS_LOG_DIR" "$DS_LOG_DIR-example" -type f -name "*.log" | xargs tail -F
|
||||
|
||||
Reference in New Issue
Block a user