
Nextcloud зарекомендовал себя как популярное решение с открытым исходным кодом. Помимо клиентов для настольных и мобильных операционных систем, программное обеспечение также имеет серверный компонент. Мы покажем вам, как установить сервер Nextcloud в среде Docker.
- Установка Nextcloud с помощью Docker
- Архитектура Nextcloud на Docker
- Подготовка к установке сервера Nextcloud
- Установка Docker Engine на Ubuntu
- Установка Docker Compose на Ubuntu
- Установка сервера Nextcloud
- Создание необходимых структур для сервера Nextcloud
- Настройка обратного прокси для сервера Nextcloud
- Настройка службы Let’s Encrypt для сервера Nextcloud
- Настройка службы MariaDB
- Настройка контейнера сервера Nextcloud
- Завершение конфигурации сервера Nextcloud
- Полная конфигурация сервера Nextcloud
- Завершение установки сервера Nextcloud
Установка 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. Отдельными службами являются:
- Nginx Reverse Proxy: Используется для реализации зашифрованных HTTPS-соединений при доступе к Nextcloud.
- Let’s Encrypt: Используется для автоматической установки SSL-сертификатов
- MariaDB: используется для хранения данных, создаваемых сервером во время использования Nextcloud
- Сервер Nextcloud: Обеспечивает функциональность Nextcloud; взаимодействует с клиентами Nextcloud и размещает веб-интерфейс.
Подготовка к установке сервера Nextcloud
Первым шагом будет установка Docker Engine и Docker Compose. Docker Engine обеспечит основную функциональность контейнеров, а Docker Compose позволит управлять связанными сетями контейнеров. Если у вас уже установлены Docker Engine и Docker Compose, этот раздел можно пропустить.
Установка Docker Engine на Ubuntu
Теперь мы покажем вам, как установить Docker Engine на Ubuntu, основываясь на официальном руководстве по установке. Инструкции по установке программного обеспечения на другие дистрибутивы Linux можно найти на сайте Docker.
- Удалите все другие установки Docker:
sudo apt-get remove docker docker-engine docker.io containerd runc
- Обновите программу установки:
sudo apt-get update
- Подготовьте репозитории:
sudo apt-get install
ca-certificates
curl
gnupg
lsb-release
- Добавьте официальный GPG-ключ Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Создайте стабильный репозиторий 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
- Обновите репозитории:
sudo apt-get update
- Установите Docker Engine вместе с зависимостями:
sudo apt-get install docker-ce docker-ce-cli containerd.io
- Наконец, мы запустим тестовый контейнер «Hello World». Если Docker Engine был установлен правильно, контейнер будет выполнен и выдаст сообщение.
sudo docker run hello-world
Установка Docker Compose на Ubuntu
Теперь перейдем к Docker Compose. Установка этого программного обеспечения проще, чем установка Docker Engine — здесь всего несколько шагов.
- Активируйте репозиторий Universe в Ubuntu:
sudo add-apt-repository universe
- Обновите менеджер пакетов:
sudo apt update
- Установите Docker Compose:
sudo apt install docker-compose
- Проверьте, успешно ли установлен 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, нам понадобится несколько структур. Мы создадим их в следующих шагах:
- Создайте папку проекта. Создайте папку nextcloud-docker в своем домашнем каталоге:
mkdir ~/nextcloud-docker/
- Создайте файлы. Мы создадим файлы docker-compose.yaml и .env в папке проекта:
touch ~/nextcloud-docker/docker-compose.yaml
touch ~/nextcloud-docker/.env
- Создайте сеть Docker. С помощью команды docker мы создадим новую сеть. После этого четыре контейнера будут взаимодействовать внутри сети.
docker network create nextcloud_network
После того как мы настроим эти структуры, мы можем продолжить установку нашего сервера Nextcloud.
Настройка обратного прокси для сервера Nextcloud
Чтобы начать установку сервера Nextcloud, нам нужно настроить обратный прокси-сервер, для чего мы будем использовать Nginx. Поскольку мы собираем наше приложение из контейнеров, большая часть установки будет происходить в файле docker-compose.yaml. Мы подробно покажем вам, как редактировать этот файл. В последующих шагах установки вы будете следовать тем же схемам:
- Откройте файл docker-compose.yaml для редактирования. Следующая команда откроет пустой файл в редакторе «Nano».
nano ~/nextcloud-docker/docker-compose.yaml
- Вставьте в «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.
- Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
- Добавьте еще один сервисный блок. Действуйте, как в предыдущем разделе, и обратите особое внимание на отступы. Начало блока, начинающегося с 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 будет происходить вне контейнера.
- Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
- Добавьте еще один сервисный блок:
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.
- Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
- Добавьте еще один блок сервисов:
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 и заполним его соответствующими значениями.
- Откройте файл docker-compose.yaml для редактирования:
nano ~/nextcloud-docker/docker-compose.yaml
- Вставьте следующие блоки. Обратите внимание, что это не блоки служб; их отступы должны быть на одном уровне с services:.
volumes:
nextcloud:
db:
networks:
nextcloud_network:
- Откройте пустой файл .env для редактирования:
nano ~/nextcloud-docker/.env
- Запишите переменные окружения, включая их значения, в файл .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>
- После сохранения мы отобразим содержимое файла .env, чтобы проверить, правильно ли были введены значения.
cat ~/nextcloud-docker/.env
Полная конфигурация сервера Nextcloud
Прежде чем передать конфигурацию Docker Compose и создать и запустить контейнеры, мы убедимся, что все необходимое есть в наличии.
- Выведите существующую конфигурацию:
cat ~/nextcloud-docker/docker-compose.yaml
- Сравните с нашим шаблоном. Выведенная конфигурация должна соответствовать следующему коду:
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.