Обзор развертывания Nextcloud с OnlyOffice на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания системы необходимо наличие сервера с установленным Docker и Docker Compose. Система требует прав суперпользователя для создания директорий, настройки брандмауэра и запуска контейнеров.
Необходимо обеспечить доступность следующих портов в брандмауэре: - Порт 80/tcp для HTTP-трафика и получения SSL-сертификатов. - Порт 443/tcp для защищенного HTTPS-трафика. - Порт 22/tcp для удаленного доступа по SSH (при использовании UFW).
Система использует доменное имя, которое должно быть настроено в DNS и указывать на IP-адрес сервера.
Структура файлов и каталогов¶
Конфигурационные файлы и данные приложения размещаются в следующих каталогах:
/opt/nextcloud/— основной каталог конфигурации приложения:compose.yml— файл оркестрации Docker Compose.set_configuration.sh— скрипт первичной настройки Nextcloud.www.conf,fpm.conf,php.ini— файлы конфигурации PHP и PHP-FPM./opt/nginx/— каталог конфигурации веб-сервера:nginx.conf— основной файл конфигурации Nginx.nginx-certbot.env— переменные окружения для контейнера Nginx.user_conf.d/— каталог для пользовательских конфигураций серверов, где хранится файл{{ final_domain }}.conf.- Каталог данных пользователя (опционально):
- Если переменная
nextcloud_data_pathне задана, данные хранятся в Docker-томapp_data. - Если переменная задана, данные хранятся в указанной директории на хосте.
Процесс установки приложения¶
Развертывание осуществляется через Docker Compose. Процесс включает следующие этапы:
- Создание необходимых директорий на хосте:
/opt/nextcloud/opt/nginx/opt/nginx/user_conf.d-
Директория для данных (если задана переменная
nextcloud_data_path). -
Генерация и копирование конфигурационных файлов:
- Файл
compose.ymlсоздается в/opt/nextcloud/. - Конфигурация Nginx копируется в
/opt/nginx/. -
Скрипт настройки
set_configuration.shразмещается в/opt/nextcloud/. -
Создание внешних Docker-томов для хранения данных:
app_data— для файлов Nextcloud (если не используется путь на хосте).db_data— для базы данных PostgreSQL.document_data— для данных OnlyOffice.document_log— для логов OnlyOffice.-
nginx_secrets— для SSL-сертификатов. -
Запуск контейнеров командой
docker compose up -dиз директории/opt/nextcloud. -
Ожидание готовности контейнера Nginx и получение SSL-сертификата через Certbot.
-
Запуск скрипта
set_configuration.shдля инициализации базы данных и настройки администратора. -
Выполнение дополнительных команд для оптимизации базы данных и настройки OnlyOffice внутри контейнера
app-server.
Права доступа и безопасность¶
Настройка брандмауэра зависит от используемого инструмента на сервере:
- При использовании Firewalld:
- Открываются порты
80/tcpи443/tcpв зонеpublic. -
Правила применяются немедленно и сохраняются постоянно.
-
При использовании UFW:
- Открываются порты
80/tcp,443/tcpи22/tcp.
Контейнеры Nginx и OnlyOffice настроены на прослушивание портов 80 и 443 для внешнего доступа. Контейнеры базы данных и Redis не экспонируют порты наружу и доступны только внутри сети Docker.
Базы данных¶
В качестве базы данных используется PostgreSQL, развернутый в контейнере db.
- Образ:
postgres:alpine. - Имя базы данных:
nextcloud. - Пользователь базы данных:
nextcloud. - Пароль задается через переменную окружения
POSTGRES_PASSWORD. - Данные хранятся в Docker-томе
db_data, который монтируется в/var/lib/postgresql/data. - Контейнер настроен на автоматический перезапуск (
restart: always).
Контейнеры Docker и их запуск¶
Система состоит из следующих контейнеров, описанных в файле compose.yml:
- db:
- Образ:
postgres:alpine. - Хранит данные в томе
db_data. -
Экспонирует порт
5432внутри сети. -
redis:
- Образ:
redis:alpine. - Используется для кэширования.
-
Настроен на автоматический перезапуск.
-
app:
- Имя контейнера:
app-server. - Образ:
nextcloud:fpm. - Использует DNS-серверы
8.8.8.8и8.8.4.4. - Монтирует конфигурационные файлы PHP (
php.ini) и данные приложения. - Зависит от контейнеров
dbиredis. -
Экспонирует порты
80и9000внутри сети. -
onlyoffice-document-server:
- Имя контейнера:
onlyoffice-document-server. - Образ:
onlyoffice/documentserver:latest. - Монтирует тома
document_dataиdocument_log. -
Экспонирует порты
80и443внутри сети. -
nginx:
- Имя контейнера:
nginx-certbot. - Образ:
jonasal/nginx-certbot:latest. - Экспонирует порты
80и443на хосте. - Монтирует тома для SSL-сертификатов, конфигураций Nginx и данных приложения.
- Использует файл окружения
/opt/nginx/nginx-certbot.env.
Прокси серверы¶
В качестве обратного прокси используется контейнер Nginx с поддержкой автоматического получения SSL-сертификатов через Certbot.
- Конфигурация сервера хранится в файле
/opt/nginx/user_conf.d/{{ final_domain }}.conf. - Сервер перенаправляет весь HTTP-трафик (порт
80) на HTTPS (порт443). - SSL-сертификаты хранятся в томе
nginx_secretsпо пути/etc/letsencrypt/live/{{ final_domain }}/. - Настроены заголовки безопасности:
Strict-Transport-SecurityX-Frame-OptionsX-Content-Type-OptionsX-XSS-ProtectionX-Robots-Tag- Для OnlyOffice настроен прокси-путь
/ds-vpath/, который перенаправляет запросы на контейнерonlyoffice-document-server. - Максимальный размер загружаемого файла установлен в
15G.
Настройки прав¶
Все конфигурационные файлы и директории создаются с правами владельца root и группы root.
- Директории
/opt/nextcloud,/opt/nginx,/opt/nginx/user_conf.dимеют права0640. - Директория для данных (если задана) имеет права
0755. - Файлы конфигурации (
compose.yml,nginx.conf,set_configuration.shи др.) имеют права0644или0755для исполняемых скриптов. - Внутри контейнеров права на файлы данных управляются пользователем
www-data(для Nextcloud) и соответствующими пользователями образов.
Запуск, остановка и обновление¶
Управление контейнерами осуществляется через Docker Compose в директории /opt/nextcloud.
-
Запуск всех сервисов:
-
Остановка всех сервисов:
-
Перезапуск конкретного сервиса (например, Nginx):
-
Проверка статуса контейнеров:
-
Просмотр логов:
Для обновления конфигурации необходимо изменить соответствующие файлы в /opt/nextcloud/ или /opt/nginx/, затем выполнить команду docker compose up -d для применения изменений.