<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Установка Nextcloud на cервере с помощью Docker

0
7 минут чтения
Средний рейтинг статьи: 5

Для тех, кто стремится к полному контролю над своими данными, 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-операции.

Image17

В этом случае необходимо авторизоваться в своей учетной записи на Docker Hub или зарегистрировать новую на официальном сайте.

Далее переходим в настройки учетной записи (Account settings).

Image10

В меню слева переходим в раздел «Personal access tokens».

Image5

Для создания нового токена нажимаем на кнопку «Generate new token».

Вводим описание для токена (Access token description), выставляем необходимый срок действия токена (Expiration date) и в качестве прав доступа выбираем «Read, Write, Delete».

Image9

Нажимаем на кнопку «Generate».

Копируем и сохраняем сгенерированный токен,  так как он будет виден только один раз.

Image8

На сервере выполняем команду:

docker login -u dockeruser

Где dockeruser — имя учетной записи на Docker Hub. При запросе пароля (Password) вводим ранее сгенерированный токен.

Далее запускаем контейнеры еще раз: 

docker compose up -d

Дожидаемся старта всех контейнеров.

Image18

Проверяем статус контейнеров:

docker ps

У всех контейнеров должен быть статус Up.

Image22

Теперь настроим протокол HTTPS и выпустим сертификат. Открываем браузер и переходим по адресу http://IP-адрес-сервера:81 в интерфейс Nginx Proxy Manager.

Image7

Данные для авторизации:

Логин: admin@example.com

Пароль: changeme

При первом входе необходимо поменять данные пользователя администратор (Admin). Для этого измените значения полей «Full name», «Nickname» и «Email» на свои.

Далее сервис предложит изменить пароль для пользователя admin. В поле «Current Password» необходимо ввести значение changeme, в поле «New Password» необходимо ввести новый пароль, а в поле «Confirm Password» ввести его еще раз.

Для сохранения изменений нажмите на кнопку «Save».

Далее переходим в раздел «Hosts» и в выпадающем меню выбираем «Proxy Hosts».

Image16

Для создания нового хоста нажимаем на кнопку «Add Proxy Host».

Заполняем следующие поля:

  • Domain Names — доменное имя, на котором будет доступен веб-интерфейс NextCloud.
  • Scheme — указываем протокол http.
  • Forward Hostname / IP — прописываем nextcloud-app. Это имя сервиса NextCloud, которое используется в файле docker-compose.yml.
  • Forward Port — порт, на котором доступен NextCloud. Указываем 80.

Image19

Перейдите в раздел SSL. В поле «SSL Certificate» выбираем значение «Request a new SSL Certificate». Также включаем следующие параметры:

  • Force SSL
  • HTTP/2 Support
  • HSTS Enabled

Поменяйте электронную почту для Let's Encrypt. Согласитесь с политикой использования Let's Encrypt и нажимаем на кнопку «Save».

Image20

Настроенный хост будет отображаться в списке хостов.

Image3

Переходим по доменному имени. Если все было настроено правильно, откроется веб-интерфейс Nextcloud и будет выпущен SSL-сертификат.

Image14

Сертификат успешно выпущен центром сертификации Let's Encrypt.

При первом входе в Nextcloud необходимо создать новую учетную запись администратора.

Image4

Можно установить рекомендованные приложения или пропустить данный шаг.

Image21

Установка и базовая настройка Nextcloud успешно завершена.

Разверните Netcloud на своем сервере

Заключение

В данной статье мы рассмотрели пример развертывания Nextcloud с помощью Docker и выпустили бесплатный сертификат Let's Encrypt. Этот способ является одним из наиболее надежных, безопасных и легко масштабируемых. Docker позволяет изолировать приложение, упрощает его обновление и перенос между системами. Использование SSL-сертификата — не просто рекомендация, а необходимость для защиты конфиденциальных данных и обеспечения шифрования трафика.

0
7 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев