Бесплатная миграция IT-инфраструктуры в облако

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

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

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

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

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

cloud

Установка 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 на серверах Timeweb Cloud

Заключение

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

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

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
11 января 2024 г.
7285
13 минут чтения
Средний рейтинг статьи: 4.3
Комментарии 45
Константин
13.11.2024, 20:52

Обновил nextcloud до версии 30.0.2.2: docker-compose down docker-compose pull docker-compose up -d Обновление прошло успешно. Однако после обновления проверка безопасности и параметров не выполняется. В логах журнала следующие ошибки:

DbalException An exception occurred while executing a query: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away Exception running check OCA\Settings\SetupChecks\SchedulingTableSize: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

DbalException An exception occurred in the driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known Exception running check OCA\Settings\SetupChecks\SupportedDatabase: An exception occurred in the driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known

DbalException An exception occurred in the driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known

Can not determine user count for OC\User\Database

DbalException An exception occurred in the driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known Exception running check OCA\Settings\SetupChecks\PushService: An exception occurred in the driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known

Invalid defaultDaemonConfig data provided to provideInitialState by settings

До обновления ошибок не было. Проверка безопасности и параметров выполнялась успешно. Подскажите что делать.

Timeweb Cloud
Timeweb Cloud
15.11.2024, 14:15

Добрый день!

Воспроизвести проблему не удалось. При обновлении с версии 29.0.9 до 30.0.2 ситуация не воспроизводится.

На официальном форуме Nextcloud пользователи с похожей проблемой отмечали, что им помогло обновление и перезагрузка системы. Рекомендуем попробовать этот вариант.

Константин
15.11.2024, 19:48

Не помогает. Ерунда какая то, не пойму в чем причина. В таком случае подскажите, может быть имеет смысл полностью переустановить nextcloud в docker? Подскажите как это сделать. Имею ввиду начиная с удаления и заканчивая переустановкой его в docker.

Timeweb Cloud
Timeweb Cloud
18.11.2024, 14:33

Добрый день!

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

После создания резервной копии выполните следующие шаги:

— Остановите контейнеры:

docker compose down

— Измените имена volumes в docker-compose.yaml. Это нужно, чтобы создать новые тома для новой установки, сохранив старые на случай, если потребуется вернуть все обратно.

— Запустите контейнеры снова:

docker compose up -d

Это создаст новую, чистую установку Nextcloud. Перейдите в браузер и завершите настройку нового экземпляра.

— Восстановите данные из резервной копии:

Для восстановления базы данных:

cat ./nextcloud-db.sql | docker exec -i twnextcloud-db-1 sh -c "exec mysql -u nextcloudtw --password=NextPass"

Для восстановления данных:

docker run --rm --volumes-from twnextcloud-app-1 -v $(pwd):/backup ubuntu tar xvf /backup/nextcloud-data-backup.tar -C /

Если что-то пойдет не так, вы всегда можете откатиться к предыдущей версии, вернув старые имена volumes в docker-compose.yaml.

Константин
05.11.2024, 18:50

как настроить certbot на автоматическое обновление сертификата?

Timeweb Cloud
Timeweb Cloud
06.11.2024, 11:13

Добрый день!

Автоматическое обновление сертификата можно настроить с помощью crontab. Воспользуйтесь инструкцией и добавьте в crontab такую задачу:

30 3 * * 2 /usr/bin/certbot renew >> /var/log/renew-ssl.log --post-hook "systemctl reload nginx"

Эта команда проверяет сертификаты каждый вторник в 03:30 утра. Если до истечения срока действия останется менее 30 дней, certbot выполнит автоматическое обновление, а затем перезагрузит Nginx.

Миша
01.11.2024, 22:42

Здравствуйте! Подскажите пожалуйста как установить свой сертификат для nginx файлы с ключём и сертификатом создал, пути для сертификата и ключа в конфиге тоже, но при входе через https выдаёт - 403 Forbidden, при создании сертификата через certbot то же самое, думаю что проблема в конфиге nginx, root и index.

Timeweb Cloud
Timeweb Cloud
02.11.2024, 10:37

Добрый день!

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

stepan
01.11.2024, 10:40

не знаю, как правильно скопировать код и прислать сюда

stepan
01.11.2024, 10:39

У меня сервер не поднимается, ничего не понимаю, всё перепробовал уже

Server version: 10.8.2-MariaDB-1:10.8.2+maria~focal-log db-1 | key_buffer_size=134217728 db-1 | read_buffer_size=131072 db-1 | max_used_connections=0 db-1 | max_threads=153 db-1 | thread_count=0 db-1 | It is possible that mysqld could use up to db-1 | key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 468004 K bytes of memory db-1 | Hope that's ok; if not, decrease some variables in the equation. db-1 | db-1 | Thread pointer: 0x0 db-1 | Attempting backtrace. You can use the following information to find out db-1 | where mysqld died. If you see no messages after this, something went db-1 | terribly wrong... db-1 | stack_bottom = 0x0 thread_stack 0x49000 db-1 | Printing to addr2line failed db-1 | mariadbd(my_print_stacktrace+0x30)[0x5556398c6de0] db-1 | mariadbd(handle_fatal_signal+0x45c)[0x5556393e80dc] app-1 | [Fri Nov 01 07:35:57.826228 2024] [mpm_prefork:notice] [pid 1:tid 1] AH00163: Apache/2.4.62 (Debian) PHP/8.2.25 configured -- resuming normal operations db-1 | linux-vdso.so.1(__kernel_rt_sigreturn+0x0)[0x7fff8926c7b0] app-1 | [Fri Nov 01 07:35:57.830594 2024] [core:notice] [pid 1:tid 1] AH00094: Command line: 'apache2 -D FOREGROUND' db-1 | mariadbd(+0xc81624)[0x5556396f1624] db-1 | mariadbd(+0xd44424)[0x5556397b4424] db-1 | mariadbd(+0xd4549c)[0x5556397b549c] db-1 | mariadbd(+0xc47924)[0x5556396b7924] db-1 | mariadbd(+0x6512c0)[0x5556390c12c0] db-1 | mariadbd(+0xc169c8)[0x5556396869c8] db-1 | mariadbd(_Z24ha_initialize_handlertonP13st_plugin_int+0x74)[0x5556393eafac] db-1 | mariadbd(+0x78b164)[0x5556391fb164] db-1 | mariadbd(_Z11plugin_initPiPPci+0x81c)[0x5556391fc17c] db-1 | mariadbd(+0x686408)[0x5556390f6408] db-1 | mariadbd(_Z11mysqld_mainiPPc+0x40c)[0x5556390fba44] db-1 | /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0xe8)[0x7fff888e4090] db-1 | mariadbd(+0x680c80)[0x5556390f0c80] db-1 | The manual page at https://mariadb.com/kb/en/how-to-produce-a-full-stack-trace-for-mysqld/ contains db-1 | information that should help you find out what is causing the crash. db-1 | Writing a core file... db-1 | Working directory at /var/lib/mysql db-1 | Resource Limits: db-1 | Limit Soft Limit Hard Limit Units
db-1 | Max cpu time unlimited unlimited seconds
db-1 | Max file size unlimited unlimited bytes
db-1 | Max data size unlimited unlimited bytes
db-1 | Max stack size 8388608 unlimited bytes
db-1 | Max core file size unlimited unlimited bytes
db-1 | Max resident set unlimited unlimited bytes
db-1 | Max processes unlimited unlimited processes db-1 | Max open files 1048576 1048576 files
db-1 | Max locked memory 8388608 8388608 bytes
db-1 | Max address space unlimited unlimited bytes
db-1 | Max file locks unlimited unlimited locks
db-1 | Max pending signals 30841 30841 signals
db-1 | Max msgqueue size 819200 819200 bytes
db-1 | Max nice priority 0 0
db-1 | Max realtime priority 0 0
db-1 | Max realtime timeout unlimited unlimited us
db-1 | Core pattern: core

Timeweb Cloud
Timeweb Cloud
01.11.2024, 13:39

Добрый день!

По логам сложно точно определить причину, но, вероятно, проблема связана с нехваткой памяти. Для стабильной работы MariaDB требуется минимум 512 МБ ОЗУ.

Владимирович
18.10.2024, 09:45

хорошо бы знать для какой версии Linux это написано, на Debian 12 не работает

Timeweb Cloud
Timeweb Cloud
21.10.2024, 12:51

Добрый день!

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

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

Также проверили инструкцию на Debian 12 — проблем не обнаружено. Единственное уточнение: перед выполнением команды:

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

необходимо установить пакет curl, выполнив следующую команду:

sudo apt install curl

Если у вас всё равно возникают ошибки, пожалуйста, опишите их подробнее. На каком этапе и какая именно ошибка появляется?

Slava
11.10.2024, 01:05

Здравствуйте! Столкнулся с проблемой на этапе получения сертификата подскажите как решить. Вот ошибка: Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems: Domain: nextcloud-twtest.com Type: dns Detail: DNS problem: NXDOMAIN looking up A for nextcloud-twtest.com - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for nextcloud-twtest.com - check that a DNS record exists for this domain 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.

Timeweb Cloud
Timeweb Cloud
11.10.2024, 13:29

Добрый день!

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

/etc/nginx/sites-available/ваш_домен

Также при выпуске сертификата убедитесь, что вы указываете свой домен и почтовый ящик. В команде:

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

замените значения после флагов -m и -d на ваш почтовый ящик и домен соответственно.

Компания Crossbill
21.08.2024, 13:56

Очень толково, спасибо! Вопрос: если нужно указать свое размещение тома с данными (NEXTCLOUD_DATADIR), указывать надо так:

... services: app: environment: - NEXTCLOUD_DATADIR=/my_own_datapath

или по-другому?

denkarter
denkarter
07.05.2024, 17:12

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

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

Команда Timeweb Cloud
Команда Timeweb Cloud
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 twnextcloud-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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
20.02.2024, 05:20

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

Koryakinkv
Koryakinkv
20.02.2024, 14:17

отправил

Команда Timeweb Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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 Cloud
Команда Timeweb Cloud
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

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