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

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

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

Nextcloud — это облачное решение с открытым исходным кодом, которое появилось как форк проекта ownCloud. По набору функций оно сопоставимо с собственными облачными решениями, такими как Microsoft 365 и Google Workspace. Nextcloud синхронизирует данные, такие как календари и контакты, между пользователями и устройствами. Помимо обычной синхронизации файлов, программа предоставляет функции для совместной работы и общения.

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

Мы покажем вам, как установить сервер Nextcloud на Ubuntu с помощью Docker Compose и облачной инфраструктуры. Также можно установить программное обеспечение на собственное оборудование и настроить Nextcloud, например, на Raspberry Pi.

Совет

Nextcloud и ownCloud имеют много общего. В нашем руководстве «ownCloud vs. Nextcloud» мы описываем ключевые различия.

Архитектура Nextcloud на Docker

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

  1. Nginx Reverse Proxy: Используется для реализации зашифрованных HTTPS-соединений при доступе к Nextcloud.
  2. Let’s Encrypt: Используется для автоматической установки SSL-сертификатов
  3. MariaDB: используется для хранения данных, создаваемых сервером во время использования Nextcloud
  4. Сервер Nextcloud: Обеспечивает функциональность Nextcloud; взаимодействует с клиентами Nextcloud и размещает веб-интерфейс.

Подготовка к установке сервера Nextcloud

Первым шагом будет установка Docker Engine и Docker Compose. Docker Engine обеспечит основную функциональность контейнеров, а Docker Compose позволит управлять связанными сетями контейнеров. Если у вас уже установлены Docker Engine и Docker Compose, этот раздел можно пропустить.

Установка Docker Engine на Ubuntu

Теперь мы покажем вам, как установить Docker Engine на Ubuntu, основываясь на официальном руководстве по установке. Инструкции по установке программного обеспечения на другие дистрибутивы Linux можно найти на сайте Docker.

  1. Удалите все другие установки Docker:
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. Обновите программу установки:
sudo apt-get update
  1. Подготовьте репозитории:
sudo apt-get install 
ca-certificates 
curl 
gnupg 
lsb-release
  1. Добавьте официальный GPG-ключ Docker:
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. Создайте стабильный репозиторий Docker:
 echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu 
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Обновите репозитории:
sudo apt-get update
  1. Установите Docker Engine вместе с зависимостями:
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. Наконец, мы запустим тестовый контейнер «Hello World». Если Docker Engine был установлен правильно, контейнер будет выполнен и выдаст сообщение.
sudo docker run hello-world

Установка Docker Compose на Ubuntu

Теперь перейдем к Docker Compose. Установка этого программного обеспечения проще, чем установка Docker Engine — здесь всего несколько шагов.

  1. Активируйте репозиторий Universe в Ubuntu:
sudo add-apt-repository universe
  1. Обновите менеджер пакетов:
sudo apt update
  1. Установите Docker Compose:
sudo apt install docker-compose
  1. Проверьте, успешно ли установлен Docker Compose:
docker-compose --version

Если отображается номер версии, значит, Docker Compose был успешно установлен.

Установка сервера Nextcloud

Как только вы установили Docker Engine и Docker Compose, можно приступать к установке самого Nextcloud. Мы настроим отдельные контейнеры Docker для различных сервисов. Для настройки контейнеров, томов Docker и сетей Docker пригодятся два конфигурационных файла:

Файл Объяснение
docker-compose.yaml Инструкции Docker Compose в формате YAML для создания многоконтейнерных приложений
.env Текстовый файл с переменными окружения; одно определение переменной на строку

Docker Compose будет использоваться для управления многоконтейнерными приложениями. Именно здесь на помощь приходят инструкции Docker Compose — они определяют, как должно быть структурировано приложение и как различные компоненты взаимодействуют друг с другом. Они описывают отдельные сервисы, элементы Docker и настройки и написаны на YAML («Yet Another Markup Language»). Мы создадим файл, используемый для этого (docker-compose.yaml), шаг за шагом.

Помимо docker-compose.yaml, нам понадобится еще один файл, содержащий переменные окружения, которые будут интегрированы в инструкции Docker Compose. Стандартной практикой является размещение переменных окружения в файле .env в папке проекта вместе со значениями. Файл .env не включается в систему контроля версий, что защищает конфиденциальные данные от случайного раскрытия.

Использование файла .env делает ненужным определение различных настроек для разных окружений приложения. Например, чтобы использовать разные настройки для живого сайта и сайта-стадиона, достаточно изменить файл .env.

Создание необходимых структур для сервера Nextcloud

Чтобы начать установку сервера Nextcloud, нам понадобится несколько структур. Мы создадим их в следующих шагах:

  1. Создайте папку проекта. Создайте папку nextcloud-docker в своем домашнем каталоге:
mkdir ~/nextcloud-docker/
  1. Создайте файлы. Мы создадим файлы docker-compose.yaml и .env в папке проекта:
touch ~/nextcloud-docker/docker-compose.yaml
touch ~/nextcloud-docker/.env
  1. Создайте сеть Docker. С помощью команды docker мы создадим новую сеть. После этого четыре контейнера будут взаимодействовать внутри сети.
docker network create nextcloud_network

После того как мы настроим эти структуры, мы можем продолжить установку нашего сервера Nextcloud.

Настройка обратного прокси для сервера Nextcloud

Чтобы начать установку сервера Nextcloud, нам нужно настроить обратный прокси-сервер, для чего мы будем использовать Nginx. Поскольку мы собираем наше приложение из контейнеров, большая часть установки будет происходить в файле docker-compose.yaml. Мы подробно покажем вам, как редактировать этот файл. В последующих шагах установки вы будете следовать тем же схемам:

  1. Откройте файл docker-compose.yaml для редактирования. Следующая команда откроет пустой файл в редакторе «Nano».
nano ~/nextcloud-docker/docker-compose.yaml
  1. Вставьте в «Nano» следующий блок кода и сохраните файл. Чтобы закрыть файл, используйте сочетание клавиш [Ctrl] + [X]. Вас спросят, хотите ли вы сохранить файл. Ответьте «y», что означает «да». Подтвердите использование существующего имени файла клавишей [Enter]. В качестве альтернативы вы можете оставить редактор открытым и использовать сочетание клавиш [Ctrl] + [O] («Выписать») для записи текста редактора в файл.
version: '3'
services:
  proxy:
    image: jwilder/nginx-proxy:alpine
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
    container_name: nextcloud-proxy
    networks:
      - nextcloud_network
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - ./proxy/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped

Что означают отдельные записи? Во-первых, мы указываем Docker Compose создать новый сервис с именем proxy и использовать образ Nginx на базе Alpine Linux. Затем мы указываем, что обратный прокси должен взаимодействовать с другими сервисами, используя сеть Docker nextcloud_network.

Мы прописываем стандартные порты HTTP и HTTPS 80 и 443 из хост-системы в контейнер. Это направляет входящие соединения через прокси. На последнем этапе конфигурации мы создаем различные тома Docker и указываем, что обратный прокси должен автоматически перезапускаться, если его явно не остановить.

Настройка службы Let’s Encrypt для сервера Nextcloud

Следующий шаг — установка Let’s Encrypt. Это обеспечит зашифрованное взаимодействие с сервером Nextcloud через HTTPS.

  1. Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
  1. Добавьте еще один сервисный блок. Действуйте, как в предыдущем разделе, и обратите особое внимание на отступы. Начало блока, начинающегося с letsencrypt:, должно быть на том же уровне, что и proxy:. Это также относится к блокам служб, которые появятся позже.
letsencrypt:
  image: jrcs/letsencrypt-nginx-proxy-companion
  container_name: nextcloud-letsencrypt
  depends_on:
    - proxy
  networks:
    - nextcloud_network
  volumes:
    - ./proxy/certs:/etc/nginx/certs:rw
    - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
    - ./proxy/html:/usr/share/nginx/html:rw
    - /etc/localtime:/etc/localtime:ro
    - /var/run/docker.sock:/var/run/docker.sock:ro
  restart: unless-stopped

Мы снова определяем новый сервис с именем letsencrypt, который основан на контейнере letsencrypt-nginx-proxy-companion. Мы указываем, что служба зависит от службы обратного прокси и взаимодействует в той же сети Docker. Мы также определяем тома Docker, необходимые для обмена данными. Как и выше, мы указываем, что служба должна автоматически перезапускаться, если она не была явно остановлена.

Совет

Вам нужно шифрование профессионального уровня для вашего сайта? Приобретите свой собственный доступный SSL-сертификат с IONOS!

Настройка службы MariaDB

Теперь мы завершили половину установки! Давайте продолжим с базой данных MariaDB, которая необходима для управления данными, созданными при использовании Nextcloud. Фактическое хранение данных в томах Docker будет происходить вне контейнера.

  1. Откройте файл docker-compose.yaml для редактирования:

 

nano ~/nextcloud-docker/docker-compose.yaml
  1. Добавьте еще один сервисный блок:
db:
  image: mariadb
  container_name: nextcloud-mariadb
  networks:
    - nextcloud_network
  volumes:
    - db:/var/lib/mysql
    - /etc/localtime:/etc/localtime:ro
  environment:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_PASSWORD
    - MYSQL_DATABASE
    - MYSQL_USER
  restart: unless-stopped

Большинство настроек должны быть знакомы на этом этапе. Сначала мы определяем сервис db, который основан на Docker-образе mariadb. Затем мы определяем ту же сеть, что и раньше, nextcloud_network, и том Docker для хранения данных.

Новым в этом блоке конфигурации является использование переменных окружения. В разделе окружения мы указываем имена переменных окружения для MariaDB. Значения будут считаны из файла .env при последующем выполнении Docker Compose.

Настройка контейнера сервера Nextcloud

Время пришло: Теперь мы установим серверное программное обеспечение Nextcloud.

  1. Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
  1. Добавьте еще один блок сервисов:
app:
  image: nextcloud:latest
  container_name: nextcloud-app
  networks:
    - nextcloud_network
  depends_on:
    - letsencrypt
    - proxy
    - db
  volumes:
    - nextcloud:/var/www/html
    - ./app/config:/var/www/html/config
    - ./app/custom_apps:/var/www/html/custom_apps
    - ./app/data:/var/www/html/data
    - ./app/themes:/var/www/html/themes
    - /etc/localtime:/etc/localtime:ro
  environment:
    - VIRTUAL_HOST
    - LETSENCRYPT_HOST
    - LETSENCRYPT_EMAIL
  restart: unless-stopped

Здесь мы создаем сервис с именем app, который основан на Docker-образе nextcloud и взаимодействует с сетью nextcloud_network. Чтобы гарантировать, что контейнер Nextcloud будет запущен последним, мы указываем остальные сервисы в качестве зависимостей. Мы также определяем необходимые тома Docker и переменные окружения.

Завершение конфигурации сервера Nextcloud

Чтобы завершить конфигурацию сервера Nextcloud, нам нужно сделать еще несколько записей в файле docker-compose.yaml. Мы также создадим файл .env и заполним его соответствующими значениями.

  1. Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
  1. Вставьте следующие блоки. Обратите внимание, что это не блоки служб; их отступы должны быть на одном уровне с services:.
volumes:
  nextcloud:
  db:
networks:
  nextcloud_network:
  1. Откройте пустой файл .env для редактирования:
nano ~/nextcloud-docker/.env
  1. Запишите переменные окружения, включая их значения, в файл .env. Скопируем следующий код в окно редактора и заменим его на нужные значения перед сохранением.
# MariaDB
MYSQL_ROOT_PASSWORD=toor
MYSQL_PASSWORD=mysql
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
# Nextcloud
VIRTUAL_HOST=<your.domain></your.domain>
LETSENCRYPT_HOST=<your.domain></your.domain>
LETSENCRYPT_EMAIL=<your@email></your@email>
  1. После сохранения мы отобразим содержимое файла .env, чтобы проверить, правильно ли были введены значения.
cat ~/nextcloud-docker/.env

Полная конфигурация сервера Nextcloud

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

  1. Выведите существующую конфигурацию:
cat ~/nextcloud-docker/docker-compose.yaml
  1. Сравните с нашим шаблоном. Выведенная конфигурация должна соответствовать следующему коду:
version: '3'
services:
  proxy:
    image: jwilder/nginx-proxy:alpine
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
    container_name: nextcloud-proxy
    networks:
      - nextcloud_network
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - ./proxy/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped
  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nextcloud-letsencrypt
    depends_on:
      - proxy
    networks:
      - nextcloud_network
    volumes:
      - ./proxy/certs:/etc/nginx/certs:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped
  db:
    image: mariadb
    container_name: nextcloud-mariadb
    networks:
      - nextcloud_network
    volumes:
      - db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD
      - MYSQL_PASSWORD
      - MYSQL_DATABASE
      - MYSQL_USER
    restart: unless-stopped
  app:
    image: nextcloud:latest
    container_name: nextcloud-app
    networks:
      - nextcloud_network
    depends_on:
      - letsencrypt
      - proxy
      - db
    volumes:
      - nextcloud:/var/www/html
      - ./app/config:/var/www/html/config
      - ./app/custom_apps:/var/www/html/custom_apps
      - ./app/data:/var/www/html/data
      - ./app/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST
      - LETSENCRYPT_HOST
      - LETSENCRYPT_EMAIL
    restart: unless-stopped
volumes:
  nextcloud:
  db:
networks:
  nextcloud_network:

Если ваша версия YAML-файла совпадает с нашей, вы можете перейти к следующему и последнему шагу.

Завершение установки сервера Nextcloud

Чтобы создать сервер Nextcloud как мультиконтейнерное приложение из инструкции Docker Compose, выполним в командной строке следующую команду:

cd ~/nextcloud-docker/ && docker-compose up -d

Затем проверим, был ли запущен контейнер:

docker ps -a

Список запущенных контейнеров должен содержать четыре контейнера, определенных в файле docker-compose.yaml.

Оцените статью
cdelat.ru
Добавить комментарий