====== NextCloud: личное облачное хранилище ====== [[https://antoshabrain.blogspot.com/2021/12/docker-nextcloud-postgres-redis-amd64.html]] ===== Общие сведения ===== Бесплатный. Умеет шифровать данные. Умеет синхронизировать файлы и папки. Умеет работать по протоколу сетевой файловой системы WebDAV. Обладает большим количеством плагинов и дополнений. Есть, например плагин для хранения и структурирования ссылок под названием Bookmarks. Плагин аудиоплеер. Плагин для ведения базы паролей. Плагин для редактирования контактов - имена, номера телефонов, почта, дополнительные поля с быстрым поиском. Даже книга с рецептами присутствует). Кроссплатформенный. Изначально работает в браузере, а также существуют клиенты под Windows, Linux, MacOS, Android, iOS. Скачать клиент под необходимое ПО можно отсюда. Имеет очень гибкую систему управления пользователями и группами. Такой функционал очень пригодится бизнесу, можно разграничивать разные отделы и иметь полный контроль над всем. При установке дополнения появляется возможность делиться файлами через веб-ссылки. ====== Пошаговая установка ====== В качестве базового образа для развертывания NextCloud будем использовать: [[https://hub.docker.com/r/linuxserver/nextcloud]]. Это связано с тем, что официальный образ имеет проблемы с доступом в интернет. ===== Шаг 1 ===== Создаем необходимые директории для NextCloud на сервере. * для хранения конфигурационных файлов (например, папка config) * для хранения данных (например, папка data) sudo mkdir -p /app/nextcloud/nextcloud/{config,data} #команда для создания нескольких директорий одной командой ===== Шаг 2 ===== Переходим в директорию nextcloud: cd /app/nextcloud/ И создаем файл docker-compose.yml: vi docker-compose.yml version: '2' volumes: nextcloud: db: services: db: image: postgres:latest container_name: postgres-nextcloud #имя контейнера restart: unless-stopped volumes: - db:/var/lib/postgresql/data environment: - POSTGRES_DB=name_db #наименование БД - POSTGRES_USER=user_db #имя пользователя - POSTGRES_PASSWORD=password #пароль app: image: lscr.io/linuxserver/nextcloud:latest container_name: nextcloud #имя контейнера restart: unless-stopped ports: - 443:443 #указать нужный порт links: - db environment: - TZ=Etc/UTC volumes: - /path/to/data:/data #/home/disk_data/nextcloud - /path/to/config:/config #./nextcloud/apps Запускаем контейнер: sudo docker-compose up -d ===== Шаг 3 ===== Теперь необходимо перейти в браузере по адресу сервера с указанием порта из docker-compose.yml. Если всё сделано правильно, можно увидеть стартовую страницу NextCloud. Необходимо создать аккаунт администратора придумав имя и пароль. {{ :software:nextcloud:nextcloud-2.png?direct&400 | }} Каталог с данными /Data оставляем по умолчанию. Так как мы хотим использовать PostgreSQL, то нам нужно явно указать это. Для этого нажимаем **Storage & database** (**//Хранилище и база данных//**). Откроется окно с дополнительными настройками. Выбираем пункт PostgreSQL. Нам необходимо вписать туда свои данные, которые находятся в файле docker-compose.yml. {{ :software:nextcloud:nextcloud-3.png?direct&400 | }} Внимательно проверяем корректность заполненных данных. По желанию включаем или выключаем пункт **Install recommended apps** (**//Установить рекомендуемые приложения//**). Нажимаем кнопку **Finish setup** (**//Завершить установку//**). Необходимо отредактировать файл **/path/to/config/www/nextcloud/config/config.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить array ( 0 => 'ip-address:port', ), добавив необходимый домен или ip-адрес. Отсчёт идет с 0. После установки для проверки корректной работы Nextcloud и БД можно остановить контейнер и затем его запустить. Если все корректно работает, то никаких ошибок не будет. sudo docker-compose down sudo docker-compose up -d ====== FAQ ====== ===== Ошибки при установке NextCloud и приложений ===== Необходимо отредактировать файл **config/nginx/site-confs/default** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить область **location ~ \.php(?:$|/)** добавив: fastcgi_read_timeout 600; fastcgi_send_timeout 600; fastcgi_connect_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; **Источник информаци:** [[https://github.com/linuxserver/docker-nextcloud/issues/211]] Необходимо отредактировать файл **/path/to/config/www/nextcloud/lib/private/Installer.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить **curl’s timeout** в следующем месте: // Download the release $tempFile = $this->tempManager->getTemporaryFile('.tar.gz'); $timeout = $this->isCLI ? 0 : 120; // Нужно поставить большее время $client = $this->clientService->newClient(); Изменить **120** (секунд) на большее значение или удалить условие и оставить его всегда равным 0 (неограниченно, но, возможно, не лучшая идея). **Источники информации:** [[https://help.nextcloud.com/t/community-document-server-curl-error-28-operation-timed-out-after-120000-millisecond/80589/17]] [[https://installconfig.com/doku.php?id=nextcloud_apps_onlyoffice_document_server_curl_error_28_operation_timed_out_after_120000_milliseconds]] Для исправления этой ошибки необходимо изменить параметр MTU для WireGuard до 1500. Чтобы это сделать нужно в параметрах конфигурации сервера WireGuard указать следующее: [Interface] Address = ###.###.###.###/## MTU = 1500 ... И это же нужно сделать и для клиента WireGuard, на котором установлен NextCloud: [Interface] PrivateKey = xxxxxxxxxxxxxxxxxx MTU = 1500 ... **Источники информации:** [[https://help.nextcloud.com/t/solved-cant-install-any-app/156508]] [[https://gist.github.com/nitred/f16850ca48c48c79bf422e90ee5b9d95#file-peer_mtu_vs_bandwidth-png]] Для исправления этой ошибки необходимо отредактировать файл **/path/to/config/www/nextcloud/lib/private/App/AppStore/Fetcher/Fetcher.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить **$options = ['timeout' => 60,];** в следующем месте: /** * Fetches the response from the server * * @param string $ETag * @param string $content * * @return array */ protected function fetch($ETag, $content) { $appstoreenabled = $this->config->getSystemValueBool('appstoreenabled', true); if ((int)$this->config->getAppValue('settings', 'appstore-fetcher-lastFailure', '0') > time() - self::RETRY_AFTER_FAILURE_SECONDS) { return []; } if (!$appstoreenabled) { return []; } $options = [ 'timeout' => 600, // По умолчанию стоит 60, нужно поставить больше ]; if ($ETag != '') { $options['headers'] = [ 'If-None-Match' => $ETag, ]; } **Источник информации:** [[https://linuxfun.org/en/2021/07/02/how-to-resolve-nextcloud-no-apps-error-en/]] ===== Ошибки при работе с NextCloud ===== Для исправления этой ошибки необходимо удалить .sync*-файлы, после выхода из nextcloud-desktop-client **Источник информации:** [[https://www.reddit.com/r/NextCloud/comments/10f3uyo/cant_update_nonexisting_placeholder_info/]] Для этого необходимо отредактировать файл **/path/to/config/www/nextcloud/config/config.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). Находим строку **'maintenance' = true**, Изменяем параметр на false, получается: **'maintenance' = false**. **Источник информации:** [[https://pozitivwork.blogspot.com/2020/01/nextcloud.html]] Для этого необходимо проверить docker-compose.yml, а именно volumes для хранения конфигурации БД. Если данные не сохраняются после перезапуска контейнера, теряется доступ к БД, что приводит к появлению ошибки. **Источник информации:** [[https://github.com/nextcloud/docker/issues/1457]]