Для тех, кто стремится к полному контролю над своими данными, Nextcloud предоставляет мощное open-source решение для создания приватного облачного хранилища. Оно не только обеспечивает безопасную синхронизацию файлов между устройствами, но и позволяет развернуть сторадж на собственном сервере, избегая привязки к сторонним провайдерам.
В данном руководстве мы подробно разберем процесс установки Nextcloud с помощью изолированных Docker-контейнеров, что значительно упрощает развертывание и управление, а также настроим автоматическое шифрование трафика с помощью SSL-сертификатов от сервиса Let's Encrypt для гарантии безопасности передаваемой информации.
cloud
Предварительные требования
Для работы нам понадобятся:
- Один облачный сервер с предустановленным дистрибутивом Linux Ubuntu 24.04.
- Доменное имя. Купить домен можно в разделе «Домены и SSL» панели управления Timeweb Cloud.
- Установленные Docker и Docker Compose. Инструкция по установке этих инструментов доступна в отдельной статье.
Для сервера выберите конфигурацию с одноядерным процессором, 2 ГБ оперативной памяти и публичным IPv4-адресом, который можно заказать при создании сервера или в разделе «Сеть».
Сервер будет установлен в течение пары минут. IPv4-адрес, логин и пароль для подключения по протоколу SSH будут доступны в разделе «Дашборд».
Установка и запуск Nextcloud
Для работы Nextcloud используются несколько ключевых компонентов. Первый компонент — база данных, в качестве которой выбрана MariaDB — высокопроизводительная и надежная СУБД. Второй компонент — SSL-сертификат. Мы будем использовать SSL от некоммерческого центра сертификации Let's Encrypt, который выпускает бесплатные SSL-сертификаты. Для маршрутизации сетевых запросов добавлен сервис Nginx Proxy Manager. Его задача — перенаправлять и балансировать входящий HTTP- и HTTPS-трафик на соответствующие контейнеры.
Создаем директорию, где будут храниться файлы конфигурации, и переходим в нее:
mkdir nextcloud && cd nextcloud
Далее создаем скрытый файл .env
, в котором будут храниться переменные с паролями:
nano .env
Содержимое файла будет следующим:
NEXTCLOUD_ROOT_PASSWORD=secure_root_password_123
NEXTCLOUD_DB_PASSWORD=secure_nextcloud_db_password_456
NPM_ROOT_PASSWORD=secure_npm_root_password_789
NPM_DB_PASSWORD=secure_npm_db_password_012
Не забудьте заменить значения на свои.
Далее создаем файл с именем docker-compose.yml
:
nano docker-compose.yml
Используем следующую конфигурацию:
volumes:
nextcloud-data:
nextcloud-db:
npm-data:
npm-ssl:
npm-db:
networks:
frontend:
backend:
services:
nextcloud-app:
image: nextcloud:31.0.8
restart: always
volumes:
- nextcloud-data:/var/www/html
environment:
- MYSQL_PASSWORD=${NEXTCLOUD_DB_PASSWORD}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=nextcloud-db
- MYSQL_PORT=3306
networks:
- frontend
- backend
nextcloud-db:
image: mariadb:12.0.2
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- nextcloud-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${NEXTCLOUD_ROOT_PASSWORD}
- MYSQL_PASSWORD=${NEXTCLOUD_DB_PASSWORD}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- backend
npm-app:
image: jc21/nginx-proxy-manager:2.12.6
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
environment:
- DB_MYSQL_HOST=npm-db
- DB_MYSQL_PORT=3306
- DB_MYSQL_USER=npm
- DB_MYSQL_PASSWORD=${NPM_DB_PASSWORD}
- DB_MYSQL_NAME=npm
volumes:
- npm-data:/data
- npm-ssl:/etc/letsencrypt
networks:
- frontend
- backend
npm-db:
image: jc21/mariadb-aria:10.11.5
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${NPM_ROOT_PASSWORD}
- MYSQL_DATABASE=npm
- MYSQL_USER=npm
- MYSQL_PASSWORD=${NPM_DB_PASSWORD}
volumes:
- npm-db:/var/lib/mysql
networks:
- backend
Запускаем контейнеры при помощи команды:
docker compose up -d
При запуске команды docker compose up -d
может возникнуть ошибка, связанная с исчерпанием лимитов на pull-операции.
В этом случае необходимо авторизоваться в своей учетной записи на Docker Hub или зарегистрировать новую на официальном сайте.
Далее переходим в настройки учетной записи (Account settings).
В меню слева переходим в раздел «Personal access tokens».
Для создания нового токена нажимаем на кнопку «Generate new token».
Вводим описание для токена (Access token description), выставляем необходимый срок действия токена (Expiration date) и в качестве прав доступа выбираем «Read, Write, Delete».
Нажимаем на кнопку «Generate».
Копируем и сохраняем сгенерированный токен, так как он будет виден только один раз.
На сервере выполняем команду:
docker login -u dockeruser
Где dockeruser
— имя учетной записи на Docker Hub. При запросе пароля (Password) вводим ранее сгенерированный токен.
Далее запускаем контейнеры еще раз:
docker compose up -d
Дожидаемся старта всех контейнеров.
Проверяем статус контейнеров:
docker ps
У всех контейнеров должен быть статус Up.
Теперь настроим протокол HTTPS и выпустим сертификат. Открываем браузер и переходим по адресу http://IP-адрес-сервера:81
в интерфейс Nginx Proxy Manager.
Данные для авторизации:
Логин: admin@example.com
Пароль: changeme
При первом входе необходимо поменять данные пользователя администратор (Admin). Для этого измените значения полей «Full name», «Nickname» и «Email» на свои.
Далее сервис предложит изменить пароль для пользователя admin. В поле «Current Password» необходимо ввести значение changeme, в поле «New Password» необходимо ввести новый пароль, а в поле «Confirm Password» ввести его еще раз.
Для сохранения изменений нажмите на кнопку «Save».
Далее переходим в раздел «Hosts» и в выпадающем меню выбираем «Proxy Hosts».
Для создания нового хоста нажимаем на кнопку «Add Proxy Host».
Заполняем следующие поля:
- Domain Names — доменное имя, на котором будет доступен веб-интерфейс NextCloud.
- Scheme — указываем протокол
http
. - Forward Hostname / IP — прописываем
nextcloud-app
. Это имя сервиса NextCloud, которое используется в файлеdocker-compose.yml
. - Forward Port — порт, на котором доступен NextCloud. Указываем
80
.
Перейдите в раздел SSL. В поле «SSL Certificate» выбираем значение «Request a new SSL Certificate». Также включаем следующие параметры:
- Force SSL
- HTTP/2 Support
- HSTS Enabled
Поменяйте электронную почту для Let's Encrypt. Согласитесь с политикой использования Let's Encrypt и нажимаем на кнопку «Save».
Настроенный хост будет отображаться в списке хостов.
Переходим по доменному имени. Если все было настроено правильно, откроется веб-интерфейс Nextcloud и будет выпущен SSL-сертификат.
Сертификат успешно выпущен центром сертификации Let's Encrypt.
При первом входе в Nextcloud необходимо создать новую учетную запись администратора.
Можно установить рекомендованные приложения или пропустить данный шаг.
Установка и базовая настройка Nextcloud успешно завершена.
Разверните Netcloud на своем сервере
Заключение
В данной статье мы рассмотрели пример развертывания Nextcloud с помощью Docker и выпустили бесплатный сертификат Let's Encrypt. Этот способ является одним из наиболее надежных, безопасных и легко масштабируемых. Docker позволяет изолировать приложение, упрощает его обновление и перенос между системами. Использование SSL-сертификата — не просто рекомендация, а необходимость для защиты конфиденциальных данных и обеспечения шифрования трафика.