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

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

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

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, который будет функционировать в контейнеризованной среде, обеспечивая легкость масштабирования и удобство в обслуживании. Это решение подходит как для личного использования, так и для небольших компаний, стремящихся к повышению уровня контроля и безопасности данных.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону