Перейти к содержимому
Главная страница » Установка Nextcloud с Docker

Установка Nextcloud с Docker

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

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

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

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

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

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

Отдельные сервисы:

  1. Обратный прокси-сервер Nginx: используется для реализации зашифрованных 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 был установлен правильно, контейнер будет запущен и выдаст сообщение.
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.yamlDocker Составляет инструкции в формате YAML для создания многоконтейнерных приложений
.envТекстовый файл с переменными среды; по одному определению переменной в строке

Docker Compose будет использоваться для управления многоконтейнерными приложениями. Вот тут—то и появляются инструкции по составлению Docker — они определяют, как должно быть структурировано приложение и как различные компоненты взаимодействуют друг с другом. Они описывают отдельные сервисы, элементы Docker и настройки и написаны на YAML (“Еще одном языке разметки”). Мы создадим используемый для этого файл (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

На этом этапе вам должны быть знакомы большинство настроек. Сначала мы определяем сервисную базу данных, которая основана на образе 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.

Для входа введите http://ip-сервера:8081 в адресную строку вашего браузера.

Источник

1 комментарий для “Установка Nextcloud с Docker”

  1. Скажите пожалуйста. а проблем с правами на каталоги которые будут использоваться для некстклауда. с ними нету проблем?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *