Nextcloud с Docker: как установить
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
в адресную строку вашего браузера.
На открывшейся странице вам будет предложено создать учетную запись администратора. Здесь вы вводите желаемое имя пользователя и пароль.
В процессе первичной конфигурации вы также можете выбрать дополнительные приложения для установки.
Остановка и перезапуск контейнеров в фоновом режиме
После первоначальной настройки и проверки его работы через веб-интерфейс, нужно перезапустить контейнеры в фоновом режиме. Это позволит выполнять дальнейшие настройки, такие как установка и конфигурирование обратного прокси.
Если контейнеры все еще работают в интерактивном режиме (после использования 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
, которая покажет путь до тома.
Перейдите в него, используя:
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.php
(в nano
это делается комбинацией клавиш Ctrl + O), а затем выйдите из редактора (Ctrl + X).
После сохранения изменений в config.php
вы можете обратиться к приложению по указанному вами домену и убедиться, что ошибка «Access through untrusted domain» больше не возникает.
Заключение
Процедура установки Nextcloud при помощи Docker Compose значительно упрощает процесс, минимизируя необходимость ручной настройки и подготовки сервера, делая его доступным даже для пользователей без глубоких знаний в области серверного администрирования.
Мы обсудили этапы инсталляции Docker и Docker Compose, составления конфигурационного файла docker-compose.yml
и инициализации работы контейнеров. Кроме того, были изучены методы настройки Nginx как обратного прокси для повышения безопасности и производительности сервиса. В дополнение, мы изложили процедуру получения SSL-сертификата с использованием Certbot, что важно для защиты трафика между сервером и клиентами.
Следуя представленным инструкциям, можно быстро настроить собственный экземпляр Nextcloud, который будет функционировать в контейнеризованной среде, обеспечивая легкость масштабирования и удобство в обслуживании. Это решение подходит как для личного использования, так и для небольших компаний, стремящихся к повышению уровня контроля и безопасности данных.