Показать страницуИстория страницыСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== NextCloud: личное облачное хранилище ====== <callout icon="true" type="info" title="Материал основан на следующей статье:"> [[https://antoshabrain.blogspot.com/2021/12/docker-nextcloud-postgres-redis-amd64.html]]</callout> ===== Общие сведения ===== Бесплатный. Умеет шифровать данные. Умеет синхронизировать файлы и папки. Умеет работать по протоколу сетевой файловой системы WebDAV. Обладает большим количеством плагинов и дополнений. Есть, например плагин для хранения и структурирования ссылок под названием Bookmarks. Плагин аудиоплеер. Плагин для ведения базы паролей. Плагин для редактирования контактов - имена, номера телефонов, почта, дополнительные поля с быстрым поиском. Даже книга с рецептами присутствует). Кроссплатформенный. Изначально работает в браузере, а также существуют клиенты под Windows, Linux, MacOS, Android, iOS. Скачать клиент под необходимое ПО можно отсюда. Имеет очень гибкую систему управления пользователями и группами. Такой функционал очень пригодится бизнесу, можно разграничивать разные отделы и иметь полный контроль над всем. При установке дополнения появляется возможность делиться файлами через веб-ссылки. ====== Пошаговая установка ====== В качестве базового образа для развертывания NextCloud будем использовать: [[https://hub.docker.com/r/linuxserver/nextcloud]]. Это связано с тем, что официальный образ имеет проблемы с доступом в интернет. ===== Шаг 1 ===== Создаем необходимые директории для NextCloud на сервере. * для хранения конфигурационных файлов (например, папка config) * для хранения данных (например, папка data) <code bash>sudo mkdir -p /app/nextcloud/nextcloud/{config,data} #команда для создания нескольких директорий одной командой</code> ===== Шаг 2 ===== Переходим в директорию nextcloud: <code bash>cd /app/nextcloud/</code> И создаем файл docker-compose.yml: <code bash>vi docker-compose.yml</code> <accordion> <panel type="primary" title="Примерное содержимое файла:"> <code yaml> 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 </code> </panel> </accordion> Запускаем контейнер: <code bash>sudo docker-compose up -d</code> ===== Шаг 3 ===== Теперь необходимо перейти в браузере по адресу сервера с указанием порта из docker-compose.yml. Если всё сделано правильно, можно увидеть стартовую страницу NextCloud. Необходимо создать аккаунт администратора придумав имя и пароль. <image shape="rounded">{{ :software:nextcloud:nextcloud-2.png?direct&400 | }}</image> Каталог с данными /Data оставляем по умолчанию. Так как мы хотим использовать PostgreSQL, то нам нужно явно указать это. Для этого нажимаем **Storage & database** (**//Хранилище и база данных//**). Откроется окно с дополнительными настройками. Выбираем пункт PostgreSQL. Нам необходимо вписать туда свои данные, которые находятся в файле docker-compose.yml. <image shape="rounded">{{ :software:nextcloud:nextcloud-3.png?direct&400 | }}</image> Внимательно проверяем корректность заполненных данных. По желанию включаем или выключаем пункт **Install recommended apps** (**//Установить рекомендуемые приложения//**). Нажимаем кнопку **Finish setup** (**//Завершить установку//**). <accordion> <panel type="primary" title="Добавление доверенного домена в Nextcloud:"> Необходимо отредактировать файл **/path/to/config/www/nextcloud/config/config.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить <code php> array ( 0 => 'ip-address:port', ), </code> добавив необходимый домен или ip-адрес. Отсчёт идет с 0. </panel> </accordion> <note tip> После установки для проверки корректной работы Nextcloud и БД можно остановить контейнер и затем его запустить. Если все корректно работает, то никаких ошибок не будет. <code bash> sudo docker-compose down sudo docker-compose up -d </code> </note> ====== FAQ ====== ===== Ошибки при установке NextCloud и приложений ===== <accordion> <panel type="danger" title="На медленных машинах ошибка 504 Gateway Time-out"> Необходимо отредактировать файл **config/nginx/site-confs/default** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить область **location ~ \.php(?:$|/)** добавив: <code 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; </code> <alert type="info"> **Источник информаци:** [[https://github.com/linuxserver/docker-nextcloud/issues/211]] </alert> </panel> <panel type="danger" title="cURL error 28: Operation timed out after ****** milliseconds"> Необходимо отредактировать файл **/path/to/config/www/nextcloud/lib/private/Installer.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить **curl’s timeout** в следующем месте: <code php> // Download the release $tempFile = $this->tempManager->getTemporaryFile('.tar.gz'); $timeout = $this->isCLI ? 0 : 120; // Нужно поставить большее время $client = $this->clientService->newClient(); </code> Изменить **120** (секунд) на большее значение или удалить условие и оставить его всегда равным 0 (неограниченно, но, возможно, не лучшая идея). <alert type="info"> **Источники информации:** [[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]] </alert> </panel> <panel type="danger" title="cURL error 28: SSL connection timeout"> Для исправления этой ошибки необходимо изменить параметр MTU для WireGuard до 1500. Чтобы это сделать нужно в параметрах конфигурации сервера WireGuard указать следующее: <code> [Interface] Address = ###.###.###.###/## MTU = 1500 ... </code> И это же нужно сделать и для клиента WireGuard, на котором установлен NextCloud: <code> [Interface] PrivateKey = xxxxxxxxxxxxxxxxxx MTU = 1500 ... </code> <alert type="info"> **Источники информации:** [[https://help.nextcloud.com/t/solved-cant-install-any-app/156508]] [[https://gist.github.com/nitred/f16850ca48c48c79bf422e90ee5b9d95#file-peer_mtu_vs_bandwidth-png]] </alert> </panel> <panel type="danger" title="Could not connect to Appstore: cURL error 28"> Для исправления этой ошибки необходимо отредактировать файл **/path/to/config/www/nextcloud/lib/private/App/AppStore/Fetcher/Fetcher.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить **$options = ['timeout' => 60,];** в следующем месте: <code php> /** * 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, ]; } </code> <alert type="info"> **Источник информации:** [[https://linuxfun.org/en/2021/07/02/how-to-resolve-nextcloud-no-apps-error-en/]] </alert> </panel> </accordion> ===== Ошибки при работе с NextCloud ===== <accordion> <panel type="danger" title="Ошибка при синхронизации: Can't update non-existing placeholder info"> Для исправления этой ошибки необходимо удалить .sync*-файлы, после выхода из nextcloud-desktop-client <alert type="info"> **Источник информации:** [[https://www.reddit.com/r/NextCloud/comments/10f3uyo/cant_update_nonexisting_placeholder_info/]] </alert> </panel> <panel type="danger" title="Убираем надпись Режим технического обслуживания"> Для этого необходимо отредактировать файл **/path/to/config/www/nextcloud/config/config.php** (/path/to/config - тот путь, который указывали в docker-compose.yml). Находим строку **'maintenance' = true**, Изменяем параметр на false, получается: **'maintenance' = false**. <alert type="info"> **Источник информации:** [[https://pozitivwork.blogspot.com/2020/01/nextcloud.html]] </alert> </panel> <panel type="danger" title="Internal Server Error после перезапуска контейнера"> Для этого необходимо проверить docker-compose.yml, а именно volumes для хранения конфигурации БД. Если данные не сохраняются после перезапуска контейнера, теряется доступ к БД, что приводит к появлению ошибки. <alert type="info"> **Источник информации:** [[https://github.com/nextcloud/docker/issues/1457]] </alert> </panel> </accordion>