Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Nextcloud с Docker: как установить

Никита Долгих
Никита Долгих
Технический писатель
11 января 2024 г.
3874
13 минут чтения
Средний рейтинг статьи: 4.5

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

В контексте развертывания, Docker предоставляет удобные и эффективные средства для установки и управления Nextcloud. Он использует технологию контейнеризации для изоляции приложений, что упрощает процесс развертывания и конфигурации, а также обеспечивает более легкую масштабируемость и переносимость приложений. Использование Docker в сочетании с Docker Compose позволяет автоматизировать и стандартизировать развертывание приложений, что делает его доступным даже для пользователей без глубоких технических знаний в области серверного администрирования.

В этой статье будет рассмотрена процедура установки Nextcloud с применением Docker Compose. Будет также затронута тема конфигурирования Nginx как обратного прокси и детально рассмотрен процесс получения SSL-сертификата через Certbot, что необходимо для создания защищённого соединения.

Установка Docker и Docker Compose

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

Скачайте скрипт установки командой:

curl -fsSL https://get.docker.com -o get-docker.sh

Этот скрипт предназначен для автоматизации процесса установки Docker на различные дистрибутивы Linux.

Запустите скрипт:

sudo sh ./get-docker.sh

Это обеспечит установку Docker и Docker Compose. Опция --dry-run позволяет просмотреть действия скрипта без их выполнения.

После выполнения скрипта убедитесь, что Docker и Docker Compose корректно установлены. Для этого воспользуйтесь командами:

docker -v
docker compose version

Эти команды должны вывести версии установленных утилит соответственно, подтверждая успешную установку.

Подготовка к установке Nextcloud

Создание рабочего каталога

Для установки сторонних приложений в системах Linux часто используется директория /opt. Переходите в эту директорию с помощью команды:

cd /opt

Создайте папку twnextcloud в директории /opt. Эта папка будет служить рабочим каталогом для вашего экземпляра Nextcloud:

mkdir twnextcloud

Настройка файла docker-compose.yml

После создания директории перейдите в неё:

cd twnextcloud

Настройки Docker Compose будут определены в файле docker-compose.yml. Чтобы его отредактировать, можно воспользоваться текстовым редактором, например nano или vim, открыв файл следующим образом:

nano docker-compose.yml

В нем следует указать:

version: '2'

volumes:
  twnextcloud:
  db:

services:
  db:
    image: mariadb:10.6
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=RootPass
      - MYSQL_PASSWORD=NextPass
      - MYSQL_DATABASE=nextcloudtw
      - MYSQL_USER=nextcloudtw

  app:
    image: nextcloud
    restart: unless-stopped
    ports:
      - 8081:80
    links:
      - db
    volumes:
      - twnextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=NextPass
      - MYSQL_DATABASE=nextcloudtw
      - MYSQL_USER=nextcloudtw
      - MYSQL_HOST=db

Значения параметров:

  • version: '2': Указывает версию Docker Compose, используемую в данной конфигурации. Версия 2 предназначена для более простых и стабильных конфигураций.

  • volumes: Определяет два именованных тома: twnextcloud и db. Эти тома используются для хранения данных за пределами контейнеров, что обеспечивает их сохранность даже после удаления или перезапуска контейнеров.

  • services: Определяет два сервиса — db и app.

  • db:
    • image: mariadb:10.6: Использует образ MariaDB версии 10.6.

    • restart: unless-stopped: Автоматический перезапуск сервиса, если он не был остановлен вручную.

    • command: Задает специальные параметры запуска MariaDB для оптимизации производительности и безопасности.

    • volumes: Связывает именованный том db с директорией /var/lib/mysql в контейнере для хранения данных базы данных.

    • environment: Устанавливает переменные окружения для конфигурации базы данных, включая пароли и названия базы данных и пользователя.

  • app:
    • image: nextcloud: Использует образ Nextcloud.

    • restart: unless-stopped: Аналогично сервису db, обеспечивает автоматический перезапуск.

    • ports: Пробрасывает порт 8081 хост-системы на порт 80 в контейнере, что позволяет получить доступ к приложению через порт 8081.

    • links: Связывает контейнер app с контейнером db, обеспечивая взаимодействие между приложением и базой данных.

    • volumes: Связывает именованный том twnextcloud с директорией /var/www/html в контейнере для хранения данных приложения.

    • environment: Устанавливает переменные окружения, связанные с базой данных, аналогичные тем, что в сервисе db, и указывает хост базы данных.

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

Запуск и настройка Nextcloud

После описания конфигурации в docker-compose.yml, пора запустить проект.

В директории twnextcloud, где находится ваш docker-compose.yml, выполните эти команды для скачивания образов и запуска контейнеров:

docker compose pull
docker compose up

Команда docker compose pull сначала загрузит необходимые образы для Nextcloud и MariaDB. После этого docker compose up запустит контейнеры на основе вашей конфигурации.

Во время первого запуска начнется процесс предварительной настройки. Этот процесс может занять некоторое время.

Как только вы увидите сообщения:

nextcloud-app-1  | New nextcloud instance
nextcloud-app-1  | Initializing finished

— значит, первичная настройка завершена.

После завершения предварительной настройки, вы можете обратиться к приложению из браузера. Введите http://ip-сервера:8081 в адресную строку вашего браузера.

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

Image3

В процессе первичной конфигурации вы также можете выбрать дополнительные приложения для установки.

Image1

Остановка и перезапуск контейнеров в фоновом режиме

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

Если контейнеры все еще работают в интерактивном режиме (после использования docker compose up без -d), остановите их, нажав Ctrl+C в терминале.

Для перезапуска контейнеров в фоновом режиме (так, чтобы они продолжали работать в фоне даже после закрытия терминала), используйте команду:

docker compose up -d

Флаг -d означает «detached mode», что позволяет контейнерам работать независимо от вашего текущего сеанса терминала.

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

Настройка Nginx как обратного прокси

Установка

В качестве обратного прокси часто выбирают Nginx за его производительность и гибкость. Установить его можно, выполнив команду:

sudo apt install nginx

Конфигурирование Nginx

Создайте файл конфигурации Nginx для вашего домена (например, nextcloud-twtest.com). Используйте текстовый редактор для создания файла в директории /etc/nginx/sites-available/:

sudo nano /etc/nginx/sites-available/nextcloud-twtest.com

Добавьте в файл следующие директивы:

server {
    	listen 80;
    	server_name nextcloud-twtest.com;

    	location / {
            	proxy_pass http://localhost:8081;
            	proxy_set_header Host $host;
            	proxy_set_header X-Real-IP $remote_addr;
            	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            	proxy_set_header X-Forwarded-Proto $scheme;
            	add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
    	}
            	location ^~ /.well-known {
            	location = /.well-known/carddav { return 301 /remote.php/dav/; }
            	location = /.well-known/caldav  { return 301 /remote.php/dav/; }
            	location /.well-known/acme-challenge	{ try_files $uri $uri/ =404; }
            	location /.well-known/pki-validation	{ try_files $uri $uri/ =404; }
            	return 301 /index.php$request_uri;
    	}
}

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

Вот подробное объяснение основных параметров:

  • Основная конфигурация
server {
    listen 80;
    server_name nextcloud-twtest.com;

    location / {
        proxy_pass http://localhost:8081;
        ...
    }
}

Здесь мы настраиваем сервер для прослушивания порта 80 (стандартный HTTP) и обрабатываем запросы, направленные на nextcloud-twtest.com. Все запросы перенаправляются на локальный сервер на порту 8081 с помощью proxy_pass. Это наш контейнер Docker, в котором запущен Nextcloud.

  • Настройки Proxy
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

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

  • HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;

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

  • Настройки для Well-Known URIs
location ^~ /.well-known {
...
}

Этот блок обрабатывает специальные запросы к /.well-known URI, которые часто используются для обнаружения сервисов (например, CalDAV и CardDAV) и проверки владения доменом (например, при получении SSL-сертификатов от Let's Encrypt).

  • /.well-known/carddav и /.well-known/caldav перенаправляются на соответствующие точки входа в Nextcloud.

  • Запросы к /.well-known/acme-challenge и /.well-known/pki-validation обрабатываются для поддержки получения и проверки SSL-сертификатов.

  • Все остальные запросы к /.well-known перенаправляются на front-end-контроллер.

Сделайте символическую ссылку на созданный файл конфигурации из директории /etc/nginx/sites-enabled/:

sudo ln -s /etc/nginx/sites-available/nextcloud-twtest.com /etc/nginx/sites-enabled/

Теперь перезагрузим nginx для применения новой конфигурации:

sudo systemctl restart nginx

Теперь веб-сервер настроен как обратный прокси для приложения, и вы можете обращаться к Nextcloud через ваш домен (если обратиться по домену сейчас, вы увидите ошибку «Access through untrusted domain», ее исправлением мы займемся позже) . 

Настройка SSL-сертификата с использованием Certbot

Установка Certbot

Certbot — это инструмент от Electronic Frontier Foundation (EFF), предназначенный для управления сертификатами Let's Encrypt. Он автоматизирует процесс получения, установки и обновления SSL-сертификатов, что способствует повышению безопасности вашего сайта, обеспечивая защиту данных, передаваемых между сервером и клиентами.

Для установки Certbot и соответствующего плагина для Nginx, используйте команду:

sudo apt install certbot python3-certbot-nginx

Получение и Установка SSL-сертификата

Для получения SSL-сертификата для вашего домена и настройки веб-сервера для использования полученного сертификата, выполните команду:

sudo certbot --non-interactive -m admin@nextcloud-twtest.com --agree-tos --no-eff-email --nginx -d nextcloud-twtest.com

В этой команде:

  • --non-interactive: Запускает Certbot в режиме без взаимодействия с пользователем.

  • -m admin@nextcloud-twtest.com: Указывает адрес электронной почты для уведомлений о сертификате.

  • --agree-tos: Соглашается с условиями использования Let's Encrypt.

  • --no-eff-email: Отказывается от получения электронных писем от EFF.

  • --nginx: Использовать плагин Nginx для автоматической настройки SSL.

  • -d nextcloud-twtest.com: Указываем доменное имя, для которого будет выпущен сертификат.

Certbot автоматически скорректирует конфиг Nginx для использования SSL-сертификата, включая перенаправление с HTTP на HTTPS.

После завершения процесса перезапустите Nginx, чтобы применить изменения:

sudo systemctl restart nginx

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

Исправление ошибки «Access through untrusted domain»

При попытке доступа к Nextcloud через наш доменный адрес вы можете столкнуться с ошибкой «Access through untrusted domain». Это происходит, поскольку первоначальная настройка была выполнена при обращении по IP-адресу сервера.

Шаги для исправления ошибки

Так как наше приложение работает в контейнере, для редактирования конфигурационного файла config.php мы можем использовать один из двух методов: через docker exec или редактирование Docker Volume. Мы выберем второй метод, так как ранее в docker-compose.yml были созданы тома для хранения конфигураций.

Для начала необходимо узнать имя интересующего нас тома. Выполните команду:

docker volume ls

Эта команда покажет список всех томов. Нас интересует twnextcloud_twnextcloud.

Для получения доступа к тому выполните:

docker volume inspect twnextcloud_twnextcloud

В выводе команды найдите строку Mountpoint, которая покажет путь до тома.

Image2

Перейдите в него, используя:

cd /var/lib/docker/volumes/twnextcloud_twnextcloud/_data

Перейдите в директорию config и откройте файл config.php для редактирования:

cd config
nano config.php

В файле найдите и измените следующие строки:

  • Измените overwrite.cli.url с http://ip_сервера:8081 на https://ваш_домен.

  • В секции trusted_domains замените ip_сервера:8081 на ваш домен.

  • Добавьте строку 'overwriteprotocol' => 'https', сразу после overwrite.cli.url, чтобы обеспечить загрузку всех ресурсов по HTTPS.

После внесения изменений сохраните файл config.phpnano это делается комбинацией клавиш Ctrl + O), а затем выйдите из редактора (Ctrl + X).

После сохранения изменений в config.php вы можете обратиться к приложению по указанному вами домену и убедиться, что ошибка «Access through untrusted domain» больше не возникает.

Заключение

Процедура установки Nextcloud при помощи Docker Compose значительно упрощает процесс, минимизируя необходимость ручной настройки и подготовки сервера, делая его доступным даже для пользователей без глубоких знаний в области серверного администрирования.

Мы обсудили этапы инсталляции Docker и Docker Compose, составления конфигурационного файла docker-compose.yml и инициализации работы контейнеров. Кроме того, были изучены методы настройки Nginx как обратного прокси для повышения безопасности и производительности сервиса. В дополнение, мы изложили процедуру получения SSL-сертификата с использованием Certbot, что важно для защиты трафика между сервером и клиентами.

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
11 января 2024 г.
3874
13 минут чтения
Средний рейтинг статьи: 4.5
Комментарии 29
denkarter
denkarter
07.05.2024, 17:12

Здравствуйте. Благодарю за подробную инструкцию, всё получилось! Подскажите, пожалуйста, как делать бэкапы nextcloud, установленный по данной инструкции?

Timeweb
Timeweb
13.05.2024, 03:47

Добрый день! Для создания бэкапов можно использовать эти команды:

docker run --rm --volumes-from nextcloud-app-1 -v $(pwd):/backup ubuntu tar cvf ./backup/nextcloud-data-backup.tar /var/www/html/data
docker run --rm --volumes-from nextcloud-app-1 -v $(pwd):/backup ubuntu tar cvf ./backup/nextcloud-config-backup.tar /var/www/html/config
docker exec nextcloud-db-1 sh -c 'exec mysqldump --databases nextcloudtw -u root --password=RootPass' > ./nextcloud-db.sql

Первые две создают архивы директорий /var/www/html/data и /var/www/html/config в директории, в которой запускаются. Для создания используется промежуточный контейнер с Ubuntu, который удаляется после создания архивов. Последняя команда создает дамп базы данных в директории, в которой запущена команда.

Восстановить Nextcloud из полученных резервных копий можно следующими командами:

docker run --rm --volumes-from nextcloud-app-1 -v $(pwd):/backup ubuntu tar xvf /backup/nextcloud-data-backup.tar -C /
docker run --rm --volumes-from nextcloud-app-1 -v $(pwd):/backup ubuntu tar xvf /backup/nextcloud-config-backup.tar -C /
cat ./nextcloud-db.sql | docker exec -i nextcloud-db-1 sh -c 'exec mysql -u root --password=RootPass'

Первые две команды восстанавливают директории data и config из архивов, размещенных в директории, в которой запускаются команды. Для восстановления также используется промежуточный контейнер. Последняя команда восстанавливает базу данных из дампа. При восстановлении файлов стоит останавливать контейнеры командой docker compose down.

Апо Краузе
Апо Краузе
20.04.2024, 11:00

Отличная статья! Все по полочкам. Единственное пока не получается интегрировать с OnlyOffice в контейнере, если у Вас будет отдельная статья, или дополнение к этому, было бы замечательно.

Спасибо за Ваши труды!

Апо Краузе
Апо Краузе
21.04.2024, 12:11

Чтобы большие файлы заливались в nextcloud нужно добавить в конфигурацию client_max_body_size 512M; и перегрузить службу nginx

J D
J D
26.03.2024, 02:21

Добрый день. Установил в докере NC. Все работает, но выдает ошибки:

Ошибка	internet_connection_check
ConnectException
cURL error 7: Failed to connect to edri.org port 443 after 0 ms: Couldn't connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://edri.org/
Cannot connect to: https://edri.org/

Этот сервер не подключён к интернету: множество конечных устройств не могут быть доступны. Это означает, что не будут работать некоторые функции, такие как подключение внешнего хранилища, уведомления об обновлениях или установка сторонних приложений. Так же могут не работать удалённый доступ к файлам и отправка уведомлений по электронной почте. Для использования всех возможностей рекомендуется разрешить серверу доступ в Интернет.

Уже и в фаервол порты пробрасывал, и вообще отключал, не могу понять, почему нет доступа образа к интернет

Timeweb
Timeweb
27.03.2024, 03:44

Добрый день! Попробуйте выполнить следующее:.

  1. Подключиться к контейнеру:

docker exec -it bash

Имя контейнера можно узнать, выполнив docker ps.

  1. В файле /etc/resolv.conf поменять значение nameserver на, например, DNS Гугла: 8.8.8.8.

  2. Перезапустить контейнеры и проверить, сохраняется ли проблема:

docker compose restart

Alexander
Alexander
13.03.2024, 09:12

Остался вопрос в том, как включить вот эту настройку внутри докера?

he external storage FTP/FTPS needs the allow_url_fopen PHP setting to be set to 1. When having connection problems make sure that it is not set to 0 in your php.ini. See PHP version and information to learn how to find the right php.ini file to edit.

Timeweb
Timeweb
18.03.2024, 07:21

Значение allow_url_fopen выставлено в On по умолчанию в образе, который использовался в статье.

Если у вас значение в Off, можно попробовать изменить его таким образом:

  1. Подключаемся к контейнеру:

docker exec -it twnextcloud-app-1 bash

(twnextcloud-app-1 — имя контейнера docker)

  1. Устанавливаем значение в On:

echo 'allow_url_fopen = On' >> /usr/local/etc/php/conf.d/nextcloud.ini

  1. Отключаемся от контейнера и перезапускаем приложение:

docker compose restart

Vita Moore
Vita Moore
07.03.2024, 01:06

Проблема такая. В начале по инструкции запустил все на vmware, удалось зайти и установить приложения. Далее тоже самое решил сделать на VPS сервере и после того, как пытаюсь завести учетную запись, страница выдает ошибку "Страница недоступна, Сайт 1xx.xxx.xxx.35 не отправил данные. ERR_EMPTY_RESPONSE". Сервер Убунты сообщает "db-1 | 2024-03-07 3:59:45 15 [Warning] Aborted connection 15 to db: 'nextcloudtw' user: 'nextcloudtw' host: '172.18.0.3' (Got an error reading communication packets)".

Подскажите, в чем собственно проблема?

Timeweb
Timeweb
12.03.2024, 08:50

Добрый день! У данной ошибки может быть много причин. На Github есть обсуждение с разными вариантами решения.

Например, вы можете попробовать удалить и заново создать том с базой данных. Учитывайте, что все данные в БД будут удалены. Для этого найдите имя тома: docker volume ls Далее остановите контейнеры, если они запущены: docker-compose down Теперь удалите том: docker volume rm nextcloud_db А после запустите контейнеры вновь: docker-compose up -d

Кроме того, проверьте журналы логов MySQL и Docker. Это может помочь определить причину вашей проблемы.

Koryakinkv
Koryakinkv
06.03.2024, 14:16

Как обновить nextcloud установленный по данной инструкции?

Timeweb
Timeweb
12.03.2024, 08:45

Добрый день! Если в docker-compose.yml не указана версия Nextcloud, значит подразумевается, что используется последняя версия. В этом случае, для обновления, остановите контейнеры командой: docker-compose down Далее обновите образ: docker-compose pull И наконец, создайте и запустите контейнер с обновленным образом: docker-compose up -d

Константин Корякин
Константин Корякин
12.03.2024, 14:04

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

Как ее убрать?

Timeweb
Timeweb
18.03.2024, 07:20

Попробуйте выполнить:

sudo docker exec --user www-data -it twnextcloud-app-1 php occ maintenance:mode --off

Где twnextcloud-app-1 — имя контейнера, которое можно узнать, выполнив docker ps

Koryakinkv
Koryakinkv
15.02.2024, 12:53

При попытке получения сертификата certbot выдает ошибку An unexpected error occurred: AttributeError: can't set attribute Что делать?

Koryakinkv
Koryakinkv
17.02.2024, 12:37

При перезагрузке хоста ошибка исчезла, однако certbot не может выпустить ssl сертификат. При запуске команды sudo certbot --non-interactive -m admin@nextcloud-twtest.com --agree-tos --no-eff-email --nginx -d nextcloud-twtest.com (почту и адрес сайта естественно поменял на свои), certbot выдает ошибку: Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Requesting a certificate for ЗДЕСЬ МОЙ ДОМЕН Performing the following challenges: http-01 challenge for ЗДЕСЬ МОЙ ДОМЕН Waiting for verification... Challenge failed for domain ЗДЕСЬ МОЙ ДОМЕН http-01 challenge for ЗДЕСЬ МОЙ ДОМЕН

Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems: Domain: ЗДЕСЬ МОЙ ДОМЕН Type: unauthorized Detail: ЗДЕСЬ МОЙ IP: Invalid response from http://ЗДЕСЬ МОЙ ДОМЕН/.well-known/acme-challenge/wZdOh2yoobxmwKESpJq8rBnvXyautqqXNjmOj94G8Xc: 404

Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.

Cleaning up challenges Some challenges have failed. Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

IP адрес у меня белый и статический. Порты 80 и 443 через роутер проброшены к хосту на порт 8081. При переходе на мой домен, доступ к nextcloud из внешней сети работает только по протоколу http. Делал все в точности по вашей инструкции. Помогите понять в чем дело. Спасибо.

Timeweb
Timeweb
20.02.2024, 05:20

Проверили несколько раз с разными условиями, но никак не получается воспроизвести ошибку :confused: На всех тестовых установках всегда получаем 200 OK. Возможно, поможет полный лог из файла /var/log/letsencrypt/letsencrypt.log. Вы можете прислать его нам content@timeweb.cloud — передадим автору и попробуем еще раз разобраться.

Koryakinkv
Koryakinkv
20.02.2024, 14:17

отправил

Timeweb
Timeweb
22.02.2024, 04:36

К сожалению, так и не смогли определить причину ошибки. Можем предположить пару вариантов:

  1. Возможно, возникает ситуация, описанная в комьюнити Let's Encrypt; можно попробовать предложенное решение.
  2. Проблема может быть в домене и DNS-записях. Домен, указанный в предоставленных логах, не пингуется; вполне возможно, и certbot не может до него «достучаться». Проверьте, пожалуйста, что в настройках домена все корректно.
Koryakinkv
Koryakinkv
24.02.2024, 10:08

спасибо. Решение № 1 помогло. Однако nextcloud заметно медленный. Необходимо настроить фоновые задания через cron и настроить memcache. Также для повышения производительности nextcloud просит установить модуль PHP- bz2. Есть инструкция как это сделать?

Timeweb
Timeweb
28.02.2024, 02:30

Что касается PHP-bz2, то модуль можно установить, выполнив команды в директории с docker-compose:

docker compose exec app apt update
docker compose exec app apt-get install -y libbz2-dev
docker compose exec app docker-php-ext-install bz2
docker compose restart
Timeweb
Timeweb
28.02.2024, 02:30

Добрый день! Обсуждение о том, как лучше настроить выполнение cron-задач, ведется в коммьюнити Nextcloud. Наиболее простой способ — запускать скрипт через docker exec при помощи cron на хосте.

Для решения проблемы с memcache вы можете добавить Redis в docker-compose.yml, чтобы файл выглядел так:

version: '2'

volumes:
  twnextcloud:
  db:

services:
  db:
    image: mariadb:10.6
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=RootPass
      - MYSQL_PASSWORD=NextPass
      - MYSQL_DATABASE=nextcloudtw
      - MYSQL_USER=nextcloudtw

  app:
    image: nextcloud
    restart: unless-stopped
    ports:
      - 8081:80
    links:
      - db
    volumes:
      - twnextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=NextPass
      - MYSQL_DATABASE=nextcloudtw
      - MYSQL_USER=nextcloudtw
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    depends_on:
      - redis
      - db

  redis:
    image: redis:alpine
    restart: always
    ports:
      - 6379:6379

После этого перезапустите контейнеры.

Koryakinkv
Koryakinkv
10.02.2024, 17:41

Отличная статья. Очень помогла. Подскажите следующий вопрос. Примонтировал к хосту usb hdd. Как его пробросить в nextcloud установленный по данной инструкции? Мне это необходимо для расширения дискового пространства nextcloud.

Timeweb
Timeweb
12.02.2024, 09:13

Добрый день! Для решения этой задачи можно использовать плагин "External storage". Для установки нажмите на иконку пользователя (администратора) в правом верхнем углу -> Apps -> в поиске найдите "External storage support" и установите плагин.

Далее, в docker-compose.yml нужно добавить диск как том. Делается это в разделе app.

  app:
    image: nextcloud
    restart: unless-stopped
    ports:
      - 8081:80
    links:
      - db
    volumes:
      - twnextcloud:/var/www/html
      - /run/media/user/SSD:/var/www/html/data/ssd
    environment:
      - MYSQL_PASSWORD=NextPass
      - MYSQL_DATABASE=nextcloudtw
      - MYSQL_USER=nextcloudtw
      - MYSQL_HOST=db

Где /run/media/user/SSD — точка монтирования диска.

После выполните:

docker-compose down
docker-compose up -d

Теперь, в Nextcloud нажмите на иконку пользователя в правом верхнем углу -> "Administration settings" -> "External storage " (тут важно выбрать пункт именно из раздела "Administration", так как выше, в "Personal", тоже есть этот пункт)

В настройке "External storage" укажите имя, тип "Local", "Authentication" — none, "Configuration" — /var/www/html/data/ssd и сохраните, нажав на галочку.

Теперь диск будет доступен во всех файлах, в папке ssd.

Koryakinkv
Koryakinkv
17.02.2024, 12:43

Спасибо. Заработало

Alexander
Alexander
13.03.2024, 08:03

Пробую добавить это приложение, оно скачивается, но при включение отображается сообщение, что возникла ошибка и все, где смотреть логи и что может быть за ошибка?

Евгений Расторгуев
Евгений Расторгуев
01.05.2024, 13:52

Спасибо за качественную инструкцию .

В параметрах сервера - внешнее хранилище вот такое сообщение .

Модуль «smbclient» не установлен, монтирование «"SMB/CIFS", "SMB/CIFS с использованием реквизитов входа"» невозможно.

В инете решение для свежих версий найти не удалось . Как добавить в докер ?

Timeweb
Timeweb
03.05.2024, 05:21

Добрый день! Установить smbclient можно таким образом:

  1. Выполняем docker ps, чтоб узнать имя контейнера.
  2. Подключаемся к контейнеру командой docker exec -it twnextcloud-app-1 bash.
  3. Выполняем apt update и устанавливаем smbclient командой apt install smbclient.
  4. Отключаемся от контейнера Ctrl+D.
  5. Перезапускаем контейнеры командой docker compose restart в директории с docker-compose.yml.

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

Alexander
Alexander
13.03.2024, 08:13

разобрался, не то приложение пытался включить