Статьи → Сервера → Часть 7. Установка ONLYOFFICE и подключение к NextCloud
Сервера Актуальная

Часть 7. Установка ONLYOFFICE и подключение к NextCloud

Andrew ⚡ Администратор
(обновлено 23.07.2026)
936 v1.0

В этой статье мы установим ONLYOFFICE в docker на Intel NUC и на этом подойдем к завершению цикла статей «Домашнее облако на Astra Linux: от А до Я».

Рассматривал я три офиса:

  • ONLYOFFICE;
  • Collabora Online (CODE);
  • Nextcloud office.

Collabora Online (CODE)
Это движок LibreOffice, завернутый в веб-интерфейс.
Минусы: Интерфейс хоть и имеет ленточный режим, но все равно ощущается как LibreOffice, а не MS Office. Родной формат - ODF. При открытии DOCX/XLSX происходит конвертация, что сильнее может нагружать слабый процессор Intel NUC и может иногда сломать сложное форматирование.

Nextcloud Office (встроенное приложение)
Это не отдельный офис, а просто обертка, которая ставит Collabora прямо внутрь веб-сервера Nextcloud. Запуск тяжелого офиса внутри PHP/Nginx - плохая идея для Celeron N3700. Это создаст кашу в зависимостях, и при открытии документа Nextcloud может просто лечь вместе с офисом.

По этому я решил остановится на ONLYOFFICE.

ONLYOFFICE (Document Server Community Edition)
Это практически полная копия ленты MS Office. Те же вкладки, меню и логика расположения кнопок.
Использует OOXML (DOCX, XLSX, PPTX) как свои родные форматы. Документы Word не поедут при открытии, серверу не нужно тратить ресурсы процессора на их конвертацию. Бесплатная для дома. Ограничение в 20 одновременных подключений для семьи/личного использования вообще незаметно.

Почему я решил использовать ONLYOFFICE в Docker:

Celeron N3700 (TDP 6W) - отличный процессор для роутера, базы данных или Nextcloud. Но любой облачный офис - это очень тяжелая задача. При открытии или сохранении документа процессор будет улетать в 100% на несколько секунд. Это нормально.

Главное узкое горлышко - это 8 ГБ ОЗУ. Astra Linux + Nextcloud + PostgreSQL + Redis в простое съедает около 1.5 - 2.5 ГБ ОЗУ. Стандартный Docker образ ONLYOFFICE из коробки займет еще 1.5 - 2 ГБ ОЗУ.

Итого у нас останется около 4 ГБ на кэширование и открытие самих документов. Этого хватит для комфортной работы, но систему нужно немного подстраховать в виде swap, что мы уже и сделали при установке Astra Linux. Напомню, swap сделали в размере 4 ГБ.

Intel NUC и так работает 24/7. Если ONLYOFFICE локально упадет из-за нехватки памяти или конфликта пакетов, может пострадать основной nginx/php-fpm Nextcloud. В Docker контейнер изолирован. Если он съест всю память или упадет, Nextcloud продолжит работать. Мы просто перезапустим контейнер одной командой, не трогая сервер.


Установка Docker

Для начало, установим Docker и Compose на сервер Intel NUC с Nextcloud.

sudo apt install -y docker.io docker-compose-v2

Если вы хотите запускать docker не от рута, то добавьте пользователя в группу docker

sudo usermod -aG docker $USER

Создадим директорию в которой будем хранить docker compose файл.

mkdir -p Docker/ONLYOFFICE && cd Docker/ONLYOFFICE


Подготовка SSL-сертификатов (SAN)

Так как мы будем заходить в Nextcloud и ONLYOFFICE как из локальной сети (192.168.31.60), так и через WireGuard (10.0.0.2), наши самоподписанные сертификаты обязаны содержать оба этих IP-адреса в поле SAN (Subject Alternative Name). Иначе Docker-контейнер и браузер будут отклонять соединение.

Создаем конфиг с SAN:

cat > /tmp/openssl.cnf << 'EOF'
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req
[dn]
C = RU
ST = Moscow
L = Moscow
O = Home
CN = 192.168.31.60
[v3_req]
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.31.60
IP.2 = 127.0.0.1
IP.3 = 10.0.0.2
DNS.1 = localhost
EOF

Генерируем сертификат для ONLYOFFICE и Nextcloud:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/onlyoffice.key -out /etc/nginx/ssl/onlyoffice.crt -config /tmp/openssl.cnf -extensions v3_req

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nextcloud.key -out /etc/nginx/ssl/nextcloud.crt -config /tmp/openssl.cnf -extensions v3_req

К сертификатам вернемся чуть позже.


Настройка Nginx (Reverse Proxy)

Порт 80 и 443 у нас заняты. Поэтому ONLYOFFICE внутри контейнера будет слушать 8880, а Nginx будет проксировать на него HTTPS-трафик с порта 8883.

Создаем конфиг onlyoffice:

sudo nvim /etc/nginx/sites-available/onlyoffice

server {
    listen 8883 ssl http2;
    listen [::]:8883 ssl http2;
    server_name _;

    ssl_certificate /etc/nginx/ssl/onlyoffice.crt;
    ssl_certificate_key /etc/nginx/ssl/onlyoffice.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    access_log /var/log/nginx/onlyoffice_access.log;
    error_log /var/log/nginx/onlyoffice_error.log;

    location / {
        proxy_pass http://127.0.0.1:8880;
        proxy_http_version 1.1;
        
        # ВАЖНО: порт обязателен, иначе ONLYOFFICE будет редиректить на 443
        proxy_set_header Host $host:$server_port;
        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 $host:$server_port;

        # Динамические редиректы (вместо хардкода IP)
        proxy_redirect ~^http://127\.0\.0\.1:8880(/.*)$ https://$host:$server_port$1;
        proxy_redirect ~^http://127\.0\.0\.1(/.*)$ https://$host:$server_port$1;
        proxy_redirect ~^https://127\.0\.0\.1(/.*)$ https://$host:$server_port$1;

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

        proxy_connect_timeout 300;
        proxy_send_timeout 300;
        proxy_read_timeout 300;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}
Почему это важно: Мы используем переменные $host и $server_port в proxy_redirect. Это делает Nginx "умным": он автоматически подставит тот IP и порт, по которому пришел клиент (будь то 192.168.31.60 или 10.0.0.2), и нам не придется вручную править конфиг при смене сети.

Создаем симлинк конфига и активируем его в enabled:

sudo ln -s /etc/nginx/sites-available/onlyoffice /etc/nginx/sites-enabled/

Перезагружаем Nginx:

sudo nginx -t && sudo systemctl reload nginx


Установка и запуск ONLYOFFICE

Подготавливаем директорию для Docker и сертификатов. Контейнер должен доверять сертификату Nextcloud, чтобы иметь возможность скачивать документы для редактирования. По этому создаем директорию certs и копируем в нее ранее созданные сертификаты о котороых обещал вернуться чуть позже.

mkdir -p ~/Docker/ONLYOFFICE/certs
sudo cp /etc/nginx/ssl/nextcloud.crt ~/Docker/ONLYOFFICE/certs/
sudo cp /etc/nginx/ssl/onlyoffice.crt ~/Docker/ONLYOFFICE/certs/

Создаем и вставляем docker-compose.yml:

nvim docker-compose.yml

services:
  onlyoffice-document-server:
    image: onlyoffice/documentserver
    container_name: onlyoffice-document-server
    restart: always
    ports:
      - "8880:80"
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=ЗДЕСЬ_ОЧЕНЬ_СЛОЖНЫЙ_КЛЮЧ
      - JWT_HEADER=AuthorizationJwt
      - NODE_TLS_REJECT_UNAUTHORIZED=0
      - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/nextcloud.crt
    volumes:
      - ./data:/var/www/onlyoffice/Data
      - ./logs:/var/log/onlyoffice
      - ./lib:/var/lib/onlyoffice
      - ./cache:/var/lib/onlyoffice/documentserver/App_Data/cache/files
      - ./fonts:/usr/share/fonts/truetype/custom
      - ./certs:/usr/local/share/ca-certificates:ro
    extra_hosts:
      - "host.docker.internal:host-gateway"
    tmpfs:
      - /run:rw,noexec,nosuid,size=64m
      - /run/lock:rw,noexec,nosuid,size=64m

В этом конфиге Вам достаточно заменить только порт и придумать секретный ключ (абсолютно любой). Не буду описывать каждую строчку, все равно после прочтения вы ее 99% забудете, по этому опишу в крадце.

Ключ Значение Описание
onlyoffice-document-server все перечисленное ниже любое название/можно заменить на ваше
image onlyoffice/documentserver образ (ключ) и его название (значение)
container_name onlyoffice-document-server название контейнера/можно заменить на ваше
restart always всегда перезапускать контейнер если упадет
ports 8880:80 ПОРТ_ХОСТ:ПОРТ_КОНТЕЙНЕРА (при обращении на 8880 порт, мы будем попадать на 80 порт внутри контейнера). Меняем на свое если порты отличаются от моих.
environment JWT_ENABLED=true включаем jwt токен
  JWT_SECRET=ВСТАВЛЯЕМ_СВОЕ здесь обязательно меняем на свое значение (придумываем любое)
  JWT_HEADER=AuthorizationJwt указываем метод jwt токена.
  NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/nextcloud.crt здесь указываем путь до корневого сертификата внутри контейнера. (меняем если у вас другой путь или название сертификата). Во всех остальных случая ничего тут не меняем.
volumes ./data:/vaw/www/onlyoffice/Data в разделе volumes мы указываем мост между директорией Data на нашем хосте и внутри контейнера. Это нужно для сохранения настроек контейнера, если его удалить и пересоздать, то все конфиги и настройки он заберет из таких мостов и не нужно настраивать заново контейнер. Ничего тут не меняем.
extra_hosts host.docker.internal:host-gateway тоже не трогаем и не меняем.
tmpfs /run:rw,noexec,nosuid,size=64m тоже не трогаем и не меняем.

Запускаем:

sudo docker compose up -d

Ждем 1-2 минуты (при первом запуске инициализируется база) и проверяем healthcheck:

curl -k https://192.168.31.60:8883/healthcheck (Должно вернуть true).

Добавляем сертификат ONLYOFFICE в доверенные на самом хосте (чтобы PHP-FPM Nextcloud доверял ему при внутренних запросах):

sudo cp /etc/nginx/ssl/onlyoffice.crt /usr/local/share/ca-certificates/
sudo cp /etc/nginx/ssl/nextcloud.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
sudo systemctl restart php8.2-fpm

Настройка Nextcloud и «Секретные» внутренние пути

Открываем Nextcloud → Администрирование → ONLYOFFICE.
Здесь кроется самая частая ошибка при настройке. Заполняем поля строго так, как указано ниже:

Поле Значение
Адрес ONLYOFFICE Docs https://192.168.31.60:8883/
(Это адрес для браузера. Его мы будем менять скриптом)
Секретный ключ ВАШ_КЛЮЧ
(ключ - значение (JWT_SECRET=) который указывали в docker-compose)
Заголовок авторизации AuthorizationJwt
Адрес ONLYOFFICE Docs для внутренних запросов сервера http://127.0.0.1:8880/
(Nextcloud на хосте стучится в Docker напрямую по HTTP)
Адрес сервера для внутренних запросов ONLYOFFICE Docs https://192.168.31.60:8443/
(Docker скачивает файл с Nextcloud по локальному IP хоста)
Почему в последнем пункте именно локальный IP, а не 10.0.0.2 или 127.0.0.1?
Контейнер Docker находится в изолированной сети. Если он постучится на 127.0.0.1, он попадет сам в себя, а не на хост. Если постучится на 10.0.0.2, то при работе из дома этот адрес будет недоступен. А вот локальный IP хоста (192.168.31.60) для контейнера доступен всегда, и SSL-сертификат для него идеально подходит! Это делает работу редактора независимой от местоположения.

Скрипт переключения и нюанс с браузером

Так как в поле «Адрес ONLYOFFICE Docs» Nextcloud отдает URL браузеру, браузер должен иметь возможность достучаться до этого адреса. Когда мы дома - это 192.168.31.60. Когда мы в отъезде через WireGuard - это 10.0.0.2.

Чтобы не лазить каждый раз в админку, создадим скрипт на Intel NUC ~/switch-onlyoffice.sh:

#!/bin/bash
set -e

HOME_URL="https://192.168.31.60:8883/"
WG_URL="https://10.0.0.2:8883/"

if [ "$1" == "home" ]; then
    TARGET_URL=$HOME_URL
    echo "Переключаю ONLYOFFICE на домашнюю сеть..."
elif [ "$1" == "wireguard" ]; then
    TARGET_URL=$WG_URL
    echo "Переключаю ONLYOFFICE на WireGuard..."
else
    echo "Использование: $0 [home|wireguard]"
    exit 1
fi

# Меняем ТОЛЬКО адрес, который отдается в браузер пользователя
sudo -u www-data php /var/www/nextcloud/occ config:app:set onlyoffice DocumentServerUrl --value="$TARGET_URL"

# Сбрасываем кэш Nextcloud, чтобы настройки подхватились мгновенно
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair --include-expensive
sudo systemctl restart php8.2-fpm

echo "Готово! Адрес редактора для браузера: $TARGET_URL"
Незабываем заменить IP адреса на свои!

Даем права на запуск: chmod +x ~/switch-onlyoffice.sh.
Теперь при отъезде достаточно зайти по SSH и выполнить ~/switch-onlyoffice.sh wireguard, а по возвращению домой - ~/switch-onlyoffice.sh home.

Важнейший нюанс про браузер (Обязательно к прочтению)
Когда вы подключаетесь через WireGuard и заходите в Nextcloud, он открывается нормально (вы же приняли сертификат). Но когда вы кликаете на документ, Nextcloud пытается загрузить редактор через скрытый iframe с адреса https://10.0.0.2:8883/.
Из-за того, что сертификат самоподписанный, браузер молча заблокирует загрузку iframe (политика безопасности), и вы увидите бесконечную загрузку.

Как это лечить: Перед тем как начать работать с документами через WireGuard, просто откройте в новой вкладке браузера адрес https://10.0.0.2:8883/healthcheck, нажмите «Дополнительно» → «Перейти к узлу (небезопасно)». Как только браузер «запомнит», что вы доверяете сертификату для IP 10.0.0.2, iframe начнет грузиться, и документы будут открываться мгновенно!

Полезные команды (шпаргалка)

# Логи ONLYOFFICE в реальном времени
sudo docker logs -f --tail 50 onlyoffice-document-server

# Логи Nginx для ONLYOFFICE
sudo tail -f /var/log/nginx/onlyoffice_error.log

# Перезапустить контейнер (если съел всю память)
cd ~/Docker/ONLYOFFICE && sudo docker compose restart

# Проверка скачивания документа контейнером (внутри Docker)
sudo docker exec -it onlyoffice-document-server curl -k -I https://192.168.31.60:8443/
(Должен вернуться HTTP/1.1 200 OK или 302)

0
Andrew

DevOps Engineer

1 50 статей
Комментарии (16)
Войдите, чтобы оставить комментарий
g.zasim 📖 Читатель 26.07.2026 12:33
Огромная благодарность. очень полезно. осталось еще дописать, как создать свою локальную репу на этом же сервере. и как все подружить с nextcloud..
Andrew ⚡ Администратор 27.07.2026 20:57
> Огромная благодарность.
Приятно, что мои наработки кому-то могли пригодиться)
> осталось еще дописать, как создать свою локальную репу на этом же сервере
В планах была мысль сделать статью про то, как поднять свой репозиторий. Но смысла в локальной репе да и еще на intel NUC - нету. Имеет смысл когда есть небольшой парк машин хотя-бы не меньше 10 шт или сеть изолированная, без доступа в интернет, тогда да, имеет смысл. Я как-то делал локальную репу под астру на raspberry pi 3b+ на ОС raspbian, брал с собой в командировки как локальную репу. Ни разу не пригодилась)
g.zasim 📖 Читатель 28.07.2026 12:12
> В планах была мысль сделать статью про то, как поднять свой репозиторий. Но смысла в локальной репе да и еще на intel NUC - нету. Имеет смысл когда есть небольшой парк машин хотя-бы не меньше 10 шт или сеть изолированная, без доступа в интернет, тогда да, имеет смысл. Я как-то делал локальную репу под астру на raspberry pi 3b+ на ОС raspbian, брал с собой в командировки как локальную репу. Ни разу не пригодилась)>
ну тут моя личная заинтересованность как школьного инженера на подработке. никогда не было, а тут свалились от государство радость в виде сервера на двух Ксеонах и 64ГБ ОЗУ. но УПСов нет конечно и резервирование не ясно как сделать. хотел локальную репу easyastra, ну и репу Астра 1.8. все в одном флаконе. лучше конечно так не делать. может и виртуализацию зафигачить. но и облако такое поднять, нужно оно школе ХЗ, но попробовать стоит
Andrew ⚡ Администратор 28.07.2026 21:20
> двух Ксеонах и 64ГБ ОЗУ.
Ого, железки неплохие для школы. Я бы посоветовал в таком случаи поставить Astra Linux 1.8 без графики, а на ней поднять Proxmox виртуализацию (бесплатный аналог vmware), там же можно настроить бэкапы, докеры итд. Не вижу смысла на школу делать свой репозиторий, но если очень хочется, то можно использовать Apt-cacher. Отличная замена своего репозитория будет. Если proxmox сложен в освоении, то можно накатить астру с графикой и на ней установить virtualbox или еще лучше Qemu/KVM. Проще говоря, я бы нарезал такой мощный сервер на микросервисы и сервера под разные задачи. Просто из личного опыта много раз видел, когда 32 ядра и 128 гб использовали чисто под сервер 1с или сервер репозитория, а потом просили еще железки, так как им негде развернуть было новый сервис. Так же Nextcloud отлично бы вписался в школьную инфраструктуру или же шара на samba. (Чуть позже будет статья про то, как развернуть LFS на samba с доменными разграничениями прав).
g.zasim 📖 Читатель 29.07.2026 08:06
> Проще говоря, я бы нарезал такой мощный сервер на микросервисы и сервера под разные задачи. Просто из личного опыта много раз видел, когда 32 ядра и 128 гб использовали чисто под сервер 1с или сервер репозитория, а потом просили еще железки, так как им негде развернуть было новый сервис. Так же Nextcloud отлично бы вписался в школьную инфраструктуру или же шара на samba. (Чуть позже будет статья про то, как развернуть LFS на samba с доменными разграничениями прав).>
ну вот Самба сервера нет, есть файловый сервер на Винде 2003. что было лет 10 назад на то и поставил )))), а на самбу надо б перевести и Облако сделать. но Домена нет. не сильно нужен он..
Andrew ⚡ Администратор 29.07.2026 09:14
> ну вот Самба сервера нет
так он легко поднимается на астре)
> файловый сервер на Винде 2003
жесть))
> Домена нет
Его не сложно поднять, особенно в школе я думаю это будет уместно от компрометации и утечки данных. Так же можно уже нарезать права разграничения.
g.zasim 📖 Читатель 02.08.2026 17:57
Добрый праздничый вечер. но там и места хватает и мощности. вариант хороший.. а установка Docker и ssl сертификатов только из-за того, что будет подключение из-вне?
Andrew ⚡ Администратор 02.08.2026 22:20
> Добрый праздничый вечер.
Добрый)

> установка Docker и ssl сертификатов только из-за того, что будет подключение из-вне?
Нет, установка Onlyoffice в Docker, чтобы не ставить кучу пакетов для работы onlyoffice, в том числе настраивать тот же nginx, который итак задействован параллельно (в моем случае), а так же нужна база данных postgresql и rabbit сервер. В общем можно все поставить и настроить, но гораздо проще и удобней в докере собрать, что я и сделал.
ssl обязателен для работы nextcloud с onlyoffice.
g.zasim 📖 Читатель 06.08.2026 15:43
первые ошибки словил: Error while trying to create admin account: An exception occurred in the driver: SQLSTATE[HY000] [1045] Access denied for user 'grigory'@'localhost' (using password: YES) как исправить? переустановка?
Andrew ⚡ Администратор 06.08.2026 20:17
> первые ошибки словил: Error while trying to create admin account: An exception occurred in the driver: SQLSTATE[HY000] [1045] Access denied for user 'grigory'@'localhost' (using password: YES) как исправить? переустановка?
Зачем? Ошибка же "Отказано в доступе". На каком это этапе?
g.zasim 📖 Читатель 07.08.2026 06:11
> Зачем? Ошибка же "Отказано в доступе". На каком это этапе?>
на первой попытке зайти в Облако
Andrew ⚡ Администратор 07.08.2026 09:43
> на первой попытке зайти в Облако
Тогда получается вы остановились на **3** части цикла? Если так, то лучше комментарии писать там, если кто столкнется с похожей проблемой, то ответы в комментариях под статьей смогут помочь.
Что касаемо ошибки, написано не удалось создать аккаунт администратора. Отказано в доступе для пользователя `'grogory'@'localhost'`.
Значит у пользователя который вы указали для доступа к базе данных, нет прав на базу. Еще раз внимательно посмотрите команду которая была в статье.
`sudo mysql <<'EOF'
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'ВАШ_ЛОГИН'@'localhost' IDENTIFIED BY 'ВАШ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'ВАШ_ЛОГИН'@'localhost';
FLUSH PRIVILEGES;
\q
EOF`
В ней база данных называет **nextcloud**, потом создается пользователь `CREATE USER 'тут ваш логин' и пароль`. Далее `GRANT ALL PRIVILEGES ON nextcloud` - то есть дать полные привелегии для базы данных **nextclod** для учетной записи `'ваш_логин'`. Либо вы здесь забыли поменять либо изменили название базы данных на свой, а в привилегиях забыли.
Что делать сейчас: зайти в базу данных **mariadb** (*вы же по статье делали?*), а потом выполнить `GRANT ALL PRIVILEGES ON nextcloud.* TO 'grigory'@'localhost';
FLUSH PRIVILEGES;`
Если меняли название базы данных с `nextcloud`, то после **ON** вписываем свое название.
g.zasim 📖 Читатель 07.08.2026 16:37
sudo mysql <<'EOF'
> CREATE USER 'grigory'@'localhost' IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON nextcloud. TO 'grigory'@'localhost';
> FLUSH PRIVILEGES;
> \q
EOF
--------------
GRANT ALL PRIVILEGES ON nextcloud. TO 'grigory'@'localhost'
--------------

ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TO 'grigory'@'localhost'' at line 1
Andrew ⚡ Администратор 07.08.2026 18:32
а где `;` в конце? **Это обязательное требование синтаксиса. **
g.zasim 📖 Читатель 08.08.2026 16:09
> а где ; в конце? Это обязательное требование синтаксиса. >
так вот же стоят. копирую же команды то. перепроверяю еще раз.
sudo mysql <<'EOF'
GRANT ALL PRIVILEGES ON nextcloud. TO 'grigory'@'localhost';
FLUSH PRIVILEGES;
\q
EOF
--------------
GRANT ALL PRIVILEGES ON nextcloud. TO 'grigory'@'localhost'
--------------

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TO 'grigory'@'localhost'' at line 1

mysql --version
mysql Ver 15.1 Distrib 10.11.13-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper

нашлась ошибка..
надо было сделать как в доке написано
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
GRANT ALL PRIVILEGES on nextcloud.* to 'username'@'localhost'; а у вас не хъватало вот этой звездочки
Andrew ⚡ Администратор 09.08.2026 22:51
> а у вас не хъватало вот этой звездочки
Спасибо, перепроверю чуть позже.