Вы здесь

Установка и настройка NextCloud и OnlyOffice

nextcloud.jpg

В этой статье я расскажу как установить сервис облачного хранения файлов NextCloud и прикрутить к нему редактор документов OnlyOffice, что позволит пользователям прямо в браузере редактировать docx, xmlx прочие офисные форматы.

Для работы данной связки я буду использовать Docker, у нас будет 3 отдельных контейнера:

  • NextCloud
  • база данных MySQL
  • OnlyOffice

Примерная последовательность действий:

  1. Установка Docker
  2. Подготовка каталогов файловой системы, где будут храниться пользовательский файлы, БД MySQL, конфиги NextCloud и OnlyOffice, кэш-файлы и файлы сессий
  3. Составления yml - файла для удобной установки с помощью docker compose
  4. Установка и запуск всех компонентов
  5. Настройка связности NextCloud и OnlyOffice

Про установку Docker я уже писал, поэтому читайте здесь данный шаг я описывать не буду, и начну сразу с yml-файла.

Подготовка каталогов файловой системы

Создаем пользователя, от которого будет работать NextCloud - в моем случае это пользователь admin с uid 1000, без возможности запускать shell:

  1. adduser admin -u 1000 -shell /sbin/nologin

UID и GID пользователя admin впоследствии будут указаны в yml-файле.

Создаем каталоги - в моем случае все, относящееся к работе NextCloud будет "пробрасываться" из контейнера на хост систему будет храниться в каталоге /mnt/cloud. Затем в этом каталоге создаем следующие директории:
nextcloud
-- data
-- config
-- apps
-- themes
-- sessions

Для БД MySQL:
db

Для OnlyOffice
onlyoffice - права 777
-- cache
-- data
-- log

На каталог cache права выставляем 777, чтобы контейнер OnlyOffice мог записывать в него данные, иначе работать не будет.

Для чего нужна проброска cache?

При открытии документа для онлайн-редактирования в папке cache создается каталог с временными файлами, и если в момент, когда кто-то редактирует документ онлайн, вы сделаете рестарт контейнера OnlyOffice, и при этом cache НЕ будет проброшен на хост-систему - соответственно внутри контейнера cache очистится, а после рестарта контейнера пользователь не сможет открыть свой документ, и будет получать ошибку. Если же cache проброшен, то при внеплановом рестарте контейнера с OnlyOffice кэш не будет затерт, и после рестарта у пользователей ошибок не будт.

Владельцем каталога /mnt/cloud со всеми подкаталогами рекурсивно делаем пользователя admin и группу admin:

  1. chown -R admin:admin /mnt/cloud

При пробросе каталогов их контейнера в хост-систему, все нужные подкаталоги, в случае их отсутствия, будут созданы автоматически. Для кэш

Составление yml - файла

Я использую сборку NextCloud от Wondrefall - в ней уже настроено веб-окружение (php-fpm + nginx), и поэтому не нужно отдельным контейнером запускать веб - сервер. В следующей статье я рассмотрю установку NextCloud из официального контейнера, с отдельным запуском компонентов веб-сервера.
Пробрасываем 8888 порт контейнера NextCloud на 80 порт хост-системы (строка 31).

Базу данных будем использовать MySql, из официального образа. Название базы, логины и пароли замените на свои. На хост-систему порты не пробрасываем, контейнер с облаком будет напрямую обращаться к контейнеру с БД.

И, наконец, третий контейнер - OnlyOffice, также из официального образа разработчиков. Пробрасываем 80 порт контейнера на 1500 порт хост-системы (строка 55).

YML-файл с комментариями:

  1. nextcloud:
  2. container_name: nextcloud
  3. image: wonderfall/nextcloud
  4. restart: always
  5. links:
  6. - nextcloud-db:nextcloud-db # If using MySQL
  7. environment:
  8. - UID=1000 # UID, который мы задавали вручную при создании пользователя в системе.
  9. - GID=1000 # GID пользователя (как правило, совпадает с группой).
  10. - UPLOAD_MAX_SIZE=10G # максимальный размер загружаемого файла
  11. - APC_SHM_SIZE=128M
  12. - OPCACHE_MEM_SIZE=128
  13. - CRON_PERIOD=15m
  14. - TZ=Asia/Yekaterinburg
  15. - ADMIN_USER=admin # Don't set to configure through browser
  16. - ADMIN_PASSWORD=admin # Don't set to configure through browser
  17. - DOMAIN=perm-nextcloud-01 # Домен, на котором будет работать NextCloud
  18. - DB_TYPE=mysql
  19. - DB_NAME=nextcloud
  20. - DB_USER=nextcloud
  21. - DB_PASSWORD=mysql_user_password
  22. - DB_HOST=nextcloud-db # имя контейнера с БД
  23. volumes:
  24. - /mnt/cloud/nextcloud/data:/data # тут будут храниться загруженные пользователями данные
  25. - /mnt/cloud/nextcloud/config:/config # основной конфигурацйонный файл NextCloud
  26. - /mnt/cloud/nextcloud/apps:/apps2
  27. - /mnt/cloud/netxcloud/themes:/nextcloud/themes
  28. - /mnt/cloud/nextcloud/session:/php/session
  29.  
  30. ports:
  31. - "80:8888"
  32. # Контейнер с базой данных MySQL
  33. nextcloud-db:
  34. image: mariadb
  35. restart: always
  36. volumes:
  37. - /mnt/cloud/db:/var/lib/mysql
  38. environment:
  39. - MYSQL_ROOT_PASSWORD=mysql_root_password
  40. - MYSQL_DATABASE=nextcloud
  41. - MYSQL_USER=nextcloud
  42. - MYSQL_PASSWORD=mysql_user_password
  43.  
  44. #Контейнер с OnlyOffice
  45. onlyoffice:
  46. container_name: onlyoffice
  47. image: onlyoffice/documentserver
  48. restart: always
  49. stdin_open: true
  50. volumes:
  51. - /mnt/cloud/onlyoffice/log:/var/log/onlyoffice
  52. - /mnt/cloud/onlyoffice/data:/var/www/onlyoffice/Data
  53. - /mnt/cloud/onlyoffice/cache:/var/lib/onlyoffice
  54. ports:
  55. - "15000:80"

YML - файл сохраняем в /usr/local/bin
Если вы планируете загружать в облако большие файлы (15-20 GB и более) - позаботьтесь чтобы в корневом разделе хост-системы было достаточно место, т.к при загрузке происходит запись загружаемого файла в кэш докера, а затем уже в /mnt/cloud/nexrcloud/data

Установка и запуск всех компонентов

Итак, все готово к запуску - на всякий случай убедитесь, что все каталоги созданы, переходим в каталог с установленным docker-compose, здесь же у вас должен лежать составленный YML-файл, и запускаем сначала контейнер с БД:

  1. ./docker-compose up -d nextcloud-db

и спустя секунд 15-20 остальное:

  1. ./docker-compose up -d

В зависимости от вашего железа, установка займет от 3 до 10 минут.
Проверяем, что все контейнеры успешно запустились:

  1. root@test-docker-all:/usr/local/bin# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 44851d0f1ef0 wonderfall/nextcloud "run.sh" About an hour ago Up About an hour 0.0.0.0:80->8888/tcp nextcloud
  4. 91d81385eabc onlyoffice/documentserver "/bin/sh -c 'bash ..." 12 hours ago Up About an hour 443/tcp, 0.0.0.0:15000->80/tcp onlyoffice
  5. cb26f2cad452 mariadb "docker-entrypoint..." 6 days ago Up 2 days 3306/tcp bin_nextcloud-db_1

И что проброшенные порты открыты:

  1. root@test-docker-all:/usr/local/bin# netstat -lptun
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
  5. tcp6 0 0 :::80 :::* LISTEN 21661/docker-proxy
  6. tcp6 0 0 :::22 :::* LISTEN 445/sshd
  7. tcp6 0 0 :::15000 :::* LISTEN 21575/docker-proxy

Настройка связности NextCloud и OnlyOffice

Все работает, переходим на адрес вашей хост-системы, откроется веб-морда NextCloud. В нашем случае логин/пароль админа задан в yml-файле, поэтому логинимся под ним. NextCloud может сругаться, что доступ с вашего IP не разрешен (в случае, если вы настраивали связку не на локальной машине, а на виртуалке), поэтому редактируем проброшенный файл конфига NextCloud:
/mnt/cloud/nextcloud/config/config.php в разделе trusted_domains строку 0 => 'ваш IP', приводим к виду:

  1. 'trusted_domains' =>
  2. array (
  3. 0 => '*',

В админке переходим в раздел Приложения (шестеренка в правом верхнем углу), выбираем слева Офис и текст, и включаем OnlyOffice. После этого переходим в Администрирование -> Дополнительные настройки, и в разделе OnlyOffice указываем IP-адрес и порт сервера, на котором у нас крутится контейнер с офисом - в нашем случае он работает на локальной машине, на порту 15000, соответственно указываем http://127.0.0.1:15000/

Переходим в раздел ваши файлы, и пробуем открыть какой-нибудь docx-документ.

В целом все, будут вопросы - пишите в комментарии, постараюсь помочь.

Комментарии

не работает

Из-за чего не работает? Опиши ситуацию, логи приложи

Здравствуйте, написали что выложите статью про установку nextcloud отдельным контейнером от nginx. Когда планируете написать? Стоит ли ждать в ближайшее время?

Дмитрий, доброго времени суток! На этой неделе выложу

Огромное спасибо! С нетерпением жду!

Также рекомендуем