MAATRIX / Блог / Как установить и настроить OnlyOffice на VPS

Как установить и настроить OnlyOffice на VPS

MAATRIX

Держать документы в Google Docs или Microsoft 365 удобно ровно до тех пор, пока не встаёт вопрос, где физически лежат файлы и кто ещё имеет к ним доступ. OnlyOffice Document Server снимает эту проблему: полноценный редактор Word/Excel/PowerPoint-совместимых форматов работает прямо в браузере, а данные не покидают ваш сервер. Ниже — рабочая установка на VPS через Docker, с HTTPS, защитой JWT-токеном и интеграцией в Nextcloud.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое OnlyOffice Document Server и зачем он на своём VPS

OnlyOffice поставляется в двух ипостасях. Community-редакция — открытый сервер редактирования документов (Document Server), который сам по себе не хранит файлы и не имеет пользовательского интерфейса «файлового менеджера» — это движок для рендеринга и совместного редактирования .docx/.xlsx/.pptx прямо в браузере. Второй вариант — OnlyOffice Workspace/DocSpace, уже готовая платформа с почтой, CRM и файловым хранилищем.

Для большинства задач на своём VPS интересен именно Document Server: его подключают к Nextcloud, ownCloud, Seafile, самописным CMS или к вашему SaaS-продукту через REST API и получают редактирование документов без утечки данных на сторонние облака. Это особенно актуально, если вы уже используете Nextcloud на VPS как замену Google Drive и хотите добавить туда полноценный офисный пакет вместо просмотра «только для чтения».

Важный нюанс: Document Server — прожорливая по CPU и памяти штука, особенно при конвертации файлов и одновременном редактировании несколькими людьми. Это не легковесный сервис, который проще запустить на минимальном тарифе «для теста» — под ним нужен нормальный VPS.

Требования к серверу и подготовка

Официально рекомендуемый минимум — 2 vCPU и 4 ГБ RAM для небольшой команды (до 20 одновременных документов). На практике при активной совместной работе и частой конвертации PDF/DOCX стоит закладывать 4 vCPU и 8 ГБ RAM — иначе конвертация файлов будет заметно тормозить интерфейс редактора для всех пользователей одновременно.

Понадобится:

  • VPS с Ubuntu 24.04 или Debian 12;
  • установленный Docker и Docker Compose (если ещё не настроили — см. пошаговую установку Docker с нуля);
  • доменное имя, направленное на IP сервера (для валидного SSL-сертификата — без него совместное редактирование в некоторых браузерах работает нестабильно из-за требований к mixed content);
  • открытые порты 80 и 443.

Проверьте ресурсы и обновите систему перед установкой:

free -h
df -h
sudo apt update && sudo apt upgrade -y

Если Docker ещё не стоит:

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
docker --version
docker compose version

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Document Server через Docker Compose

Официальный образ onlyoffice/documentserver — самый предсказуемый путь установки, он уже содержит все зависимости (RabbitMQ, PostgreSQL, Redis можно оставить встроенными для небольшой нагрузки или вынести отдельно для продакшена).

Создайте рабочую директорию и файл конфигурации:

mkdir -p ~/onlyoffice/{data,logs,fonts}
cd ~/onlyoffice

Минимальный docker-compose.yml со встроенными зависимостями (подходит для команды до 15-20 человек):

services:
  onlyoffice-documentserver:
    image: onlyoffice/documentserver:8.2
    container_name: onlyoffice-ds
    restart: always
    ports:
      - "127.0.0.1:8080:80"
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=${JWT_SECRET}
      - JWT_HEADER=Authorization
    volumes:
      - ./data:/var/www/onlyoffice/Data
      - ./logs:/var/log/onlyoffice
      - ./fonts:/usr/share/fonts/truetype/custom
    shm_size: "1gb"

Порт сознательно проброшен только на 127.0.0.1 — снаружи сервис будет доступен исключительно через Nginx с SSL, напрямую по HTTP наружу его открывать не стоит.

Сгенерируйте случайный JWT-секрет и сохраните его в .env рядом с compose-файлом:

echo "JWT_SECRET=$(openssl rand -hex 32)" > .env

Запуск:

docker compose up -d
docker compose logs -f onlyoffice-documentserver

Первый старт занимает несколько минут — контейнер разворачивает шрифты и генерирует внутренние сертификаты. Готовность проверяется так:

docker exec onlyoffice-ds supervisorctl status

Все процессы (ds:docservice, ds:converter, ds:metrics, ds:example) должны быть в статусе RUNNING. Если что-то падает в FATAL, почти всегда причина — нехватка памяти: смотрите dmesg | grep -i oom на предмет OOM Killer.

Nginx как reverse proxy и SSL

Наружу сервис отдаём через Nginx с Let's Encrypt. Если Nginx ещё не установлен на сервере, воспользуйтесь материалом про настройку Nginx как reverse proxy на VPS — здесь только конфиг под конкретно OnlyOffice.

server {
    listen 80;
    server_name office.example.com;
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name office.example.com;

    ssl_certificate /etc/letsencrypt/live/office.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/office.example.com/privkey.pem;

    client_max_body_size 100m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # обязательно для WebSocket — совместное редактирование идёт через него
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 3600s;
    }
}

Ключевой момент, который чаще всего пропускают, — заголовки Upgrade/Connection для WebSocket. Без них статус документа "сохраняется" будет висеть бесконечно, а совместное редактирование в реальном времени просто не заработает, хотя сам редактор откроется нормально.

Сертификат получаем стандартно через certbot (подробный разбор — в статье про Let's Encrypt SSL на VPS):

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d office.example.com

После выпуска сертификата проверьте, что сервер отвечает:

curl -I https://office.example.com/healthcheck

Ответ true в теле означает, что Document Server жив и доступен снаружи.

Интеграция с Nextcloud и другими системами

Самый частый сценарий — подключить OnlyOffice к уже работающему Nextcloud, чтобы редактировать документы прямо из файлового хранилища. Порядок действий:

  1. В Nextcloud зайдите в Приложения и установите официальное приложение ONLYOFFICE.
  2. В Настройки → Администрирование → ONLYOFFICE укажите адрес вашего Document Server: https://office.example.com/.
  3. В поле Секретный ключ введите тот же JWT_SECRET, что задали в .env OnlyOffice — без совпадения ключей интеграция откажет с ошибкой подписи токена.
  4. Сохраните настройки — Nextcloud сделает тестовый запрос и покажет статус подключения.

Если оба сервиса стоят на одном VPS в разных Docker-сетях, для внутреннего запроса из контейнера Nextcloud проще подключить их к общей Docker-сети, а не гонять трафик наружу и обратно через публичный домен:

docker network create onlyoffice-net
docker network connect onlyoffice-net onlyoffice-ds
docker network connect onlyoffice-net nextcloud-app

Тогда внутренним адресом Document Server для Nextcloud станет http://onlyoffice-ds/, а публичный домен остаётся нужен только для прямых ссылок на редактирование из письма или чата.

Помимо Nextcloud, тот же Document Server через REST API можно подключить к ownCloud, Seafile, Moodle, кастомным CMS на PHP/Node.js — протокол одинаковый (JWT + Document Editing API), меняется только клиентский коннектор.

Безопасность, доступ и ограничение нагрузки

Три вещи, которые стоит настроить сразу, а не после инцидента:

JWT обязателен. Без JWT_ENABLED=true любой, кто знает URL Document Server, может подсунуть в API произвольный документ по внешней ссылке и получить его конвертацию — это открытая точка для SSRF-подобных злоупотреблений. Проверить, что защита реально включена, можно так:

curl -X POST https://office.example.com/ConvertService.ashx \
  -H "Content-Type: application/json" \
  -d '{"async":false,"filetype":"docx","outputtype":"pdf","url":"https://example.com/test.docx"}'

Без корректного JWT в заголовке Authorization должен вернуться отказ, а не результат конвертации.

Файрвол. Порты 80/443 открыты наружу, порт 8080 (внутренний, на который смотрит Nginx) должен слушать только 127.0.0.1 — как и сделано в compose-файле выше. Дополнительно ограничьте SSH и лишние порты через UFW:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Лимиты на конвертацию. Document Server по умолчанию не ограничивает число одновременных конвертаций жёстко, но при недостатке памяти процесс ds:converter начинает падать под нагрузкой. Если сервис используется активно, задайте лимит на размер файла на стороне Nginx (client_max_body_size, уже указан в конфиге) и следите за docker stats onlyoffice-ds в первую неделю — так вы увидите реальный профиль потребления памяти под своей нагрузкой, а не ориентировочные цифры из документации.

Резервное копирование и обновление

Все пользовательские настройки и кэш живут в примонтированной директории ~/onlyoffice/data — именно её нужно бэкапить регулярно. Сами документы при интеграции с Nextcloud физически хранятся в Nextcloud, а не в Document Server, так что двойного бэкапа файлов делать не придётся — но конфигурацию редактора всё равно стоит сохранять отдельно.

Простой скрипт для cron:

#!/bin/bash
BACKUP_DIR="/backup/onlyoffice"
DATE=$(date +%Y-%m-%d)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/onlyoffice-data-$DATE.tar.gz" -C ~/onlyoffice data
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +14 -delete

Для обновления версии образа — стандартный для Docker путь: смотрите на изменения между мажорными версиями в release notes перед апдейтом (между версиями 7.x и 8.x менялась схема части внутренних API), делайте бэкап данных, затем:

docker compose pull
docker compose up -d
docker exec onlyoffice-ds supervisorctl status

Если после обновления совместное редактирование перестало открываться — почти всегда дело в закэшированной в браузере старой версии JS-клиента редактора. Жёсткая перезагрузка страницы (Ctrl+Shift+R) обычно решает проблему до того, как вы начнёте разбирать логи контейнера.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли запустить OnlyOffice на минимальном тарифе VPS с 1-2 ГБ RAM?

Технически контейнер запустится, но конвертация документов будет либо падать по нехватке памяти, либо занимать заметно больше времени, чем ожидает пользователь при клике «сохранить». Для стабильной работы даже одного-двух человек закладывайте от 4 ГБ RAM.

Нужен ли отдельный сервер под Document Server, или можно на одной машине с Nextcloud?

На одной машине можно, если ресурсов достаточно с запасом (Nextcloud + PostgreSQL + OnlyOffice суммарно тянут заметно больше, чем каждый сервис по отдельности) — на практике комфортно чувствует себя связка на VPS от 4 vCPU / 8 ГБ RAM.

Чем OnlyOffice отличается от Collabora Office для интеграции с Nextcloud?

Оба — self-hosted редакторы с похожей идеей, но разный движок рендеринга и разная степень совместимости с форматами Microsoft Office: OnlyOffice исторически точнее воспроизводит сложное форматирование .docx/.xlsx, Collabora ближе к LibreOffice по поведению. Выбор чаще определяется тем, какой из редакторов правильнее показывает конкретные проблемные документы вашей команды.

Обязательно ли делать HTTPS, или можно оставить HTTP для внутреннего использования?

Современные браузеры блокируют часть функциональности редактора (буфер обмена, некоторые API совместного редактирования) на страницах без HTTPS даже во внутренней сети. Практически HTTPS стоит считать обязательным, а не опциональным шагом.

Что делать, если после установки редактор открывается, но документ не сохраняется?

В 90% случаев причина — не настроенный проброс WebSocket-заголовков в Nginx (Upgrade/Connection) или рассинхронизация JWT_SECRET между Document Server и клиентским приложением. Проверьте оба пункта в первую очередь, прежде чем копать глубже в логи ds:docservice.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →