Перейти к содержанию

Обзор развертывания Nextcloud на сервере

Предварительные требования и основные условия

Для успешного развертывания приложения Nextcloud с интеграцией OnlyOffice целевой сервер должен соответствовать следующим требованиям:

  • Операционная система: Сервер на базе Linux с установленными Docker и Docker Compose.

  • Права доступа: Для управления системными службами, создания томов и настройки межсетевого экрана требуются права root или sudo.

  • Настройка межсетевого экрана (Firewall): Межсетевой экран сервера должен разрешать входящий трафик на определенных TCP-портах. Скрипт развертывания настраивает правила для:

    • Порт 80 (HTTP)

    • Порт 443 (HTTPS)

    • Порт 22 (SSH — требуется для доступа к системе)

  • Домен: Полное доменное имя (FQDN) должно разрешаться в IP-адрес сервера для генерации SSL-сертификата через Certbot.

FQDN развернутого приложения

Приложение доступно через домен hostkey.in с использованием конкретного префикса и идентификатора сервера. Стандартный формат FQDN:

nextcloud<ServerID>.hostkey.in

  • Протокол: HTTPS

  • Порт: 443

  • Пример: nextcloud123.hostkey.in

Примечание: Скрипт развертывания автоматически настраивает систему для перенаправления HTTP-трафика (порт 80) на HTTPS (порт 443).

Структура файлов и каталогов

Развертывание организует файлы конфигурации, сертификаты и данные приложения в следующих каталогах:

  • Конфигурация и скрипты приложения:

    • /opt/nextcloud/: Содержит файл Docker Compose, скрипты конфигурации и настройки PHP.

      • /opt/nextcloud/compose.yml: Основное определение Docker Compose.

      • /opt/nextcloud/set_configuration.sh: Скрипт инициализации настроек Nextcloud и интеграции OnlyOffice.

      • /opt/nextcloud/www.conf, /opt/nextcloud/fpm.conf, /opt/nextcloud/php.ini: Конфигурации PHP-FPM и среды выполнения.

  • Конфигурация Nginx:

    • /opt/nginx/: Содержит основную конфигурацию Nginx и файлы окружения.

      • /opt/nginx/nginx.conf: Основной файл конфигурации Nginx.

      • /opt/nginx/nginx-certbot.env: Переменные окружения для службы Certbot.

      • /opt/nginx/user_conf.d/: Каталог для пользовательских конфигураций сервера.

        • /opt/nginx/user_conf.d/<final_domain>.conf: Конкретная конфигурация блока сервера для развернутого домена.
  • Хранение данных:

    • Данные приложения Nextcloud по умолчанию хранятся в Docker-томе с именем app_data. Если во время развертывания указан пользовательский путь, он сопоставляется с указанным каталогом на хосте (например, /opt/nextcloud_data).

    • Данные базы данных хранятся в Docker-томе db_data.

    • Данные OnlyOffice хранятся в томе document_data.

    • Логи OnlyOffice хранятся в томе document_log.

    • SSL-сертификаты хранятся в томе nginx_secrets, сопоставленном с /etc/letsencrypt внутри контейнера Nginx.

Процесс установки приложения

Приложение развертывается с использованием Docker Compose, который оркестрирует множество контейнеров для запуска стека Nextcloud, базы данных PostgreSQL, Redis, сервера документов OnlyOffice и прокси Nginx.

Процесс развертывания выполняет следующие шаги:

  1. Создание каталогов: Создает необходимые каталоги для файлов конфигурации и путей данных.

  2. Инициализация томов: Создает следующие Docker-томы, если они еще не существуют:

    • app_data

    • db_data

    • document_data

    • document_log

    • nginx_secrets

  3. Запуск служб: Выполняет команду docker compose up -d из каталога /opt/nextcloud для запуска всех служб.

  4. Предоставление SSL-сертификата: Развертывание инициирует Certbot внутри контейнера Nginx для получения или продления SSL-сертификата для домена с использованием метода проверки webroot challenge.

  5. Инициализация конфигурации: Запускает скрипт set_configuration.sh для:

    • Инициализации базы данных Nextcloud и учетной записи администратора.

    • Настройки доверенных доменов (trusted domains).

    • Установки и настройки приложения OnlyOffice внутри Nextcloud.

  6. Оптимизация базы данных: Выполняет специфические команды Nextcloud для добавления отсутствующих индексов базы данных и столбцов.

Файл Docker Compose указывает следующие образы:

  • postgres:alpine

  • redis:alpine

  • nextcloud:fpm

  • onlyoffice/documentserver:latest

  • jonasal/nginx-certbot:latest

Контейнеры Docker и их развертывание

Для развертывания используются следующие контейнеры, определенные в файле /opt/nextcloud/compose.yml:

  • db

    • Образ: postgres:alpine

    • Назначение: Хостит базу данных PostgreSQL.

    • Окружение: Настроено с именем базы данных nextcloud и пользователем nextcloud.

    • Том: Монтирует db_data в /var/lib/postgresql/data.

    • Порты: Открывает 5432 во внутренней сети.

  • redis

    • Образ: redis:alpine

    • Назначение: Слой кэширования для Nextcloud.

    • Порты: Порты не открываются наружу.

  • app (Имя контейнера: app-server)

    • Образ: nextcloud:fpm

    • Назначение: Ядро приложения Nextcloud на базе PHP-FPM.

    • Окружение: Подключается к службам db и redis. Настраивает переменные OVERWRITEHOST, OVERWRITEPROTOCOL и OVERWRITECLIURL.

    • Томы: Монтирует app_data (или пользовательский путь хоста) в /var/www/html и сопоставляет локальные файлы конфигурации PHP.

    • Порты: Открывает 80 и 9000 во внутренней сети.

  • onlyoffice-document-server

    • Образ: onlyoffice/documentserver:latest

    • Назначение: Обеспечивает возможности редактирования документов.

    • Томы: Монтирует document_data в /var/www/onlyoffice/Data и document_log в /var/log/onlyoffice.

    • Порты: Открывает 80 и 443 во внутренней сети.

  • nginx (Имя контейнера: nginx-certbot)

    • Образ: jonasal/nginx-certbot:latest

    • Назначение: Выступает в роли обратного прокси-сервера и обрабатывает завершение SSL-сессий через Certbot.

    • Порты: Сопоставляет порты хоста 80 и 443 на контейнер.

    • Томы: Монтирует nginx_secrets для сертификатов, том данных приложения и каталог пользовательской конфигурации.

Прокси-серверы

Система использует Nginx в качестве обратного прокси-сервера и точки завершения SSL.

  • Образ: jonasal/nginx-certbot:latest

  • Конфигурация:

    • Основная конфигурация: /opt/nginx/nginx.conf

    • Пользовательская конфигурация: /opt/nginx/user_conf.d/<final_domain>.conf

  • Обработка SSL:

    • Контейнер Nginx автоматически получает и продлевает SSL-сертификаты с помощью Certbot.

    • Сертификаты хранятся в /etc/letsencrypt/live/<final_domain>/ внутри контейнера.

    • Конфигурация принудительно перенаправляет HTTP-запросы на HTTPS (HTTP возвращает перенаправление 301 на HTTPS).

    • По умолчанию добавляются заголовки безопасности, такие как Strict-Transport-Security, X-Frame-Options и X-Content-Type-Options.

  • Маршрутизация (Routing):

    • Запросы к / проксируются к контейнеру app (Nextcloud).

    • Запросы к /ds-vpath/ проксируются к контейнеру onlyoffice-document-server.

Базы данных

  • Тип базы данных: PostgreSQL

  • Контейнер: db

  • Местоположение хранения: Docker-том db_data, сопоставленный с /var/lib/postgresql/data.

  • Параметры подключения:

    • Хост: db (внутреннее имя хоста Docker-сети)

    • Порт: 5432

    • Имя базы данных: nextcloud

    • Пользователь: nextcloud

    • Пароль: Определяется в переменных развертывания (доступен через nextcloud_admin_pwd).

Права доступа и безопасность

  • Правила межсетевого экрана:

    • Если присутствует firewalld, порты 80 и 443 включаются в зоне public.

    • Если присутствует ufw, включаются порты 22, 80 и 443.

  • Безопасность контейнеров:

    • Конфигурация Nginx включает заголовки безопасности для предотвращения распространенных веб-уязвимостей.

    • Доступ к чувствительным каталогам внутри приложения Nextcloud (например, /build, /tests, /config, /lib, /3rdparty, /templates, /data) блокируется Nginx.

    • Доступ к определенным путям, начинающимся с ., autotest, occ, issue, indie, db_ и console, запрещен.

  • Права доступа к файлам:

    • Каталоги конфигурации (/opt/nextcloud, /opt/nginx) принадлежат пользователю root с правами 0640 или 0755.

    • Docker-контейнеры работают с правами пользователя по умолчанию, определенными в образах (приложение Nextcloud работает как www-data внутри контейнера).

Доступные порты для подключения

На сервере для внешнего доступа настроены следующие порты:

Порт Протокол Служба Описание
80 TCP Nginx HTTP-трафик (перенаправление на HTTPS)
443 TCP Nginx HTTPS-трафик (основной доступ)
22 TCP SSH Администрирование системы

Внутренние порты, открытые контейнерами (недоступны напрямую через межсетевой экран хоста):

  • 5432: PostgreSQL

  • 80, 9000: Nextcloud FPM

  • 80, 443: OnlyOffice Document Server

Запуск, остановка и обновление

Весь стек управляется через Docker Compose, расположенный в /opt/nextcloud.

  • Запуск стека:

    cd /opt/nextcloud
    docker compose up -d
    

  • Остановка стека:

    cd /opt/nextcloud
    docker compose down
    

  • Перезапуск стека:

    cd /opt/nextcloud
    docker compose restart
    

  • Обновление образов: Чтобы загрузить последние версии образов контейнеров и перезапустить службы:

    cd /opt/nextcloud
    docker compose pull
    docker compose up -d
    

  • Просмотр логов:

    docker logs -f app-server
    docker logs -f nginx-certbot
    

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

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×