В этой статье я расскажу как установить сервис облачного хранения файлов NextCloud и прикрутить к нему редактор документов OnlyOffice, что позволит пользователям прямо в браузере редактировать docx, xmlx прочие офисные форматы.
Для работы данной связки я буду использовать Docker, у нас будет 3 отдельных контейнера:
Примерная последовательность действий:
Про установку Docker я уже писал, поэтому читайте здесь данный шаг я описывать не буду, и начну сразу с yml-файла.
Создаем пользователя, от которого будет работать NextCloud - в моем случае это пользователь admin с uid 1000, без возможности запускать shell:
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 создается каталог с временными файлами, и если в момент, когда кто-то редактирует документ онлайн, вы сделаете рестарт контейнера OnlyOffice, и при этом cache НЕ будет проброшен на хост-систему - соответственно внутри контейнера cache очистится, а после рестарта контейнера пользователь не сможет открыть свой документ, и будет получать ошибку. Если же cache проброшен, то при внеплановом рестарте контейнера с OnlyOffice кэш не будет затерт, и после рестарта у пользователей ошибок не будт.
Владельцем каталога /mnt/cloud со всеми подкаталогами рекурсивно делаем пользователя admin и группу admin:
chown -R admin:admin /mnt/cloud
При пробросе каталогов их контейнера в хост-систему, все нужные подкаталоги, в случае их отсутствия, будут созданы автоматически. Для кэш
Я использую сборку NextCloud от Wondrefall - в ней уже настроено веб-окружение (php-fpm + nginx), и поэтому не нужно отдельным контейнером запускать веб - сервер. В следующей статье я рассмотрю установку NextCloud из официального контейнера, с отдельным запуском компонентов веб-сервера.
Пробрасываем 8888 порт контейнера NextCloud на 80 порт хост-системы (строка 31).
Базу данных будем использовать MySql, из официального образа. Название базы, логины и пароли замените на свои. На хост-систему порты не пробрасываем, контейнер с облаком будет напрямую обращаться к контейнеру с БД.
И, наконец, третий контейнер - OnlyOffice, также из официального образа разработчиков. Пробрасываем 80 порт контейнера на 1500 порт хост-системы (строка 55).
YML-файл с комментариями:
nextcloud: container_name: nextcloud image: wonderfall/nextcloud restart: always links: - nextcloud-db:nextcloud-db # If using MySQL environment: - UID=1000 # UID, который мы задавали вручную при создании пользователя в системе. - GID=1000 # GID пользователя (как правило, совпадает с группой). - UPLOAD_MAX_SIZE=10G # максимальный размер загружаемого файла - APC_SHM_SIZE=128M - OPCACHE_MEM_SIZE=128 - CRON_PERIOD=15m - TZ=Asia/Yekaterinburg - ADMIN_USER=admin # Don't set to configure through browser - ADMIN_PASSWORD=admin # Don't set to configure through browser - DOMAIN=perm-nextcloud-01 # Домен, на котором будет работать NextCloud - DB_TYPE=mysql - DB_NAME=nextcloud - DB_USER=nextcloud - DB_PASSWORD=mysql_user_password - DB_HOST=nextcloud-db # имя контейнера с БД volumes: - /mnt/cloud/nextcloud/data:/data # тут будут храниться загруженные пользователями данные - /mnt/cloud/nextcloud/config:/config # основной конфигурацйонный файл NextCloud - /mnt/cloud/nextcloud/apps:/apps2 - /mnt/cloud/netxcloud/themes:/nextcloud/themes - /mnt/cloud/nextcloud/session:/php/session ports: - "80:8888" # Контейнер с базой данных MySQL nextcloud-db: image: mariadb restart: always volumes: - /mnt/cloud/db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=mysql_root_password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=mysql_user_password #Контейнер с OnlyOffice onlyoffice: container_name: onlyoffice image: onlyoffice/documentserver restart: always stdin_open: true volumes: - /mnt/cloud/onlyoffice/log:/var/log/onlyoffice - /mnt/cloud/onlyoffice/data:/var/www/onlyoffice/Data - /mnt/cloud/onlyoffice/cache:/var/lib/onlyoffice ports: - "15000:80"
YML - файл сохраняем в /usr/local/bin
Если вы планируете загружать в облако большие файлы (15-20 GB и более) - позаботьтесь чтобы в корневом разделе хост-системы было достаточно место, т.к при загрузке происходит запись загружаемого файла в кэш докера, а затем уже в /mnt/cloud/nexrcloud/data
Итак, все готово к запуску - на всякий случай убедитесь, что все каталоги созданы, переходим в каталог с установленным docker-compose, здесь же у вас должен лежать составленный YML-файл, и запускаем сначала контейнер с БД:
./docker-compose up -d nextcloud-db
и спустя секунд 15-20 остальное:
./docker-compose up -d
В зависимости от вашего железа, установка займет от 3 до 10 минут.
Проверяем, что все контейнеры успешно запустились:
root@test-docker-all:/usr/local/bin# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 44851d0f1ef0 wonderfall/nextcloud "run.sh" About an hour ago Up About an hour 0.0.0.0:80->8888/tcp nextcloud 91d81385eabc onlyoffice/documentserver "/bin/sh -c 'bash ..." 12 hours ago Up About an hour 443/tcp, 0.0.0.0:15000->80/tcp onlyoffice cb26f2cad452 mariadb "docker-entrypoint..." 6 days ago Up 2 days 3306/tcp bin_nextcloud-db_1
И что проброшенные порты открыты:
root@test-docker-all:/usr/local/bin# netstat -lptun Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0 :::80 :::* LISTEN 21661/docker-proxy tcp6 0 0 :::22 :::* LISTEN 445/sshd tcp6 0 0 :::15000 :::* LISTEN 21575/docker-proxy
Все работает, переходим на адрес вашей хост-системы, откроется веб-морда NextCloud. В нашем случае логин/пароль админа задан в yml-файле, поэтому логинимся под ним. NextCloud может сругаться, что доступ с вашего IP не разрешен (в случае, если вы настраивали связку не на локальной машине, а на виртуалке), поэтому редактируем проброшенный файл конфига NextCloud:
/mnt/cloud/nextcloud/config/config.php в разделе trusted_domains строку 0 => 'ваш IP', приводим к виду:
'trusted_domains' => array ( 0 => '*',
В админке переходим в раздел Приложения (шестеренка в правом верхнем углу), выбираем слева Офис и текст, и включаем OnlyOffice. После этого переходим в Администрирование -> Дополнительные настройки, и в разделе OnlyOffice указываем IP-адрес и порт сервера, на котором у нас крутится контейнер с офисом - в нашем случае он работает на локальной машине, на порту 15000, соответственно указываем http://127.0.0.1:15000/
Переходим в раздел ваши файлы, и пробуем открыть какой-нибудь docx-документ.
В целом все, будут вопросы - пишите в комментарии, постараюсь помочь.
Комментарии
не работает
не работает
Из-за чего не работает? Опиши
Из-за чего не работает? Опиши ситуацию, логи приложи
Здравствуйте, написали что
Здравствуйте, написали что выложите статью про установку nextcloud отдельным контейнером от nginx. Когда планируете написать? Стоит ли ждать в ближайшее время?
Дмитрий, доброго времени
Дмитрий, доброго времени суток! На этой неделе выложу
Огромное спасибо! С
Огромное спасибо! С нетерпением жду!