В этом гайде шаг за шагом пройдем процесс настройки среды для запуска NextCloud. Покажем, как запустить NextCloud на собственном сервере с ispmanager 6, используя интерфейс панели для установки Docker, а также настройку и запуск контейнеров с необходимым ПО — Nginx, MySQL, PHP и Nextcloud.

Изучать Docker и его команды не потребуется, так как работать будем через интерфейс ispmanager 6 pro или host.

1. Подготовка среды

В первую очередь нам следует установить сам Docker. Для этого перейдем в раздел «Настройки» панели инструментов. Далее — «Конфигурация ПО», выбираем Docker и нажимаем «Установить». После завершения установки панель будет перезагружена и в панели инструментов появится пункт меню Docker.


В Shell-клиенте с помощью утилитыsystemctl, мы можем проверить, что Docker работает:

systemctl status docker

docker.service - Docker Application Container Engine

Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)

Active: active (running) since Вт 2024-02-20 04:33:23 UTC; 1min 22s ago

Теперь всё готово для скачивания образов и запуска контейнеров с необходимыми нам сервисами.

2. Создание Docker контейнеров

Для корректной работы Nextcloud нам необходим MySQL, Nginx, PHP и контейнер с самим приложением.

Создание Docker контейнера MySQL. Для запуска контейнера с нужной нам версией MySQL мы можем воспользоваться функционалом панели для установки альтернативных версий СУБД.

Серверы альтернативных СУБД в ispmanager поднимаются в Docker-контейнерах самостоятельно, поэтому заводить контейнеры в меню Docker не нужно — он доступен там сразу.

Функционал подробно описан в официальной документации

В интерфейсе панели ispmanager перейдем в раздел «Базы данных» → «Серверы баз данных» → «Создать сервер». Там необходимо заполнить форму настроек для нашего сервера БД. Для работы Nextcloud подойдет MySQL 8.0, ее можно выбрать в выпадающем списке версий СУБД. Заполняем имя сервера, генерируем пароль и нажимаем «Создать».

После установки MySQL 8.0 появится в списке серверов баз данных. В нашем случае он прослушивает 127.0.0.1:3310.

Мы также можем увидеть контейнер в Shell-клиенте с помощью команды docker ps:

2134a70ba987

mysql:8.0.29

"docker-entrypoint..."

About a minute ago

Up About a minute 33060/tcp,

127.0.0.1:3310 → 3306/tcp

mysql-8.0

Был создан контейнер из образа mysql-8.0, а так же было добавлено сопоставление директорий /var/lib/mysql-8.0:/var/lib/mysql и /etc/ispmysql/mysql-8.0:/etc/mysql/conf. Порт3310 прокинули на 3306, но он остался в локальной сети. Необходимости прокидывать порт контейнера сервера БД в глобальную сеть нет.

Первый контейнер готов и запущен. Мы уже можем обращаться к нему и создавать базы данных и пользователей через интерфейс ispmanager.

Создадим базу данных для нашего будущего Nextcloud приложения. Для этого в интерфейсе панели перейдем в раздел «Базы данных» → «Создать базу данных».

Выбираем имя, сервер баз данных MySQL 8.0, создаем пользователя, пароль и нажимаем «Создать». 

База создана и появилась в списке БД
База создана и появилась в списке БД

Далее мы используем эту БД для настройки конфигурации Nextcloud.

Создание Docker контейнера Nginx. Перейдем к созданию контейнера web-сервера Nginx, который будет прослушивать 80 и 443 порт, давая возможность получить доступ к web-интерфейсу нашего будущего приложения.

В интерфейсе ispmanager откроем раздел Docker. Здесь мы видим наш созданный контейнер с MySQL 8.0. Нажмем «Создать контейнер».

В списке образов находим Nginx и нажимаем «Выбрать». В открывшейся форме настроек контейнера перейдем в раздел «Расширенные настройки», чтобы получить возможность внести больше опций. Выбираем имя контейнера, версию — наиболее предпочтительный вариант latest и режим перезапуска. Поля с ограничениями можно оставить пустыми, если не требуется внести конкретных лимитов.

В разделе «Сопоставление папок» volumes, -v мы можем внести сопоставление папок и файлов на сервере и внутри контейнера. Для настройки Nginx сопоставим директорию будущей конфигурации нашего сайта с сервера по пути /etc/nginx/vhosts/www-root/ к директории внутри контейнера /etc/nginx/conf.d/. Это необходимо для настройки конфига нашего сайта напрямую с сервера, без непосредственного доступа в сам контейнер.

В разделе «Сопоставление портов» port, -p мы можем сопоставить порт адреса нашего сервера и порт контейнера. По умолчанию мы не сможем прокинуть порт 80:80 и 443:443, потому что 80 и 443 порты уже заняты предустановленным панелью Nginx — в случае установки панели с рекомендованным ПО. Мы сопоставим порты 8888:80 и 4343:443, в этом случае Nginx из контейнера будет принимать запросы по server_ip:8888 и server_ip:4343.

Нажимаем «Создать».

Контейнер успешно создан. C помощью команды docker ps мы можем увидеть его в Shell-клиенте:

1d0338550c6a

nginx:latest  

"/docker-entrypoint.…"  

7 seconds ago   

Up 6 seconds   

0.0.0.0:8888 → 80/tcp,

:::8888->80/tcp,

0.0.0.0:4343->443/tcp,

:::4343->443/tcp  

nginx

Мы можем перейти по адресу http://server_ip:8888 и увидеть, что Nginx из контейнера уже принимает запросы.


Создание Docker контейнера для PHP-FPM. В нашем случае обрабатывать PHP скрипты, на которых написан Nextcloud, будет PHP-FPM в связке с Nginx.

Образ PHP-FPM отсутствует в перечне доступных образов из интерфейса ispmanager 6, но мы можем скачать его вручную через Shell-клиент с помощью команды:

docker pull php:fpm

После завершения загрузки мы можем убедиться, что образ доступен локально с помощью команды docker images:

php

fpm

353046de33f8

3 days ago

499MB

Перейдем в интерфейс панели для создания контейнера.

Откроем раздел Docker → «Создать контейнер» → «Локальное хранилище» → php:fpm → Выбрать». Добавим сопоставление папок /etc/php-fpm:/etc/php-fpm и нажмем «Создать». Контейнер был создан, он прослушивает локальный 9000 порт:

61510e18eecf  

php:fpm       

"docker-php-entrypoi…"  

12 seconds ago  

Up 12 seconds  

9000/tcp

Создание контейнера для Nextcloud. В интерфейсе панели перейдем в раздел Docker → «Создать контейнер» → в списке находим Nextcloud → «Выбрать» → «Расширенные настройки». В «Сопоставлении папок» прокинем директорию нашего сайта на сервере /var/www/www-root/data/www/domain.ru на директорию внутри контейнера /var/www/html.

Создаем контейнер. Видим, что он доступен в списке и активен:

231d8da83d86  

nextcloud:latest  

"/entrypoint.sh apac…"  

About a minute ago  

Up About a minute   80/tcp

nextcloud

Вы также можете войти в корневую директорию вашего сайта на сервере и увидеть, что в ней появились файлы Nextcloud, так как мы сопоставили ее с директорией контейнера.

Узнать адреса контейнеров можно с помощью команды docker inspect ID, где ID — это идентификатор контейнера. Узнать идентификатор контейнера можно с помощью команды docker ps. Адреса нам понадобятся для настройки конфигурации сайта.

Мы создали все необходимые контейнеры и теперь нам необходимо обеспечить их взаимодействие.

3. Настройка взаимодействия контейнеров

Теперь нужно, чтобы запросы по домену нашего сайта на 8888 или 4343 порт попадали на Nginx в контейнере, Nginx ссылался на корневую директорию нашего сайта с файлами Nextcloud, динамически контент обрабатывался с помощью PHP-FPM, а MySQL в контейнере взаимодействовал с Nextcloud.

Настройка конфигурации Nginx. Создадим новый сайт в панели, который будет использоваться для доступа к интерфейсу Nextcloud. Перейдем в раздел «Сайты», далее — «Создать сайт».

Подробная документация по созданию сайта→

Корневую директорию сайта мы прокидывали при создании контейнера Nextcloud.

На втором шаге мы прокидывали директорию с конфигурацией нашего сайта внутрь контейнера, благодаря этому управление конфигом Nginx можно осуществлять через интерфейс ispmanager 6.

Перейдем в раздел «Сайты» → выберем наш сайт → «Файл конфигурации».

Внесем достаточно простой конфиг Nginx, который будет ссылаться с помощью proxy_pass на наши контейнеры:

server {
listen 8888;

server_name domain.ru;

location / {

proxy_pass http://172.17.0.5:80;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

    }

location ~ \.php$ {

include fastcgi_params;

fastcgi_pass 172.17.0.4:9000;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_index index.php;

    }

}

172.17.0.5 — адрес нашего контейнера с Nextcloud, а 172.17.0.4 — адрес контейнера с PHP-FPM. 

Сохраняем конфигурацию и перезапускаем контейнер с Nginx. Это можно сделать с помощью команды docker restart ID.

Теперь по адресу http://domain.ru:8888 открывается стартовая страница Nextcloud.

Вы можете настроить конфиг Nginx под себя, добавив необходимые параметры.

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

Доступы к базе данных укажем те, что были созданы в главе «Создание Docker контейнеров» после установки контейнера MySQL. Хост сервера баз данных мы можем узнать в разделе «Базы данных» в интерфейсе ispmanager 6. После заполнения полей нажмите «Установить» и дождитесь окончания установки. 

Nextcloud готов к использованию.

Что мы сделали: изолировали сервисы в контейнерах с помощью ispmanager 6 и развернули Nginx, PHP-FPM, MySQL и Nextcloud внутри отдельных контейнеров и обеспечили их взаимодействие.

Если остались вопросы — пишите, будем разбираться.

Комментарии (2)


  1. Ave_Ls
    29.03.2024 06:39

    Возможно было, но не увидел — сколько мощностей надо под эту радость? Я знаю, что в случае с контейнеризацией сайтов там порядка 2гб РАМ на каждый сайт. А тут?


    1. proxhyde
      29.03.2024 06:39
      +1

      эта тачка была на 4гб РАМ, вместе с панелью и альтернативной субд (помимо нативной) было как раз, по OOM ничего бы не падало с адекватной нагрузкой, но и сильнее не развернешься