Ниже — полная инструкция, основанная на всех нюансах, с которыми вы столкнулись при установке Docker в непривилегированном контейнере Incus и развёртывании ONLYOFFICE Workspace.

🛠️ Часть 1: Починка Docker в непривилегированном контейнере Incus

Все команды в этом разделе выполняются на хосте (Debian 13), если не указано иное.

1.1. Разрешение вложенности и проброс FUSE

# Разрешаем вложенные контейнеры (nesting)
incus config set ooffice security.nesting=true

# Пробрасываем устройство FUSE (нужно для fuse-overlayfs, но может пригодиться)
incus config set ooffice linux.kernel_modules=fuse
incus config device add ooffice fuse unix-char path=/dev/fuse

# Перезапускаем контейнер для применения настроек
incus restart ooffice

1.2. Увеличение лимитов keyring (исправляет disk quota exceeded)

Ошибка unable to join session keyring: disk quota exceeded возникает из-за того, что дефолтный лимит в 200 ключей слишком мал для работы Docker внутри контейнера .

# Временное увеличение (действует до перезагрузки)
sudo sysctl -w kernel.keys.maxkeys=20000
sudo sysctl -w kernel.keys.maxbytes=500000

# Постоянное увеличение
sudo tee /etc/sysctl.d/99-docker-keyring.conf <<'EOF'
kernel.keys.maxkeys = 20000
kernel.keys.maxbytes = 500000
EOF
sudo sysctl -p /etc/sysctl.d/99-docker-keyring.conf

1.3. Исправление доступа к net.ipv4.ip_unprivileged_port_start

Ошибка reopen fd 8: permission denied — это известный баг взаимодействия runc и AppArmor в LXC/Incus . Обходной путь — предустановить sysctl через Incus.

incus config set ooffice linux.sysctl.net.ipv4.ip_unprivileged_port_start=0
incus restart ooffice

1.4. Проверка работы Docker

incus exec ooffice -- bash
docker run hello-world

Если видите сообщение «Hello from Docker!» — Docker работает.


📦 Часть 2: Развёртывание ONLYOFFICE Workspace через Docker Compose

Все команды в этом разделе выполняются внутри контейнера ooffice.

2.1. Установка Docker Compose и клонирование репозитория

apt update && apt install -y docker-compose-plugin git

cd /opt
git clone https://github.com/ONLYOFFICE/Docker-CommunityServer
cd Docker-CommunityServer

2.2. Настройка docker-compose.workspace.yml

В официальной инструкции для Debian 11+ указано, что нужно раскомментировать строку cgroup . Однако, как показала ваша практика, mail-server не работает на новых ядрах (ошибка Segmentation Fault, код 139). Поэтому его нужно полностью исключить из конфига.

Откройте файл:

nano docker-compose.workspace.yml

Внесите следующие изменения:

  1. Удалите секцию onlyoffice-mail-server целиком.
  2. В секции onlyoffice-community-server:
    • Уберите onlyoffice-mail-server из depends_on.
    • Уберите все переменные MAIL_SERVER_* из environment.
    • Важно: Добавьте переменную MAIL_SERVER_API_HOST=127.0.0.1 (не пустую). Это необходимо, чтобы скрипт инициализации не падал с ошибкой MAIL_SERVER_API_HOST not correct.
  3. В секции onlyoffice-elasticsearch:
    • Удалите блок ulimits с memlock: -1. Это исправляет ошибку error setting rlimit type 8: operation not permitted .
    • Убедитесь, что в environment установлено bootstrap.memory_lock=false.

2.3. Увеличение vm.max_map_count для Elasticsearch

Выполните на хосте:

sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count = 262144" | sudo tee /etc/sysctl.d/99-elasticsearch.conf

2.4. Запуск Workspace

# Внутри контейнера ooffice
cd /opt/Docker-CommunityServer
docker compose -f docker-compose.workspace.yml up -d

Первый запуск может занять 5–15 минут — Community Server инициализирует базу данных . Дождитесь, пока все контейнеры перейдут в статус Up (без циклов перезапуска).


🌐 Часть 3: Настройка Nginx на хосте (обратный прокси)

3.1. Конфиг Nginx с HTTPS

Создайте файл /etc/nginx/sites-available/onlyoffice-workspace на хосте:

# Редирект HTTP -> HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name office.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

# HTTPS
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    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;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    add_header Strict-Transport-Security "max-age=31536000" always;

    client_max_body_size 512M;

    location / {
        # ЗАМЕНИТЕ на реальный IP вашего контейнера ooffice
        proxy_pass http://10.214.97.7:80;

        proxy_http_version 1.1;

        proxy_set_header Host $http_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;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Port $server_port;

        # WebSocket для совместного редактирования
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_connect_timeout 60s;
        proxy_send_timeout 600s;
        proxy_read_timeout 600s;

        # Подмена внутренних ссылок на внешний HTTPS
        proxy_set_header Accept-Encoding "";
        gzip off;
        sub_filter 'http://127.0.0.1' 'https://office.example.com';
        sub_filter 'http://localhost' 'https://office.example.com';
        sub_filter_once off;
        sub_filter_types text/html application/javascript application/json;
    }
}

3.2. Активация

sudo ln -s /etc/nginx/sites-available/onlyoffice-workspace /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

✅ Часть 4: Первичная настройка в веб-интерфейсе

  1. Откройте браузер и перейдите на https://office.example.com.
  2. Если видите страницу «We are working on it» — обновите её один раз (Ctrl+F5). Если не помогло, откройте в режиме инкогнито.
  3. Должна появиться страница «Welcome to Your ONLYOFFICE Portal» (/Wizard.aspx).
  4. Заполните поля:
    • Password / Confirm password: придумайте пароль для администратора (минимум 8 символов).
    • Your portal is registered from the following email: введите email (будет логином).
    • Language: выберите Russian.
    • Time Zone: выберите свой часовой пояс.
    • Поставьте галочку «By checking this box you accept the terms of the License Agreements» (обязательно).
  5. Нажмите Continue.
  6. После этого вы попадёте на страницу входа. Войдите с указанным email и паролем.

Готово — вы в личном кабинете ONLYOFFICE Workspace с возможностью создавать документы, таблицы и презентации.