В этом гайде шаг за шагом пройдем процесс настройки среды для запуска 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 внутри отдельных контейнеров и обеспечили их взаимодействие.
Если остались вопросы — пишите, будем разбираться.
Ave_Ls
Возможно было, но не увидел — сколько мощностей надо под эту радость? Я знаю, что в случае с контейнеризацией сайтов там порядка 2гб РАМ на каждый сайт. А тут?
proxhyde
эта тачка была на 4гб РАМ, вместе с панелью и альтернативной субд (помимо нативной) было как раз, по OOM ничего бы не падало с адекватной нагрузкой, но и сильнее не развернешься