Обзор развертывания Strapi на сервере¶
Предварительные требования¶
Сервер должен соответствовать следующим требованиям для размещения приложения Strapi и связанных с ним сервисов:
-
Операционная система: Ubuntu (совместимая с ролью установки Docker).
-
Привилегии: Требуется доступ root или sudo для создания каталогов, управления Docker и настройки межсетевого экрана (firewall).
-
Домен: Развертывание использует зону
hostkey.in. -
Порты:
-
Порт
1337используется для внутреннего приложения Strapi. -
Порт
5432используется для базы данных PostgreSQL. -
Порты
80и443используются прокси-сервером Nginx для трафика HTTP и HTTPS.
FQDN финальной панели¶
Приложение доступно через следующую структуру Fully Qualified Domain Name (FQDN):
strapi<Server ID>.hostkey.in:1337
Примечание: Фактический внешний доступ может быть направлен через прокси-сервер Nginx на стандартных портах (80/443) в зависимости от конфигурации прокси, тогда как прямой порт контейнера — 1337.
Структура файлов и каталогов¶
Для данных приложения, конфигурации и сертификатов развертывание использует следующие каталоги:
-
/opt/strapi: Основной том (volume) для данных и кода приложения Strapi. -
/root/nginx: Каталог, содержащий конфигурационный файлdocker-compose.ymlдля Nginx и Certbot. -
/etc/letsencrypt: Каталог, смонтированный для SSL/TLS сертификатов, управляемых Certbot. -
/data/nginx/user_conf.d: Каталог для пользовательских конфигураций Nginx. -
/data/nginx: Каталог, содержащий файл окруженияnginx-certbot.env. -
/var/lib/postgresql/data: Каталог для постоянного хранения данных PostgreSQL.
Процесс установки приложения¶
Приложение развертывается с использованием контейнеров Docker. Установка включает экземпляр Strapi и контейнер базы данных PostgreSQL, оркестрированные в отдельной сети Docker.
-
Образ Strapi:
docker-repo.hostkey.com/docker-anonymous/strapi:latest -
Образ PostgreSQL:
postgres:15 -
Сеть Docker:
strapi_network
Процесс развертывания включает следующие шаги:
-
Создание необходимого каталога тома по пути
/opt/strapi. -
Создание сети Docker
strapi_network. -
Запуск контейнера PostgreSQL с указанными переменными окружения.
-
Запуск контейнера Strapi, подключенного к той же сети и базе данных.
Базы данных¶
Приложение использует базу данных PostgreSQL для постоянного хранения данных. База данных размещена в контейнере Docker с именем strapi-db.
-
Хост базы данных:
strapi-db -
Порт базы данных:
5432 -
Имя базы данных:
strapi -
Пользователь базы данных:
strapi_user -
Пароль базы данных:
strapi_password -
Место хранения: Данные сохраняются в
/var/lib/postgresql/dataна хосте.
Контейнер Strapi подключается к базе данных, используя следующие переменные окружения:
-
DATABASE_CLIENT: postgres -
DATABASE_HOST: strapi-db -
DATABASE_PORT: 5432 -
DATABASE_USERNAME: strapi_user -
DATABASE_PASSWORD: strapi_password
Контейнеры Docker и их развертывание¶
Система использует следующие контейнеры Docker:
-
strapi-db
-
Образ:
postgres:15 -
Политика перезапуска:
always -
Сеть:
strapi_network -
Том: Маппинг
/var/lib/postgresql/dataна/var/lib/postgresql/dataвнутри контейнера. -
Порты: Открывает порт
5432, маппинг на порт5432хоста. -
strapi
-
Образ:
docker-repo.hostkey.com/docker-anonymous/strapi:latest -
Политика перезапуска:
always -
Сеть:
strapi_network -
Том: Маппинг
/opt/strapiна/srv/appвнутри контейнера. -
Порты: Открывает порт
1337, маппинг на порт1337хоста. -
nginx (Прокси и SSL)
-
Образ:
jonasal/nginx-certbot:latest -
Политика перезапуска:
unless-stopped -
Режим сети:
host -
Томы:
-
nginx_secretsмаппинг на/etc/letsencrypt -
/data/nginx/user_conf.dмаппинг на/etc/nginx/user_conf.d
-
-
Файл конфигурации:
/root/nginx/compose.yml
Прокси-серверы¶
Развертывание включает обратный прокси-сервер Nginx с автоматическим управлением SSL-сертификатами через Certbot.
-
Образ прокси:
jonasal/nginx-certbot:latest -
Email для Certbot:
hkadm@hostkey.com -
Место расположения конфигурации:
/root/nginx/compose.yml -
Файл окружения:
/data/nginx/nginx-certbot.env -
Монтирование томов:
-
nginx_secrets(внешний том) монтирован в/etc/letsencrypt. -
Каталог хоста
/data/nginx/user_conf.dмонтирован в/etc/nginx/user_conf.d. -
Режим сети: Контейнер Nginx работает в режиме сети
host.
Прокси-сервер обрабатывает пересылку трафика и терминацию SSL для приложения Strapi.
Настройки прав доступа¶
Права доступа к файлам и каталогам настроены следующим образом:
-
Том Strapi (
/opt/strapi): -
Владелец:
1000(User ID) -
Группа:
1000(Group ID) -
Режим:
0755(rwxr-xr-x) -
Каталог Nginx (
/root/nginx): -
Владелец:
root -
Группа:
root -
Режим:
0755 -
Файл Docker Compose (
/root/nginx/compose.yml): -
Владелец:
root -
Группа:
root -
Режим:
0644
Расположение файлов конфигурации и данных¶
Основные файлы конфигурации и места расположения данных:
| Путь к файлу/каталогу | Описание |
|---|---|
/root/nginx/compose.yml | Конфигурация Docker Compose для Nginx и Certbot. |
/data/nginx/nginx-certbot.env | Переменные окружения для контейнера Nginx/Certbot. |
/opt/strapi | Постоянное хранилище данных приложения Strapi. |
/var/lib/postgresql/data | Постоянное хранилище данных базы данных PostgreSQL. |
/etc/letsencrypt | Хранилище для SSL/TLS сертификатов (через монтирование тома). |
Доступные порты для подключения¶
Следующие порты открыты и доступны для подключения:
-
Порт 1337: Прямой доступ к контейнеру приложения Strapi.
-
Порт 5432: Прямой доступ к контейнеру базы данных PostgreSQL.
-
Порт 80: Трафик HTTP, обрабатываемый прокси-сервером Nginx.
-
Порт 443: Трафик HTTPS, обрабатываемый прокси-сервером Nginx с использованием SSL.
Запуск, остановка и обновление¶
Сервисы управляются с помощью команд Docker.
Управление прокси-сервером Nginx: Для запуска, остановки или обновления сервисов Nginx-прокси и Certbot выполните команды из каталога /root/nginx:
Управление Strapi и базой данных: Контейнеры Strapi и базы данных управляются напрямую с помощью команд Docker:
# Запуск контейнеров
docker start strapi strapi-db
# Остановка контейнеров
docker stop strapi strapi-db
# Перезапуск контейнеров
docker restart strapi strapi-db
# Обновление образов
docker pull docker-repo.hostkey.com/docker-anonymous/strapi:latest
docker pull postgres:15
docker update strapi strapi-db
Параметр restart_policy установлен в always как для контейнера Strapi, так и для strapi-db, что обеспечивает их автоматический перезапуск при перезагрузке системы или сбое.