Glashkoff.com

Полезные советы и софт, создание и оптимизация сайтов на WordPress

Администрирование

Персональное облако Nextcloud: что это такое, настройка

Nextcloud

Что такое NextCloud

Флешки понемногу отживают своё. Проще делиться файлом через Яндекс.Диск или Дропбокс, чем скидывать на флешку и куда-то нести. Благо даже в глухомани можно словить 2G, интернет доступен везде.

Чем же отличается Nextcloud от остальных коллег по цеху? Тем, что это личная облачная флешка. Вы арендуете сервер для себя, ставите эту софтину и пользуетесь в своё удовольствие.

Диск Nextcloud, открытый в браузере Vivaldi
Диск Nextcloud

Если вопрос приватности стоит не на первом месте, становится непонятно, чем такое решение лучше того же Яндекс.Диска, Облака Мейл.ру или OneDrive, ведь ими можно пользоваться бесплатно и без ковыряния в конфигурационных файлах: зарегистрируйся и пользуйся сколько хочешь. А тут настраивать надо!

Но если копнуть глубже, выясняется, что Nextcloud — целая платформа для хранения любых данных. Она даёт возможность избавиться от цифрового «рабства», отвязаться от Гугла и прочих корпораций, храня списки контактов и событий в календаре на подконтрольном только вам серверу. Никто не сможет использовать ваши данные для показа рекламы, копаться в файлах и отслеживать действия.

Nextcloud на телефоне
Nextcloud на телефоне

«Из коробки» доступно хранение трёх видов информации:

  • файлов (и каталогов),
  • контактов,
  • событий календаря.

При необходимости функциональность расширяется установкой бесплатных приложений из встроенного каталога. Так можно получить новые возможности:

  • ведение заметок (доступны аналоги Google Keep, но полноценной замены Evernote нет),
  • прослушивание музыки в веб-плеере,
  • чат и проведение видеоконференций (аналог Skype),
  • интеграция с сервисами для редактирования документов прямо в браузере.

В каталоге найдутся и другие расширения, но их качество оставляет желать лучшего. Например, на момент написания заметки у плагина интеграции Google Drive 17 нерешённых проблем.

Некоторым багам больше четырех месяцев
Некоторым багам больше четырех месяцев

Стабильность важна, когда дело касается хранения данных, поэтому придётся обходиться минимумом или пилить собственные расширения.

Кстати: сервера всемирно известного хостинга Digital Ocean подходят для организации собственного облака. Вы можете получить аккаунт со 100$ на счету через мою реферальную ссылку.

Сценарии использования

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

1. Хранение файлов с доступом из разных мест. На ПК подключается сетевой диск, на телефоне используется приложение. Все действия можно делать и через браузер. Облачная флешка всегда будет под рукой, лишь бы интернет работал.

Хранилище Nextcloud можно подключить как сетевой диск
Хранилище Nextcloud можно подключить как сетевой диск

Лайфхак: можно расширить объём места, отводимого под хранение файлов, любым облачным сервисом, поддерживающим протокол WebDAV. При желании можно всё зашифровать через EncFS, чтобы данные были в безопасности.

У Nextcloud есть клиенты для Windows и Linux, но до удобства использования Яндекс.Диска и Дропбокса им далеко. Работать с файлами можно, каталоги синхронизируются с локальными, но в целом проще подключить сетевой диск, ведь место на жёстком диске ПК не резиновое.

2. Совместная работа с документами, организация задач. Один сервер может обслуживать много пользователей. Лишь бы места и производительности хватило.

Увы, в NextCloud нет редактора документов, как в Гугл Диске, но можно установить и настроить Collabora Online Development Edition (об этом расскажу ниже).

Collabora Online Office – Nextcloud
Collabora Online

Можно пойти дальше и настроить интеграцию с Onlyoffice — мощной системой, включающей в себя полноценный облачный офис с CRM, почтовым сервером и прочими фишками. Вариант подходит для крупных организаций с высокими требованиями к безопасности, не приветствующих сторонние сервисы.

ONLYOFFICE - Apps - App Store - Nextcloud
Onlyoffice

Без интеграций в облаке доступен разве что аналог Блокнота из Windows, но пользоваться им можно только в крайнем случае — очень уж примитивен этот текстовый редактор.

Без расширений в Nextcloud можно редактировать только текстовые документы
Без расширений в Nextcloud можно редактировать только текстовые документы

Для качестве замены Evernote в каталоге Nextcloud доступно аж четыре приложения:

  • Carnet — хранилище заметок, похож на Google Keep.
  • Deck — планировщик задач, аналог Трелло.
  • Notes — простой сервис текстовых заметок.
  • Tasks — составление списков задач.

Carnet неплох — поддерживает форматирование текста, добавление картинок, назначение тегов. Если сравнивать с GKeep, функций больше. Но любители Эверноута, привыкшие к фишкам сервиса, будут разочарованы. Впрочем, компенсировать часть могут другие приложения.

Заметки Carnet
Заметки Carnet

Менеджер задач Deck возможностями похож на известный сервис Trello. Интеграция с группами пользователей сделана хорошо, можно планировать работу команд людей, назначая группам задачи.

Сервис планирования задач Deck
Сервис планирования задач Deck

Приложения ведения дел и заметок Notes и Tasks, по моему мнению, дополняют друг друга: один для ведения текстовых заметок, второй для составления «ту-ду» списков, в которых каждый пункт можно отмечать галочкой. Просто и эффективно.

3. Синхронизация контактов и ежедневника. На телефонах с Android можно заменить сервисы от Google на синхронизацию через NextCloud. Пока поддерживается хранение адресной книги и событий в календаре.

В календаре можно хранить список дел и важных дат (у меня пустой, так как не пользуюсь)
В календаре можно хранить список дел и важных дат (у меня пустой, так как не пользуюсь)

С помощью NC можно создать миниатюрную цифровую экосистему для членов семьи или сотрудников организации.

Способы установки

Доступны три версии:

  1. Готовый комплект — сервер с софтом и расширенной технической поддержкой от разработчиков Nextcloud.
  2. Бесплатный аккаунт с 5 Гб места.
  3. Набор файлов для самостоятельной установки.

За готовый инстанс NextCloud Enterprise просят от 36 евро на пользователя в год на самом дешёвом тарифе. Это на самом деле не дёшево ни разу, потому что итоговая цена наверняка будет выше. Так что оставим Enterprise вариант для компаний, готовых себе это позволить.

С бесплатным аккаунтом ситуация неоднозначная. Получить его можно на странице https://nextcloud.com/signup/ . Предоставляется 5 Гб места на облачном диске, приложения поставить нельзя (некоторые предустановлены), шифрование включить нельзя. Зато интегрирован текстовый редактор Collabora Online.

Остается устанавливать Nextcloud самостоятельно. Это не бесплатно, но денег будет уходить не так уж много.

О том, как выбрать хостинг, я рассказал в заметке «Как выбрать VPS хостинг – несколько советов».
Не можете поставить сами? Купите сторонний сервер и наймите админа, всё равно дешевле предложения авторов.

Внутренне NextCloud ничем не отличается от большинства сайтов, написанных на языке программирования PHP. При желании можно установить на дешёвый shared хостинг за 99 рублей в месяц. Нужны только поддержка PHP, MySQL и место на жёстком диске. Хотя страницы на шареде будут открываться крайне медленно, «поиграться» можно.

Чтобы понять, насколько полезен в быту Nextcloud, я решил поставить его на сервер за 3,99 евро в месяц (цена не актуальна, сервис подорожал в 2020-м), хостинг Scaleway. 2 ядра ЦП, 2 Гб ОЗУ, 50 Гб довольно быстрого диска — неплохие возможности за низкую цену.

Тарифы начального уровня от Scaleway
Тарифы начального уровня от Scaleway. Старый скриншот, сейчас цены и услуги другие!

Специально для тех, кому не интересно ковыряться с файлами конфигурации, Scaleway предлагает готовый образ ownCloud — это почти то же самое, что и Nextcloud. Последний отпочковался от него из-за расхождения во взглядах разработчиков. Почти всё, что написано здесь, касается обоих продуктов.

Выбор готовой системы для VPS
Выбор готовой системы для VPS

Если же нужен именно Nextcloud, можно поставить Docker (доступен практически на любом хостинге VPS) и установить туда искомый образ. Вот только в готовых образах Nextcloud работает на жадным до ресурсов вебсервере Apache. То есть на дешёвом VPS облако как бы работает, но при одновременном подключении более двух пользователей ОЗУ уже не хватает, сервер MySQL отключается, страницы начинают сыпать 50* ошибками. Мне это не понравилось и я решил заморочиться, задействовав Ubuntu 18.04 и Nginx.

Моя инструкция — не для начинающих пользователей. Подразумевается, что вы умеете работать в командной строке сервера с Linux.

Итак, существует три способа установки NextCloud:

  1. Установка готового контейнера Docker.
  2. Установка образа snap командой sudo snap install nextcloud в операционных системах, поддерживающих подобный способ (Ubuntu 18.04).
  3. Распаковка из архива с самостоятельной настройкой серверного софта.

Третий вариант — для упорных, которым необходим полный контроль над системой и максимальная производительность.

Доменное имя или цифровой адрес?

При желании можно купить домен, чтобы облако открывалось по красивой ссылке вместо цифрового IP. Это ещё рублей 200 в год для зоны .ru. Можно и бесплатно, если найти домен третьего уровня.

Про особенности покупки доменного имени я рассказывал в заметке «Покупка домена: как придумать имя, где купить дешевле и что настроить».

Шаг 1. Установка веб-сервера

Самое главное — вместо Apache нужен Nginx, способный выдержать сотни и тысячи запросов в секунду.

Чтобы не ковыряться в файлах конфигурации и ставить софт вручную, я использую Webinoly («Webinoly: управляем VPS с Ubuntu Server 18.04»). Вместе с ней ставится веб-сервер Nginx с PHP новейшей версии и сервер баз данных MariaDB.

В инструкции ниже буду упоминать именно Webinoly, но в целом выбор панелей управления сервером велик и вам ничто не мешает использовать что-то другое или всё сделать вручную. Инструкция от авторов NC здесь. Далее будет мой вариант настройки.

Шаг 2. Распаковка NextCloud

NC написан на мегапопулярном языке программирования PHP, каких-то экзотических настроек не требует.

Сначала создаём каталог и конфигурацию сайта. В Webinoly генерация конфигурационных файлов выполняется командой

sudo site адрес_или_ip -mysql=default

Webinoly создаст необходимую площадку для запуска сайта и услужливо покажет имя базы данных и логин с паролем к ней. Запишите их — пригодятся.

Затем, если купили домен и внесли в настройки DNS домена запись типа A с ip-адресом сервера, можно подключить сертификат для шифрования по протоколу HTTPS:

sudo site адрес_или_ip -ssl=on

Это не обязательный шаг, но мало ли через какие сети будете подключаться к облаку. Лучше перестраховаться, обеспечив шифрование.

Если всё прошло успешно, появится надпись «SSL have been successfully enabled for site ***!». В противном случае будет указана ошибка, из-за чего не удалось получить сертификат Let’s Encrypt.

Затем нужно скачать и распаковать архив с файлами NextCloud.

Так как я создал каталог через Webinoly, у меня это /var/www/имя_сайта/htdocs. Перехожу в него в консоли, подключившись к серверу по SSH из-под учётной записи с правами root:

cd /var/www/имя_сайта/htdocs

После качаю архив утилитой wget (если её нет, ставить так: sudo apt install wget).

wget https://download.nextcloud.com/server/releases/nextcloud-20.0.4.zip

Посмотреть свежую версию можно и нужно на странице загрузки NC: https://nextcloud.com/install/#instructions-server.

Распаковываю архив:

unzip nextcloud-20.0.4.zip nextcloud/* -d /var/www/имя_сайта/htdocs

Так как всё распаковалось в подкаталог /nextcloud, нужно переместить содержимое в корневой каталог сайта. Если этого не сделать, будут проблемы с получением сертификата SSL (особенность конфига Webinoly). Заодно можно удалить бесполезный теперь архив.

cd nextcloud/
mv * ..
mv .* ..
cd ..
rm -d nextcloud
rm nextcloud-14.0.1.zip

Требуется назначить правильные права на файлы и каталоги и указать их владельца. Обычно всё запущено от имени www-data.

sudo chown -R www-data:www-data /var/www/имя_сайта/htdocs/*
sudo find /var/www/имя_сайта/htdocs/* -type f -exec chmod 664 {} +
sudo find /var/www/имя_сайта/htdocs/* -type d -exec chmod 775 {} +

Затем нужно отредактировать файлы конфигурации сервера Nginx. Параметры по умолчанию не позволят Nextcloud нормально работать.

nano /etc/nginx/sites-enabled/адрес_сайта

Вместо редактора nano может быть vi, mcedit или что-то ещё. Путь тоже может отличаться. Рекомендую установить Midnight Commander для удобной навигации по каталогам (apt install mc).

Дефолтное содержимое конфигурации сайта будет примерно таким:

# WebinolySSLredirectStart - HTTP to HTTPS Redirect
server {
listen 80;
listen [::]:80;
server_name АДРЕС_САЙТА;
return 301 https://$host$request_uri;
}
# WebinolySSLredirectEnd
# WebinolyNginxServerStart
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name АДРЕС_САЙТА;

# WebinolySSLstart
ssl on;
ssl_certificate /etc/letsencrypt/live/АДРЕС_САЙТА/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/АДРЕС_САЙТА/privkey.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/АДРЕС_САЙТА/chain.pem;
# WebinolySSLend
access_log /var/log/nginx/АДРЕС_САЙТА.access.log we_log; 
error_log /var/log/nginx/АДРЕС_САЙТА.error.log;

root /var/www/АДРЕС_САЙТА/htdocs;

index index.php index.html index.htm;

include common/php.conf;
include common/locations.conf;
include common/headers-http.conf;
include common/headers-https.conf;
include common/headers-html.conf;
include /var/www/адрес_сайта/*-nginx.conf;
}
# WebinolyNginxServerEnd

Нужно заменить на такой:

# WebinolySSLredirectStart - HTTP to HTTPS Redirect
server {
	listen 80;
	listen [::]:80;
	server_name АДРЕС_САЙТА;
	return 301 https://$host$request_uri;
}
# WebinolySSLredirectEnd
# WebinolyNginxServerStart
server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name АДРЕС_САЙТА;

	# WebinolySSLstart
	ssl on;
	ssl_certificate /etc/letsencrypt/live/АДРЕС_САЙТА/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/АДРЕС_САЙТА/privkey.pem;
	ssl_stapling on;
	ssl_stapling_verify on;
	ssl_trusted_certificate /etc/letsencrypt/live/АДРЕС_САЙТА/chain.pem;
	# WebinolySSLend
	access_log off; 
	error_log /var/log/nginx/АДРЕС_САЙТА.error.log;

	root /var/www/АДРЕС_САЙТА/htdocs;
	
	#if ($request_method !~ ^(DELETE|PROPFIND|PUT|GET|HEAD|POST|OPTIONS|REPORT|MKCOL|MOVE|PROPPATCH|COPY|PATCH)$ ) {
	#return 405;
	#}
	
	index index.php
		
	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";
	add_header X-Robots-Tag none;
	add_header X-Download-Options noopen;
	add_header X-Permitted-Cross-Domain-Policies none;
	add_header Referrer-Policy no-referrer;
	add_header Strict-Transport-Security 15552000;
	fastcgi_hide_header X-Powered-By;

	location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
	}
	
	location ~ /\.well-known {
		allow all;
	}

	location = /.well-known/carddav {
		return 301 $scheme://$host/remote.php/dav;
	}
	location = /.well-known/caldav {
		return 301 $scheme://$host/remote.php/dav;
	}
	
	error_page 403 /core/templates/403.php;
	error_page 404 /core/templates/404.php;
	
	send_timeout 120;
	keepalive_timeout 120;
	client_body_buffer_size 128k;
	client_max_body_size 512m; #максимальный размер загружаемого файла
	client_body_timeout 120;
	client_header_timeout 120;
	fastcgi_buffers 64 4K;

	gzip on;
	gzip_vary on;
	gzip_comp_level 4;
	gzip_min_length 256;
	gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
	gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

	location / {
		#rewrite ^ /index.php$uri;
		try_files $uri /index.php$uri$is_args$args;
	}

	location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
		deny all;
	}
	location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
		deny all;
	}

	location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
		fastcgi_split_path_info ^(.+\.php)(/.*)$;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_param HTTPS on;
		fastcgi_param modHeadersAvailable true;
		fastcgi_param front_controller_active true;
		fastcgi_param PHP_VALUE "
		max_execution_time=120
		default_socket_timeout=120";
		fastcgi_read_timeout 120s;
		fastcgi_pass php;
		fastcgi_intercept_errors on;
		fastcgi_request_buffering off;
	}
	
	location ~ ^/(?:updater|ocs-provider)(?:$|/) {
		try_files $uri/ =404;
		index index.php;
	}

	location ~ \.(?:css|js|woff|svg|gif)$ {
		try_files $uri /index.php$uri$is_args$args;
		add_header Cache-Control "public, max-age=7200";
		add_header X-Content-Type-Options nosniff;
		add_header X-XSS-Protection "1; mode=block";
		add_header X-Robots-Tag none;
		add_header X-Download-Options noopen;
		add_header X-Permitted-Cross-Domain-Policies none;
		add_header Referrer-Policy no-referrer;
		access_log off;
	}

	location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
		try_files $uri /index.php$uri$is_args$args;
		access_log off;
	}
}
# WebinolyNginxServerEnd

«АДРЕС_САЙТА» замените на свой домен или IP. Также обратите внимание на блок обработки *.php (который со множеством fastcgi_param) — у вас строка «fastcgi_pass» будет другой, если используется не Webinoly.

Кстати, с моей конфигурацией Nginx в адресах NextCloud не будет подставляться «index.php», структура url станет «чистой». В конфиге из официальной документации почему-то не учли этот момент.

Затем выполните команды установки главного пользователя с правами администратора. Имя, логин и пароль для доступа к базе Webinoly сообщал при создании сайта.

sudo -u www-data php /var/www/АДРЕС_САЙТА/htdocs/occ maintenance:install --database "mysql" --database-name "ИМЯ_БАЗЫ" --database-user "ПОЛЬЗОВАТЕЛЬ_БАЗЫ" --database-pass "ПАРОЛЬ_К_БД" --admin-user "ВАШ_ЮЗЕР" --admin-pass "ПАРОЛЬ" --data-dir "/var/www/АДРЕС_САЙТА/htdocs/nc_data"

sudo -u www-data php /var/www/АДРЕС_САЙТА/htdocs/occ config:system:set trusted_domains 1 --value=АДРЕС_САЙТА

sudo -u www-data php /var/www/АДРЕС_САЙТА/htdocs/occ config:system:set overwrite.cli.url --value=https://АДРЕС_САЙТА

Финальный штрих — установка задачи в Cron сервера, чтобы команды обслуживания запускались по расписанию. Редактирование запускается командой sudo crontab -u www-data -e. Добавьте строку:

*/15 * * * * php /var/www/АДРЕС_САЙТА/htdocs/cron.php

Напоминаю, что путь к файлу cron.php будет другой, как и пользователь www-data.

Теперь можно зайти в облако Nextcloud через браузер, чтобы проверить работоспособность.

Диск в Nextcloud
Диск в Nextcloud

И заодно включите в настройках — «Основные настройки» Cron вместо AJAX.

На этом можно остановиться, поставить приложение Nextcloud на телефон и пользоваться всеми прелестями доступа к файлам из любой точки земного шара и с любого устройства.

А можно пойти дальше и расширить возможности.

Шаг 3. Допиливание

1. Кэширование

NC работает с APCu, Memcache и Redis. Рекомендую использовать только Redis, так меньше проблем (Memcache при кэшировании запрашивает неоправданно много места в ОЗУ):

sudo apt install redis-server php-redis
phpenmod redis

Затем отредактируйте файл /config/config.php. Привожу готовый файл. Пожалуйста, не копируйте его целиком, так как в вашем конфиге есть уникальные строки.

<?php
$CONFIG = array (
'instanceid' = 'здесь_ваше_значение',
'passwordsalt' = 'здесь_ваше_значение',
'secret' = 'здесь_ваше_значение',
'trusted_domains' =  
array (
0 => 'localhost',
1 => 'АДРЕС_САЙТА',
),
'datadirectory' = '/var/www/АДРЕС_САЙТА/htdocs/nc_data',
'dbtype' = 'mysql',
'version' = '14.0.1.1',
'overwrite.cli.url' = 'https://АДРЕС_САЙТА',
'dbname' = 'nc_tx8_ru',
'dbhost' = 'localhost',
'dbport' =  '',
'dbtableprefix' =  'oc_',
'dbuser' =  'здесь_ваше_значение',
'dbpassword' =  'здесь_ваше_значение',
'installed' =  true,
'memcache.local' = '\\OC\\Memcache\\Redis',
'memcache.locking' =  '\\OC\\Memcache\\Redis',
'filelocking.enabled' =  'true',
'redis' => 
array (
'host' = '127.0.0.1',
'port' = 6379,
'dbindex' =  0,
'timeout' = 1.5,
),
);

2. Перенос каталога /data для защиты данных

Без тщательной настройки Nginx допускает обращение по прямым именам файлов. Зная ваш логин и имя файла в вашем файловом хранилище можно получить доступ без пароля. Исправить можно двумя путями:

  • Грамотно отредактировав конфиг Nginx.
  • Переместив каталог /data в другое место.

Признаюсь, я (пока) без понятия, как ограничить доступ к файлам через конфиг так, чтобы не случилось потери производительности. Поэтому просто переместил каталог на уровень выше в htdocs, заодно переименовав:

mv /var/www/nc.tx8.ru/htdocs/nc_data /var/www/АДРЕС_САЙТА/СЛУЧАЙНОЕ_ИМЯ

И отредактировал в /config/config.php значение «datadirectory».

'datadirectory' = '/var/www/АДРЕС_САЙТА/СЛУЧАЙНОЕ_ИМЯ',

Теперь перебором адресов к файлам не подобраться.

3. Шифрование на стороне сервера

На случай, если к содержимому диска сервера могут получить доступ посторонние, предусмотрено шифрование файлов.

Нюанс: производительности сервера может не хватить и файлы начнут загружаться в час по чайной ложке. Советую включать шифрование только на полноценных серверах, не VPS с их лимитом ресурсов.

Зайдите в раздел «Приложения»:

Включите модуль шифрования:

Затем в «Настройки» — «Администрирование» включите шифрование на стороне сервера:

Шифрование необратимо. Шифруются все новые файлы, загруженные после включения опции. Опцию можно выключить, но зашифрованные файлы станут недоступны.

Если сомневаетесь, потянет ли ваш сервер шифрование, можно включить шифрование и загрузить файл весом мегабайт в 300 (через веб-интерфейс или WebDAV), поглядывая в консоль на запущенный htop:

Можно наблюдать в реальном времени, насколько нагружен ЦП. В момент окончания загрузки файла происходит шифрование, поэтому будет всплеск потребления ресурсов. Если 300-мегабайтный файл вызывает нагрузку выше 50% больше пяти секунд — шифрование будет мешать (выяснил эмпирически).

4. Интеграция с Collabora Online

Для редактирования документов, не выхода за пределы браузера, в NextCloud есть приложения интеграции. Облако можно подружить с Onlyoffice, Microsoft Office Online и Collabora Online. Я остановился на последнем варианте как на самом доступном.

Collabora Online в Nextcloud
Collabora Online в Nextcloud

В последние пару лет Collabora Online допили до вменяемого состояния, добавили поддержку русского языка и решили много проблем с производительностью и стабильностью. Прокрутка документов все ещё бывает слишком неторопливой, интерфейс неказист, но пользоваться можно. Можно закричать «вот она, вот она, замена Гугл Дооокс!» и в принципе это будет правдой. С оговорками, ибо возможность совместного редактирования документов отсутствует.

Что интересно, CODE — это не онлайн-приложение, а форк LibreOffice с дополнениями, представляющими интерфейс в виде страницы. Раньше это ощущалось — интерфейс дико тормозил. Сейчас с этим лучше.

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

Поставьте docker. Хотя я стараюсь избегать этот инструмент, потому что он даёт иллюзию безопасности там, где безопасности нет, здесь без контейнеризации не обойтись, потому что слишком уж много компонентов надо ставить в системе. Воспользуйтесь этой инструкцией для установки: Как установить и использовать Docker в Ubuntu 18.04. Шага №1 будет достаточно.

Затем создайте домен для Collabora Online. Он необходим, так как CODE — отдельный сервис вне Nextcloud, к которому нужно обращаться по протоколу HTTPS. Так как у меня на сервере Webinoly, делаю так:

site office.domain.com -html
site office.domain.com -ssl=on

Естественно, IP на поддомен office должен быть прописан в записях DNS, иначе сертификат для работы HTTPS не получить. Вы можете выделить домен или поддомен любого уровня — без разницы какого, лишь бы хоть какой-то имелся.

Затем нужно отредактировать файл /etc/nginx/sites-available/тут_домен_сайта , прописав там правила для каталогов, которые будут использоваться онлайн-редактором. Вот готовый вариант конфигурационного файла, вам нужно лишь заменить доменное имя:




# WebinolySSLredirectStart - HTTP to HTTPS Redirect
server {
	listen 80;
	listen [::]:80;
	server_name office.domain.com;
	return 301 https://$host$request_uri;
}
# WebinolySSLredirectEnd
# WebinolyNginxServerStart
server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name office.domain.com;

	# WebinolySSLstart
	ssl_certificate /etc/letsencrypt/live/office.domain.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/office.domain.com/privkey.pem;
	ssl_stapling on;
	ssl_stapling_verify on;
	ssl_trusted_certificate /etc/letsencrypt/live/office.domain.com/chain.pem;
	# WebinolySSLend	
	access_log off;
	error_log /var/log/nginx/office.domain.com.error.log;
	
	root /var/www/office.domain.com/htdocs;
		
	index  index.html index.htm;
	location / { try_files $uri $uri/ =404; }
	
	# static files
    location ^~ /loleaflet {
        proxy_pass http://localhost:9980;
        proxy_set_header Host $http_host;
    }

    # WOPI discovery URL
    location ^~ /hosting/discovery {
        proxy_pass http://localhost:9980;
        proxy_set_header Host $http_host;
    }

    # Capabilities
    location ^~ /hosting/capabilities {
        proxy_pass http://localhost:9980;
        proxy_set_header Host $http_host;
    }

    # main websocket
    location ~ ^/lool/(.*)/ws$ {
        proxy_pass http://localhost:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

    # download, presentation and image upload
    location ~ ^/lool {
        proxy_pass http://localhost:9980;
        proxy_set_header Host $http_host;
    }

    # Admin Console websocket
    location ^~ /lool/adminws {
        proxy_pass http://localhost:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }
	
	include common/auth.conf;
	
	# WebinolyCustom
	# WebinolyCustomEnd
	
	include common/locations.conf;
	include common/headers-http.conf;
	include common/headers-https.conf;
	include common/headers-html.conf;
}
# WebinolyNginxServerEnd

Сохраните, проверьте правильность конфигов командой nginx -t , затем командой service nginx reload примените новые настройки веб-сервера.

С тем, чтобы запустить контейнер, в котором будет работать Collabora Online Development Edition, у меня, как и у некоторых других админов серверов, возникли трудности: с параметрами по умолчанию CODE отказывался работать. Это странно, но уж как есть. Ошибок было две:

  1. «Socket #25 SSL BIO error: error:1408F09C:SSL». Решается с помощью «-e ‘extra_params=—o:ssl.enable=false —o:ssl.termination=true'». Причина в том, что к контейнеру нужно обращаться по HTTP протоколу, что по умолчанию запрещено. Извне к Nginx обращение идёт по защищённому каналу, но внутри нам это не нужно, потому что придётся решать вопросы проброса сертификата Let’s Encrypt и его своевременного обновления.
  2. Ошибка «/usr/bin/loolmount: Operation not permitted». Почему-то в официальной документации забыли «—privileged», чтобы у контейнера появились права на создание форков процесса loolwsd.

Итак, весь процесс установки Collabora Online Development Edition на сервер сводится к выполнению одной-единственной строки:


docker run --name 'collabora' -t -d -p 127.0.0.1:9980:9980 -e 'domain=nextcloud\\.domain\\.com' -e 'dictionaries=en ru' -e 'extra_params=--o:ssl.enable=false --o:ssl.termination=true' -e "username=admin" -e "password=12345" --restart always --privileged --cap-add MKNOD --cap-add SYS_CHROOT --cap-add FOWNER collabora/code

Не забудьте изменить nextcloud\\.domain\\.com на адрес своего облака. Не домена, где находится онлайн-офис, а именно облака, сохранив слеши «\\» перед точками. Пароль для админки 12345 смените на что-то безопасное.

После запуска можете проверить, доступна ли админка CODE по адресу https://domain.com/loleaflet/dist/admin/admin.html

Установите интеграцию с Collabora Online в приложениях Nextcloud:

Установка Collabora Online в Nextcloud

А также указать в настройках облака путь до поднятого сервиса:

Этого достаточно, чтобы документы, таблицы и презентации в Nextcloud можно было создавать и редактировать, не ставя какие-то другие программы или сервисы.

Опыт использования

Впервые я обратил внимание на Nextcloud в июне 2016 года, когда немецкий разработчик Фрэнк Карлитшек ушёл из основанной им компании ownCloud Inc и представил общественности Nextcloud — форк продукта, над которым работал ранее.

Чтобы понять, почему он так поступил, я установил ownCloud и Nextcloud параллельно, сравнил их возможности и… снёс. Пользоваться ими было решительно невозможно. Они тормозили и глючили. Это странно, учитывая их нацеленность на энтерпрайз — компаниям стабильность нужна как воздух. С тех пор оба продукта развиваются параллельно, но вроде как в Nextcloud больше возможностей, разработчики открытого софта сконцентрировались на нём.

Сейчас (в 2018 году) Nextcloud работает почти стабильно. Главная проблема — маленькие (до мегабайта) файлы. Когда таковых в одном каталоге соберётся больше нескольких сотен, сервер начнёт тормозить. А если ещё кто-нибудь загрузит битую картинку, то из-за этого засранца сервер начнёт стабильно «падать», потому что Nextcloud будет пытаться раз за разом безуспешно генерировать иконку превью.

В остальном всё нормально и работает так, как заявлено разработчиками. Хотелось бы большего функционала, например, нормальных встроенных редактора и просмотрщика фотографий, но продукт и так сложный, нельзя ожидать их появления в ближайшем будущем.

Итог

Сейчас валютой стали личные данные пользователей. Совершается натурально-цифровой обмен между людьми и корпорациями: мы им рассказываем о потаённом, они предоставляют сервис. Такие продукты, как Nextcloud, дают возможность реже торговать информацией о себе.

А что делаете вы для защиты своих данных?

25 комментариев

  1. Влад

    Здравствуйте. У меня возникла такая ситуация, подобно как здесь https://help.nextcloud.com/t/advanced-file-access-control/12426 Удалось ли решить её Вам?

    Ответить

    • Дмитрий Глашков

      Здравствуйте, Влад. Описанный по ссылке способ разграничения прав доступа потребует серьёзной доработки Nextcloud. И это не проблема, а всего лишь субъективное мнение насчёт того, как должно работать облако. Я не пишу плагины для Nextcloud, да и так заморачиваться с разграничением прав мне не нужно, поэтому нет, не решил.

      Ответить

  2. lopar

    У Nextcloud нет клиента для Windows и Linux, до удобства использования Яндекс.Диска и Дропбокса ему далеко, но работать с файлами можно.

    Как же нет, если есть? И для линукс, и для виндовс, и для яблок.

    Ответить

    • Дмитрий Глашков

      Вы правы, конечно же клиенты есть. Я там фразу пропустил о том, у Nextcloud нет такого удобного клиента, как у Яндекс.Диска. Переписал абзац.

      Ответить

  3. Виктор

    Что то я так и не понял, как отключить шифрование в некстклоуде. в описании модуля написано, что уже отключить его невозможно…
    Подскажите пожалуйста!

    Ответить

    • Дмитрий Глашков

      При включении шифрования все новые файлы шифруются, старые остаются как есть. Так что, если после включения модуля ничего не заливали, можно отключить. И даже если залили что-то новое, можно скопировать эти данные куда-нибудь в безопасное место, выключить шифрование командой occ encryption:disable и залить файлы снова. Вся информация находится в документации и мне, собственно, нечего добавить.

      Ответить

      • Виктор

        и где эту команду вводить? По SSH? (если да, то сервак мне отвечает: Command ‘occ’ not found, but there are 21 similar ones.)

        Ответить

      • Дмитрий Глашков

        Это обычный php файл в каталоге с NextCloud. Я не зря дал ссылку на документацию. Там много чего интересного есть. Если кратко, occ можно развернуть до такой команды:
        sudo -u www-data php /путь/до/occ

        Ответить

  4. николай

    Здравствуйте, Дмитрий!
    Тестирую Некстклоуд как юзер в компании. Можно ли сделать в НС как в Апплклоуд — при сносе данных на клиентской тачке (например вирусом) данные сохранятся в облаке, а не тут же удалятся, не обнаружив копий на клиентской машине?

    Ответить

    • Дмитрий Глашков

      Николай, не знаю. Это хороший способ сберечь свои данные, но «из коробки» в Nextcloud такой функции нет. Возможно, кто-то делал, но я не интересовался таким и не встречал.

      Ответить

      • николай

        Спасибо за ответ, очень жаль, что нет такой функции, хотя она напрашивается и резко повышает привлекательность НС для тех , кто озабочен именно сохранением данных, а не просто их хранением в облаке.

        Ответить

      • Дмитрий Глашков

        Понимаете, Apple iCloud и Nextcloud — это продукты, решающие разные задачи. Некорректно сравнивать комплексную инфраструктуру из программных решений, в которой операционная система и облако работают в тандеме, и облачное хранилище, смысл существования которого — организовать то самое облако. Так что нет никаких шансов, что авторы Nextcloud подумают о такой опции — просто потому, что эта функция не решается на стороне облака. Кому подобное будет экономически выгодно — запилят клиент к NC, который сможет синхронизировать данные более умно, чем сейчас, или доработают один из существующих с открытым исходным кодом.

        Ответить

  5. Сергей

    Спасибо за статью.
    Я к системному администрированию мало отношения имею, но по работе намечается необходимость отказа от сторонних облачных хранилищ. Т.к. опыта мало, поставил на VM готовый образ NC и тестирую в свободное время функционал, настройки и постепенно подбираюсь к мануалам от разработчиков. Радует, что все функции в свободном доступе. Единственная проблема — обеспечение отказоустойчивости при вменяемом уровне безопасности.
    Скажите, был ли опыт установки NC с включенным шифрованием на RAID5? Какие могут быть системные требования для реализации подобной схемы при 20-ти активных пользователях? Есть ли подводные камни?

    Ответить

    • Дмитрий Глашков

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

      Ответить

  6. Max_spb

    Простой вопрос: можно ли использовать клиент Next, который будет вижно в проводнике Win, но не хранить данные локально вообще? Т.е. работать с папкой всегда как с облаком, без какой-то синхронизации.

    Ответить

    • Дмитрий Глашков

      Max_spb, официальный клиент Nextcloud не поддерживает работу в таком режиме. Можно подключить сетевой диск по протоколу WebDAV, но в Проводнике Windows это будет работать кривовато — с ограничениями на размер загружаемых файлов, неправильным отображением свободного места. О WevDAV написано в документации: https://docs.nextcloud.com/server/latest/user_manual/ru/files/access_webdav.html Есть и сторонний софт, подключающий облака NextCloud как диски, но он платный, я толком не тестировал, посоветовать что-либо проверенное не могу.

      Ответить

  7. Юзер

    Здравствуйте!
    Как настроить Nextcloud, чтобы путь к файлу был в УРЛ правильным….
    типа site.ru/docs/otchety/plan2.pdf
    А то сейчас какие-то сгенерированные ссылки непонятные!
    Спасибо!

    Ответить

  8. Ilya

    Здравствуйте
    Сделал поставил себе образ nextcloud на vmware, все получилось, настроил. Я в линуксе не разбираюсь и есть такой вопрос, что если сервер перестанет работать по каким либо причинам, смогу ли я вытащить файлы с виртуального диска? И есть ли какая то возможность подключить к nextcloud диск уже с файлами, чтобы не загружать их потом по интернету?
    Заранее спасибо.

    Ответить

    • Дмитрий Глашков

      Ilya, поздравляю с успешной настройкой. Да, наличия доступа к диску достаточно для восстановления. Ведь NC по сути — каталог, в котором хранятся подкаталоги с конфигами, файлами пользователей, самим NC и его приложениями, а также база данных, которая обслуживается внешним софтом (MySQL, MariaDB и т.п.). Так что можно будет скопировать каталоги с NC и БД и запустить на новом сервере.

      И есть ли какая то возможность подключить к nextcloud диск уже с файлами

      Файлы пользователя — это не только файлы на диске, но и сопутствующая информация, хранимая в БД и других местах. Поэтому даже если такой способ существует (о чём я не в курсе), то надёжнее загружать файлы через веб-интерфейс или WebDAV, чтобы сохранить целостность данных.

      Ответить

      • Ilya

        Благодарю за быстрый ответ.
        Дали некоторую ясность, но под «вытащить файлы» я имел ввиду смогу ли я получить доступ к ним не создавая новый сервер, а просто каким то образом их скинуть и потом открыть допустим на пк с windows… Опять же я начал разбираться в линуксе в этом месяце по этому уровень моих знаний равен 0.

        Ответить

      • Дмитрий Глашков

        Когда шифрование выключено, файлы хранятся с неизменённым содержимым в отдельном каталоге, их можно будет открыть. Вот только имена будут другие, совершенно не информативные. То есть да, получить доступ можно.

        Ответить

      • Ilya

        Спасибо за ответы.

        Ответить

      • Ilya

        Здравствуйте ещё раз, у меня появилась проблема. Почему то при вводе домена(zdrive.su) в адресную строку почему то по умолчанию открывается порт 9443(adminer), но по скольку он не проброшен в роутере да и в этом нету смысла т.к это управление бд, то сайт не открывает.

        Ответить

Написать комментарий

Правила:
  • 1. Уважайте стороннее мнение. Токсичные комментарии удаляются.
  • 2. Комментарии со ссылками видны после проверки модератором.
  • 3. Обсуждение нелицензионного софта и других незаконных тем запрещено.

Тема Rowling от Anders Norén. Копирование материалов сайта разрешается только с указанием автора и активной ссылкой на источник.