Обзор развертывания Strapi на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие следующих компонентов и условий на сервере:
- Операционная система Ubuntu.
- Установленный и работающий демон Docker.
- Права доступа пользователя
rootили учетной записи с правамиsudo. - Свободные порты для доступа к веб-интерфейсу и базе данных (по умолчанию порт
1337для Strapi и порт5432для PostgreSQL). - Доменное имя, настроенное на IP-адрес сервера, для работы с сертификатами SSL через Certbot.
Структура файлов и каталогов¶
Конфигурация и данные приложения размещаются в следующих директориях:
/root/nginx— каталог для конфигурации прокси-сервера Nginx и скриптов запуска./root/nginx/compose.yml— файл конфигурации Docker Compose для запуска Nginx и Certbot./data/nginx/nginx-certbot.env— файл переменных окружения для настройки Nginx./data/nginx/user_conf.d— директория для пользовательских конфигурационных файлов Nginx./data/nginx/nginx_secrets— внешний том для хранения сертификатов Let's Encrypt./var/lib/postgresql/data— директория для хранения данных базы данных PostgreSQL.- Каталог, указанный в переменной
strapi_volume(по умолчанию/srv/appвнутри контейнера), используется для хранения файлов приложения Strapi.
Процесс установки приложения¶
Развертывание осуществляется через запуск контейнеров Docker. Версия приложения Strapi определяется тегом latest в образе docker-repo.hostkey.com/docker-anonymous/strapi.
Процесс включает следующие этапы:
- Установка и настройка Docker на сервере.
- Создание сети Docker для изоляции контейнеров.
- Развертывание контейнера базы данных PostgreSQL версии
15. - Развертывание контейнера Strapi с подключением к базе данных.
- Настройка и запуск прокси-сервера Nginx с поддержкой автоматического получения SSL-сертификатов через Certbot.
Базы данных¶
Приложение использует базу данных PostgreSQL для хранения информации.
- Образ контейнера:
postgres:15. - Имя контейнера: определяется переменной
db_host. - Параметры подключения передаются через переменные окружения:
POSTGRES_DB— имя базы данных.POSTGRES_USER— имя пользователя.POSTGRES_PASSWORD— пароль пользователя.- Данные базы данных сохраняются в томе
/var/lib/postgresql/data. - Порт базы данных
5432маппится на внешний порт, указанный в переменнойdb_port.
Контейнеры Docker и их запуск¶
Система использует два основных типа контейнеров: приложение с базой данных и прокси-сервер.
Запуск базы данных и приложения Strapi¶
Контейнеры запускаются с использованием модуля community.docker.docker_container или аналогичных команд Docker.
- Контейнер базы данных:
- Имя:
db_host. - Образ:
postgres:15. - Политика перезапуска:
always. - Сеть: подключен к сети, указанной в переменной
docker_network. -
Томы:
/var/lib/postgresql/data:/var/lib/postgresql/data. -
Контейнер Strapi:
- Имя:
strapi. - Образ:
docker-repo.hostkey.com/docker-anonymous/strapi:latest. - Политика перезапуска:
always. - Сеть: подключен к сети, указанной в переменной
docker_network. - Переменные окружения:
DATABASE_CLIENT:postgres.DATABASE_NAME: имя базы данных.DATABASE_HOST: имя хоста базы данных.DATABASE_PORT: порт базы данных.DATABASE_USERNAME: имя пользователя базы данных.DATABASE_PASSWORD: пароль пользователя базы данных.
- Томы: каталог
strapi_volumeмаппится на/srv/app. - Порты: порт
1337маппится на внешний порт, указанный в переменнойstrapi_port.
Запуск прокси-сервера Nginx¶
Прокси-сервер управляется через файл compose.yml, расположенный в директории /root/nginx.
- Команда запуска:
docker compose up -dв директории/root/nginx. - Образ:
jonasal/nginx-certbot:latest. - Политика перезапуска:
unless-stopped. - Режим сети:
host. - Переменные окружения:
CERTBOT_EMAIL:hkadm@hostkey.com.- Файл переменных:
/data/nginx/nginx-certbot.env. - Томы:
nginx_secretsмаппится на/etc/letsencrypt./data/nginx/user_conf.dмаппится на/etc/nginx/user_conf.d.
Прокси серверы¶
Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx с Certbot.
- Образ:
jonasal/nginx-certbot:latest. - Режим работы:
network_mode: host, что позволяет контейнеру напрямую использовать сетевой стек хоста. - Сертификаты SSL хранятся в внешнем томе
nginx_secrets, который маппится на/etc/letsencrypt. - Пользовательские конфигурации Nginx размещаются в директории
/data/nginx/user_conf.d. - Email для уведомлений от Certbot:
hkadm@hostkey.com.
Настройки прав¶
Права доступа к файлам и директориям настроены следующим образом:
- Директория
/root/nginxимеет владельцаrootи группуrootс правами0755. - Файл
/root/nginx/compose.ymlимеет владельцаrootи группуrootс правами0644. - Директория для данных Strapi (
strapi_volume) имеет владельца с UID1000и GID1000с правами0755. - Директория
/var/lib/postgresql/dataиспользуется для хранения данных базы данных и должна быть доступна для процесса контейнера PostgreSQL.
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker и Docker Compose.
- Запуск прокси-сервера Nginx:
- Проверка статуса запущенных контейнеров:
- Остановка и удаление контейнеров Strapi и PostgreSQL (при необходимости):
- Обновление образов контейнеров:
- Перезапуск контейнеров после обновления образов: