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. Необходимо создать аккаунт администратора придумав имя и пароль.
Каталог с данными /Data оставляем по умолчанию.
Так как мы хотим использовать PostgreSQL, то нам нужно явно указать это. Для этого нажимаем Storage & database (Хранилище и база данных).
Откроется окно с дополнительными настройками.
Выбираем пункт PostgreSQL. Нам необходимо вписать туда свои данные, которые находятся в файле docker-compose.yml.
Внимательно проверяем корректность заполненных данных.
По желанию включаем или выключаем пункт Install recommended apps (Установить рекомендуемые приложения).
Нажимаем кнопку Finish setup (Завершить установку).
Добавление доверенного домена в Nextcloud:
Необходимо отредактировать файл /path/to/config/www/nextcloud/config/config.php (/path/to/config - тот путь, который указывали в docker-compose.yml). В этом файле изменить
array ( 0 => 'ip-address:port', ),
добавив необходимый домен или ip-адрес. Отсчёт идет с 0.
sudo docker-compose down sudo docker-compose up -d
FAQ
Ошибки при установке NextCloud и приложений
На медленных машинах ошибка 504 Gateway Time-out
Необходимо отредактировать файл 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;
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 в следующем месте:
// Download the release $tempFile = $this->tempManager->getTemporaryFile('.tar.gz'); $timeout = $this->isCLI ? 0 : 120; // Нужно поставить большее время $client = $this->clientService->newClient();
Изменить 120 (секунд) на большее значение или удалить условие и оставить его всегда равным 0 (неограниченно, но, возможно, не лучшая идея).
cURL error 28: SSL connection timeout
Для исправления этой ошибки необходимо изменить параметр MTU для WireGuard до 1500.
Чтобы это сделать нужно в параметрах конфигурации сервера WireGuard указать следующее:
[Interface] Address = ###.###.###.###/## MTU = 1500 ...
И это же нужно сделать и для клиента WireGuard, на котором установлен NextCloud:
[Interface] PrivateKey = xxxxxxxxxxxxxxxxxx MTU = 1500 ...
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,]; в следующем месте:
/** * 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, ]; }
Ошибки при работе с NextCloud
Ошибка при синхронизации: Can't update non-existing placeholder info
Для исправления этой ошибки необходимо удалить .sync*-файлы, после выхода из nextcloud-desktop-client
Убираем надпись Режим технического обслуживания
Для этого необходимо отредактировать файл /path/to/config/www/nextcloud/config/config.php (/path/to/config - тот путь, который указывали в docker-compose.yml).
Находим строку 'maintenance' = true,
Изменяем параметр на false, получается: 'maintenance' = false.
Internal Server Error после перезапуска контейнера
Для этого необходимо проверить docker-compose.yml, а именно volumes для хранения конфигурации БД. Если данные не сохраняются после перезапуска контейнера, теряется доступ к БД, что приводит к появлению ошибки.