Skip to content

Docker-образ и инструкции для запуска UnivaultOffice Docs (Document Server).

License

Notifications You must be signed in to change notification settings

UnivaultOffice/Docker-DocumentServer

Repository files navigation

Обзор

UNIVAULTOFFICE Docs (Document Server) — это офисный пакет с открытым исходным кодом, который включает все необходимые инструменты для работы с документами, таблицами, презентациями, PDF и PDF-формами. Пакет поддерживает файлы популярных форматов (DOCX, ODT, XLSX, ODS, CSV, PPTX, ODP и т. д.) и обеспечивает совместное редактирование в реальном времени.

Начиная с версии 6.0 Document Server распространяется как UNIVAULTOFFICE Docs. Доступны три редакции. С этим образом вы устанавливаете бесплатную Community-версию.

UNIVAULTOFFICE Docs можно использовать как часть UNIVAULTOFFICE DocSpace и UNIVAULTOFFICE Workspace либо совместно с сторонними sync&share решениями (например, Odoo, Moodle, Nextcloud, ownCloud, Seafile и т. д.) для совместного редактирования в их интерфейсах.

Важно перед использованием обновите docker-engine до последней версии (20.10.21 на момент написания). В качестве базового образа используется ubuntu:24.04, и старые версии Docker несовместимы с ним.

Функциональность

Используйте мощные редакторы UNIVAULTOFFICE Docs:

Редакторы позволяют создавать, редактировать, сохранять и экспортировать текстовые документы, таблицы, презентации и PDF, создавать и заполнять PDF-формы, открывать диаграммы и использовать дополнительные функции:

UNIVAULTOFFICE Docs поддерживают плагины, которые добавляют функции, не связанные напрямую с форматом OOXML. Подробнее см. наш API или репозиторий плагинов univaultoffice.github.io. Хотите посмотреть готовые плагины? Откройте Marketplace.

Рекомендуемые системные требования

  • RAM: 4 GB или больше
  • CPU: двухъядерный 2 GHz или выше
  • Swap: не менее 2 GB
  • HDD: не менее 2 GB свободного места
  • Distribution: 64-bit Red Hat, CentOS или другой совместимый дистрибутив с ядром версии 3.8 или новее, 64-bit Debian, Ubuntu или другой совместимый дистрибутив с ядром версии 3.8 или новее
  • Docker: версия 1.9.0 или новее

Запуск Docker-образа

sudo docker run -i -t -d -p 80:80 univaultoffice/documentserver

Используйте эту команду, если хотите установить UNIVAULTOFFICE Document Server отдельно. Чтобы установить UNIVAULTOFFICE Document Server вместе с Community и Mail Server, смотрите инструкции ниже.

Настройка Docker-образа

Хранение данных

Все данные хранятся в специально выделенных директориях — data volumes — в следующих путях:

  • /var/log/univaultoffice для логов UNIVAULTOFFICE Document Server
  • /var/www/univaultoffice/Data для сертификатов
  • /var/lib/univaultoffice для кэша файлов
  • /var/lib/postgresql для базы данных

Чтобы получить доступ к данным вне контейнера, нужно примонтировать volumes. Это делается через опцию -v в команде docker run.

sudo docker run -i -t -d -p 80:80 \
    -v /app/univaultoffice/DocumentServer/logs:/var/log/univaultoffice  \
    -v /app/univaultoffice/DocumentServer/data:/var/www/univaultoffice/Data  \
    -v /app/univaultoffice/DocumentServer/lib:/var/lib/univaultoffice \
    -v /app/univaultoffice/DocumentServer/rabbitmq:/var/lib/rabbitmq \
    -v /app/univaultoffice/DocumentServer/redis:/var/lib/redis \
    -v /app/univaultoffice/DocumentServer/db:/var/lib/postgresql  univaultoffice/documentserver

Обычно хранить данные контейнера не требуется, так как работа контейнера не зависит от его состояния. Сохранение данных будет полезно:

  • Для удобного доступа к данным контейнера, например к логам
  • Чтобы снять ограничения на размер данных внутри контейнера
  • При использовании сервисов, запущенных вне контейнера, таких как PostgreSQL, Redis, RabbitMQ

Запуск UNIVAULTOFFICE Document Server на другом порту

Чтобы изменить порт, используйте команду -p. Например, чтобы сделать портал доступным на порту 8080:

sudo docker run -i -t -d -p 8080:80 univaultoffice/documentserver

Запуск UNIVAULTOFFICE Document Server по HTTPS

    sudo docker run -i -t -d -p 443:443 \
    -v /app/univaultoffice/DocumentServer/data:/var/www/univaultoffice/Data  univaultoffice/documentserver

Доступ к приложению UNIVAULTOFFICE можно защитить с помощью SSL, чтобы предотвратить несанкционированный доступ. SSL‑сертификат, выданный центром сертификации (CA), подтверждает доверие через CA, а самоподписанный сертификат тоже может обеспечить доверие при условии, что каждый клиент выполнит дополнительные шаги для подтверждения подлинности сайта. Ниже приведены инструкции.

Для защиты через SSL нужны две вещи:

  • Private key (.key)
  • SSL certificate (.crt)

Создайте и установите следующие файлы:

    /app/univaultoffice/DocumentServer/data/certs/tls.key
    /app/univaultoffice/DocumentServer/data/certs/tls.crt

При использовании сертификатов от CA (например, Let's Encrypt) эти файлы предоставляются CA. При самоподписанных сертификатах их нужно сгенерировать самостоятельно.

Использование автоматически сгенерированных SSL‑сертификатов Let's Encrypt

    sudo docker run -i -t -d -p 80:80 -p 443:443 \
    -e LETS_ENCRYPT_DOMAIN=your_domain -e LETS_ENCRYPT_MAIL=your_mail  univaultoffice/documentserver

Чтобы автоматически получить и продлевать сертификаты Let's Encrypt, достаточно задать переменные LETS_ENCRYPT_DOMAIN и LETS_ENCRYPT_MAIL.

Генерация самоподписанных сертификатов

Генерация самоподписанных SSL‑сертификатов включает простой процесс из трёх шагов.

ШАГ 1: Создайте приватный ключ сервера

openssl genrsa -out tls.key 2048

ШАГ 2: Создайте запрос на сертификат (CSR)

openssl req -new -key tls.key -out tls.csr

ШАГ 3: Подпишите сертификат, используя приватный ключ и CSR

openssl x509 -req -days 365 -in tls.csr -signkey tls.key -out tls.crt

Вы получили SSL‑сертификат, действующий 365 дней.

Усиление безопасности сервера

В этом разделе приведены инструкции по усилению безопасности сервера. Для этого нужно сгенерировать более сильные параметры DHE.

openssl dhparam -out dhparam.pem 2048

Установка SSL-сертификатов

Из четырёх файлов выше нужно установить tls.key, tls.crt и dhparam.pem на сервер UNIVAULTOFFICE. Файл CSR не нужен, но обязательно сохраните его (если понадобится снова).

Путь по умолчанию, где приложение UNIVAULTOFFICE ищет сертификаты: /var/www/univaultoffice/Data/certs. Его можно изменить через параметры SSL_KEY_PATH, SSL_CERTIFICATE_PATH и SSL_DHPARAM_PATH.

/var/www/univaultoffice/Data/ — это путь к хранилищу данных, поэтому нужно создать папку certs внутри /app/univaultoffice/DocumentServer/data/ и скопировать туда файлы. Также в целях безопасности нужно ограничить доступ к tls.key, чтобы файл читался только владельцем.

mkdir -p /app/univaultoffice/DocumentServer/data/certs
cp tls.key /app/univaultoffice/DocumentServer/data/certs/
cp tls.crt /app/univaultoffice/DocumentServer/data/certs/
cp dhparam.pem /app/univaultoffice/DocumentServer/data/certs/
chmod 400 /app/univaultoffice/DocumentServer/data/certs/tls.key

Теперь до полной защиты приложения остаётся один шаг.

Доступные параметры конфигурации

Для параметра --env-file в docker run можно указать все переменные окружения сразу. Это избавит от необходимости писать длинную команду.

Ниже перечислены параметры, которые можно задавать через переменные окружения.

  • UNIVAULTOFFICE_HTTPS_HSTS_ENABLED: опция для отключения HSTS. Применяется только при использовании SSL. По умолчанию true.
  • UNIVAULTOFFICE_HTTPS_HSTS_MAXAGE: опция для настройки HSTS max-age в конфигурации nginx vHost. Применяется только при использовании SSL. По умолчанию 31536000.
  • SSL_CERTIFICATE_PATH: путь к SSL‑сертификату. По умолчанию /var/www/univaultoffice/Data/certs/tls.crt.
  • SSL_KEY_PATH: путь к приватному ключу SSL‑сертификата. По умолчанию /var/www/univaultoffice/Data/certs/tls.key.
  • SSL_DHPARAM_PATH: путь к параметрам Diffie‑Hellman. По умолчанию /var/www/univaultoffice/Data/certs/dhparam.pem.
  • SSL_VERIFY_CLIENT: включить проверку сертификатов клиентов с помощью файла CA_CERTIFICATES_PATH. По умолчанию false
  • NODE_EXTRA_CA_CERTS: NODE_EXTRA_CA_CERTS для расширения списка CA сертификатами. По умолчанию /var/www/univaultoffice/Data/certs/extra-ca-certs.pem.
  • DB_TYPE: тип базы данных. Поддерживаются postgres, mariadb, mysql, mssql или oracle. По умолчанию postgres.
  • DB_HOST: IP‑адрес или имя хоста, где работает сервер БД.
  • DB_PORT: порт сервера БД.
  • DB_NAME: имя базы данных. Должна существовать на момент запуска контейнера.
  • DB_USER: имя пользователя с правами суперпользователя для БД.
  • DB_PWD: пароль пользователя БД.
  • DB_SCHEMA: имя схемы БД (опционально).
    • PostgreSQL — схема для search_path, по умолчанию public.
    • MSSQL — схема для DEFAULT_SCHEMA, по умолчанию dbo.
  • AMQP_URI: AMQP URI для подключения к брокеру сообщений.
  • AMQP_TYPE: тип брокера сообщений. Поддерживаются rabbitmq или activemq. По умолчанию rabbitmq.
  • REDIS_SERVER_HOST: IP‑адрес или имя хоста, где работает Redis.
  • REDIS_SERVER_PORT: порт Redis.
  • REDIS_SERVER_USER: имя пользователя Redis. По умолчанию не задано.
  • REDIS_SERVER_PASS: пароль Redis. По умолчанию не задан.
  • REDIS_SERVER_DB: индекс БД Redis. По умолчанию 0.
  • NGINX_WORKER_PROCESSES: количество воркеров nginx.
  • NGINX_WORKER_CONNECTIONS: максимальное число одновременных соединений на воркер.
  • NGINX_ACCESS_LOG: включает или отключает логирование доступа. По умолчанию false.
  • SECURE_LINK_SECRET: секрет для директивы nginx secure_link_md5. По умолчанию random string.
  • JWT_ENABLED: включает проверку JSON Web Token в UNIVAULTOFFICE Document Server. По умолчанию true.
  • JWT_SECRET: секретный ключ для проверки JSON Web Token в запросах к UNIVAULTOFFICE Document Server. По умолчанию — случайное значение.
  • JWT_HEADER: http‑заголовок для передачи JSON Web Token. По умолчанию Authorization.
  • JWT_IN_BODY: включает проверку токена в теле запроса к UNIVAULTOFFICE Document Server. По умолчанию false.
  • WOPI_ENABLED: включает WOPI handlers. По умолчанию false.
  • ALLOW_META_IP_ADDRESS: разрешить или запретить подключение meta IP. По умолчанию false.
  • ALLOW_PRIVATE_IP_ADDRESS: разрешить или запретить подключение private IP. По умолчанию false.
  • USE_UNAUTHORIZED_STORAGE: true, если используется self‑signed сертификат для сервера хранения (например, Nextcloud). По умолчанию false
  • GENERATE_FONTS: если true, при каждом старте пересоздаёт список шрифтов и миниатюры. По умолчанию true
  • METRICS_ENABLED: включает StatsD для UNIVAULTOFFICE Document Server. По умолчанию false.
  • METRICS_HOST: хост прослушивания StatsD. По умолчанию localhost.
  • METRICS_PORT: порт StatsD. По умолчанию 8125.
  • METRICS_PREFIX: префикс метрик StatsD для backend‑сервисов. По умолчанию ds..
  • LETS_ENCRYPT_DOMAIN: домен для сертификата Let's Encrypt.
  • LETS_ENCRYPT_MAIL: email администратора домена для Let's Encrypt.
  • PLUGINS_ENABLED: включает плагины по умолчанию. По умолчанию true.

Установка UNIVAULTOFFICE Document Server с помощью Docker Compose

Вы также можете установить UNIVAULTOFFICE Document Server с помощью docker-compose.

Сначала нужно клонировать этот GitHub‑репозиторий:

git clone https://github.com/UNIVAULTOFFICE/Docker-DocumentServer

Затем перейдите в папку репозитория:

cd Docker-DocumentServer

После этого, если установлен docker-compose, выполните команду:

docker-compose up -d

Установка UNIVAULTOFFICE Document Server в составе UNIVAULTOFFICE Workspace

UNIVAULTOFFICE Document Server входит в состав UNIVAULTOFFICE Workspace, который также включает Community Server, Mail Server и Control Panel. Для установки выполните шаги:

ШАГ 1: Создайте сеть univaultoffice.

docker network create --driver bridge univaultoffice

Затем запускайте контейнеры с опцией docker run --net univaultoffice:

ШАГ 2: Установите MySQL.

Следуйте этим шагам для установки MySQL.

ШАГ 3: Сгенерируйте JWT Secret

JWT secret определяет секретный ключ для проверки JSON Web Token в запросах к UNIVAULTOFFICE Document Server. Вы можете задать его вручную или получить командой:

JWT_SECRET=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12);

ШАГ 4: Установите UNIVAULTOFFICE Document Server.

sudo docker run --net univaultoffice -i -t -d --restart=always --name univaultoffice-document-server \
 -e JWT_ENABLED=true \
 -e JWT_SECRET=${JWT_SECRET} \
 -e JWT_HEADER=AuthorizationJwt \
 -v /app/univaultoffice/DocumentServer/logs:/var/log/univaultoffice  \
 -v /app/univaultoffice/DocumentServer/data:/var/www/univaultoffice/Data  \
 -v /app/univaultoffice/DocumentServer/lib:/var/lib/univaultoffice \
 -v /app/univaultoffice/DocumentServer/db:/var/lib/postgresql \
 univaultoffice/documentserver

ШАГ 5: Установите UNIVAULTOFFICE Mail Server.

Для корректной работы mail server нужно указать hostname yourdomain.com.

sudo docker run --init --net univaultoffice --privileged -i -t -d --restart=always --name univaultoffice-mail-server -p 25:25 -p 143:143 -p 587:587 \
 -e MYSQL_SERVER=univaultoffice-mysql-server \
 -e MYSQL_SERVER_PORT=3306 \
 -e MYSQL_ROOT_USER=root \
 -e MYSQL_ROOT_PASSWD=my-secret-pw \
 -e MYSQL_SERVER_DB_NAME=univaultoffice_mailserver \
 -v /app/univaultoffice/MailServer/data:/var/vmail \
 -v /app/univaultoffice/MailServer/data/certs:/etc/pki/tls/mailserver \
 -v /app/univaultoffice/MailServer/logs:/var/log \
 -h yourdomain.com \
 univaultoffice/mailserver

Дополнительные параметры mail server доступны здесь.

Подробнее см. документацию UNIVAULTOFFICE Mail Server.

ШАГ 6: Установите UNIVAULTOFFICE Community Server

sudo docker run --net univaultoffice -i -t -d --privileged --restart=always --name univaultoffice-community-server -p 80:80 -p 443:443 -p 5222:5222 --cgroupns=host \
 -e MYSQL_SERVER_ROOT_PASSWORD=my-secret-pw \
 -e MYSQL_SERVER_DB_NAME=univaultoffice \
 -e MYSQL_SERVER_HOST=univaultoffice-mysql-server \
 -e MYSQL_SERVER_USER=univaultoffice_user \
 -e MYSQL_SERVER_PASS=univaultoffice_pass \
 
 -e DOCUMENT_SERVER_PORT_80_TCP_ADDR=univaultoffice-document-server \
 -e DOCUMENT_SERVER_JWT_ENABLED=true \
 -e DOCUMENT_SERVER_JWT_SECRET=${JWT_SECRET} \
 -e DOCUMENT_SERVER_JWT_HEADER=AuthorizationJwt \
 
 -e MAIL_SERVER_API_HOST=${MAIL_SERVER_IP} \
 -e MAIL_SERVER_DB_HOST=univaultoffice-mysql-server \
 -e MAIL_SERVER_DB_NAME=univaultoffice_mailserver \
 -e MAIL_SERVER_DB_PORT=3306 \
 -e MAIL_SERVER_DB_USER=root \
 -e MAIL_SERVER_DB_PASS=my-secret-pw \
 -e CONTROL_PANEL_PORT_80_TCP=80 \
 -e CONTROL_PANEL_PORT_80_TCP_ADDR=univaultoffice-control-panel \
 -v /app/univaultoffice/CommunityServer/data:/var/www/univaultoffice/Data \
 -v /app/univaultoffice/CommunityServer/logs:/var/log/univaultoffice \
 -v /app/univaultoffice/CommunityServer/letsencrypt:/etc/letsencrypt \
 -v /sys/fs/cgroup:/sys/fs/cgroup:rw \
 univaultoffice/communityserver

Где ${MAIL_SERVER_IP} — IP‑адрес UNIVAULTOFFICE Mail Server. Его можно получить командой:

MAIL_SERVER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' univaultoffice-mail-server)

Также можно использовать автоматический скрипт установки, чтобы развернуть UNIVAULTOFFICE Workspace сразу. Для корректной работы mail server нужно указать hostname yourdomain.com.

ШАГ 1: Скачайте Docker‑скрипт UNIVAULTOFFICE Workspace

wget https://download.univaultoffice.ru/install/workspace-install.sh

ШАГ 2: Установите UNIVAULTOFFICE Workspace командой:

workspace-install.sh -md yourdomain.com

Или используйте docker-compose. Сначала нужно клонировать этот GitHub‑репозиторий:

wget https://raw.githubusercontent.com/UNIVAULTOFFICE/Docker-CommunityServer/master/docker-compose.groups.yml
docker-compose up -d

Настройка IPv6 для UNIVAULTOFFICE Document Server

(Работает и поддерживается только на Linux‑хостах)

Docker по умолчанию не выдаёт контейнерам IPv6‑адреса. Эта функция пока экспериментальная.

Чтобы включить взаимодействие по IPv6, нужно включить поддержку в Docker. Для этого:

  • создайте файл /etc/docker/daemon.json со следующим содержимым:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:abc1::/64"
}
  • перезапустите Docker командой: systemctl restart docker

После этого все запущенные контейнеры получат IPv6‑адреса и интерфейс inet6.

Вы можете проверить мостовую сеть по умолчанию и увидеть поле EnableIPv6=true. Также будет добавлена новая IPv6‑подсеть.

Подробнее см. в официальной документации Docker

Проблемы

Проблемы Docker

Docker — относительно новый проект, который активно развивается сообществом. Поэтому рекомендуется использовать последнюю версию Docker: большинство проблем уже исправлены в новых релизах.

Известная проблема Docker с UNIVAULTOFFICE Document Server на rpm‑дистрибутивах: иногда процессы внутри контейнера не запускаются. Пользователям Fedora и RHEL/CentOS следует попробовать отключить SELinux командой setenforce 0. Если это решит проблему, можно либо оставить SELinux отключенным (не рекомендуется Red Hat), либо перейти на Ubuntu.

Проблемы использования Document Server

Из-за особенностей работы Document Server сохраняет документ только после того, как все пользователи закрыли документ. Чтобы избежать потери данных, при обновлении приложения, перезагрузке сервера и т. д. нужно принудительно отключать пользователей Document Server. Для этого выполните следующий скрипт на сервере, где установлен Document Server:

sudo docker exec <CONTAINER> documentserver-prepare4shutdown.sh

Обратите внимание: выполнение скрипта и отключение пользователей может занять длительное время (до 5 минут).

Информация о проекте

Официальный сайт: www.univaultoffice.ru

Репозиторий кода: github.com/UNIVAULTOFFICE/DocumentServer

Docker‑образ: github.com/UNIVAULTOFFICE/Docker-DocumentServer

Лицензия: GNU AGPL v3.0

Сравнение бесплатной версии и коммерческих сборок: https://github.com/UNIVAULTOFFICE/DocumentServer#univaultoffice-docs-editions

Обратная связь и поддержка

Если у вас возникли проблемы или вопросы по этому образу, посетите официальный форум: forum.univaultoffice.ru.

Вы также можете задавать вопросы по разработке UnivaultOffice на Stack Overflow и оставлять предложения на feedback.univaultoffice.ru.

Присоединяйтесь к нашему Discord‑сообществу: https://discord.gg/Hcgtf5n4uF

About

Docker-образ и инструкции для запуска UnivaultOffice Docs (Document Server).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published