====== 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]]