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

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

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

Для корректной работы BrainyCP и связанных с ним сервисов необходимы следующие базовые условия:

  • Сервер с операционной системой Ubuntu (поддерживаемые версии 20.04 и 22.04).
  • Доступ к корневой учетной записи (root) с правами sudo.
  • Установленный пакет wget (устанавливается автоматически, если его нет).
  • Подключение к интернету для загрузки образов Docker и сертификатов Let’s Encrypt.

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

После выполнения установки будут созданы и использованы следующие каталоги и файлы:

/root/nginx/
├── compose.yml
└── <другие файлы, если применимы>
/data/nginx/user_conf.d/
├── <prefix><server_id>.hostkey.in.conf
└── <другие файлы конфигурации>

Кроме того, в корневом каталоге /root будет расположен скрипт установки BrainyCP (install.sh), который был загружен с удалённого источника.

Обратите внимание, что все файлы находятся под владельцем root и имеют соответствующие права доступа (0644 для конфигурационных файлов, 0755 для каталогов).

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

  • Каталог /root/nginx принадлежит пользователю root и имеет права 0755.
  • Файл compose.yml имеет права 0644 и принадлежит root.
  • Скрипт установки install.sh после загрузки получает права 0700, чтобы его можно было выполнять только владельцем.
  • Доступ к папке /data/nginx/user_conf.d тоже осуществляется от имени root. Содержимое этой папки монтируется в контейнер как /etc/nginx/user_conf.d, где Nginx использует эти конфигурации.

Базы данных

В текущем наборе файлов информация о базе данных отсутствует, значит BrainyCP использует собственный механизм хранения данных, который инициализируется во время установки скриптом install.sh. Дополнительных настроек БД со стороны пользователя не требуется.

Контейнеры Docker и их запуск

НGINX‑certbot

Главный контейнер, отвечающий за выдачу HTTPS‑сертификатов и проксирование трафика, создаётся по шаблону compose.yml.j2. После генерации файла compose.yml в каталоге /root/nginx выполняется команда:

docker compose up -d

Из файла compose.yml видно, что:

  • Используется образ jonasal/nginx-certbot:latest.
  • Контейнер запускается в режиме network_mode: host, что позволяет напрямую прослушивать порты 80 и 443.
  • Внешний том nginx_secrets монтируется в /etc/letsencrypt, чтобы сохранять сертификаты Let’s Encrypt.
  • Папка /data/nginx/user_conf.d монтируется в /etc/nginx/user_conf.d внутри контейнера, где размещены пользовательские конфиги Nginx.
  • Переменная окружения CERTBOT_EMAIL установлена на hkadm@hostkey.com для уведомлений о истечении сертификатов.
  • Контейнер автоматически перезапускается (restart: unless-stopped).

Модификация Nginx‑конфигурации

Перед запуском контейнера выполняется изменение строки proxy_pass в файле конфигурации Nginx:

/path/to/<prefix><server_id>.hostkey.in.conf

Старая строка с проксированием удаляется, а вместо неё вставляется:

        proxy_pass http://127.0.0.1:8002;

Таким образом, трафик, проходящий через Nginx, перенаправляется на локальный сервис, работающий на порту 8002.

Прокси‑сервера

В системе используется Nginx в контейнере jonasal/nginx-certbot. Он:

  • Обрабатывает запросы по HTTPS, автоматически выдает сертификаты Let’s Encrypt.
  • Проксирует запросы к внутреннему приложению, расположённому на порту 8002.
  • Использует кастомный домен (указывается в файле конфигурации Nginx, не представлен в шаблонах).

Настройки прав, запуск, остановка и обновление

Запуск

cd /root/nginx
docker compose up -d

Контейнеры автоматически стартуют в фоне. Статус можно проверить:

docker ps | grep nginx

Остановка

cd /root/nginx
docker compose down

Обновление образа

cd /root/nginx
docker pull jonasal/nginx-certbot:latest
docker compose up -d

Перезапуск после обновления

Если требуется принудительно перезапустить контейнер без удаления томов:

cd /root/nginx
docker compose restart

Таким образом, после завершения установки BrainyCP и запуска контейнера, сервис будет доступен по HTTPS с автоматическим управлением сертификатами и корректно проксировать запросы к внутреннему приложению.

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