Обзор развертывания Docuseal на сервере¶
Предварительные требования и основные условия¶
Для развертывания Docuseal требуется среда Linux-сервера с установленными Docker и Docker Compose. Для успешной установки необходимо соблюдение следующих спецификаций:
-
Операционная система: Дистрибутив Linux, поддерживающий Docker Engine.
-
Права доступа: Для управления контейнерами Docker, создания томов (volumes) и настройки правил межсетевого экрана требуются права
rootилиsudo. -
Доступ к сети: На сервере должно быть настроено доступное доменное имя для терминации SSL.
-
Порты: На межсетевом экране сервера должны быть открыты TCP-порты
80и443для пропуска внешнего трафика.
FQDN финальной панели¶
Приложение доступно через домен hostkey.in. Полное доменное имя (FQDN) имеет вид: docuseal<Server ID>.hostkey.in
Сервис принимает подключения по порту 443 для защищенных соединений HTTPS. Server ID — это переменная, уникальная для конкретного экземпляра развертывания, которая добавляется к префиксу docuseal.
Структура файлов и каталогов¶
Все конфигурационные файлы и данные для развертывания Docuseal организованы в директории /opt на хост-системе.
-
/opt/docuseal: Основная директория, содержащая файлы конфигурации приложения и оркестрации. -
/opt/docuseal/Caddyfile: Файл конфигурации обратного прокси-сервера Caddy. -
/opt/docuseal/compose.yml: Файл определения Docker Compose, специфицирующий сервисы, сети и тома.
Процесс установки приложения¶
Приложение разворачивается с помощью Docker Compose. Установка включает создание специфических Docker-томов для постоянного хранения данных и запуск сервисов, определенных в compose-файле.
-
Установка создает следующие Docker-тома:
-
docuseal_data: Хранит основные данные приложения Docuseal. -
postgres_data: Хранит файлы базы данных PostgreSQL. -
caddy_data: Хранит постоянные данные Caddy, включая SSL-сертификаты. -
caddy_config: Хранит конфигурацию времени выполнения Caddy и временные файлы. -
Сервисы запускаются с помощью команды
docker composeиз директории/opt/docuseal. Развертывание обеспечивает рабочее состояние базы данных PostgreSQL перед запуском приложения.
Права доступа и безопасность¶
Безопасность управляется через правила межсетевого экрана и изоляцию контейнеров.
-
Конфигурация межсетевого экрана: Межсетевой экран разрешает трафик только на следующих портах в зоне
public: -
Порт
80(TCP): Требуется для HTTP-запросов и выдачи SSL-сертификатов. -
Порт
443(TCP): Требуется для HTTPS-трафика. -
Изоляция контейнеров: Сервисы взаимодействуют через внутреннюю сеть Docker. Контейнер приложения (
app) не открывает порты напрямую на хосте; вместо этого он взаимодействует внутренним образом с прокси-серверомcaddy.
Базы данных¶
Docuseal использует базу данных PostgreSQL для хранения данных.
-
Тип базы данных: PostgreSQL версии 15.
-
Метод подключения: Приложение подключается к базе данных через внутреннюю сеть Docker, используя имя сервиса
postgres. -
Местоположение хранения: Данные сохраняются в Docker-томе
postgres_data, смонтированном в/var/lib/postgresql/dataвнутри контейнера. -
Настройки:
-
Пользователь:
postgres -
Имя базы данных:
docuseal -
Хост:
postgres -
Порт:
5432
Docker-контейнеры и их развертывание¶
Развертывание состоит из трех основных контейнеров, оркестрируемых Docker Compose:
-
Контейнер приложения (App Container)
-
Образ:
docuseal/docuseal:latest -
Внутренний порт: Открывает порт
3000внутренне. -
Томы: Монтирует
docuseal_dataв/data/docuseal. -
Зависимости: Запускается только после того, как сервис
postgresстанет рабочим. -
Окружение: Настроено с
FORCE_SSLиDATABASE_URL. -
Контейнер Postgres
-
Образ:
postgres:15 -
Томы: Монтирует
postgres_dataв/var/lib/postgresql/data. -
Проверка состояния (Health Check): Проверяет доступность с помощью
pg_isready. -
Контейнер Caddy
-
Образ:
caddy:latest -
Команда:
caddy run --config /etc/caddy/Caddyfile -
Порты: Открывает на хосте порты
80(TCP) и443(TCP/UDP). -
Томы: Монтирует
caddy_dataв/data,caddy_configв/config, а также Caddyfile хоста в/etc/caddy/Caddyfile.
Прокси-серверы¶
В качестве обратного прокси и обработчика терминации SSL используется Caddy.
-
Файл конфигурации: Конфигурация прокси определена в
/opt/docuseal/Caddyfile. -
Функциональность: Caddyfile направляет входящий трафик с настроенного домена на сервис
appна порту3000. -
SSL: Caddy автоматически управляет SSL-сертификатами для указанного домена, обеспечивая защищенные соединения HTTPS.
-
Домены: Поддерживает основной домен и необязательные временные домены, если они определены в конфигурации.
Настройки прав доступа¶
Конфигурационные файлы и директории на хост-системе имеют следующие права:
-
Директория
/opt/docuseal: -
Владелец:
root -
Группа:
root -
Мод:
0755(доступна для чтения и выполнения всеми, запись разрешена только для root) -
Конфигурационные файлы (
Caddyfile,compose.yml): -
Владелец:
root -
Группа:
root -
Мод:
0644(доступны для чтения всем, запись разрешена только для root)
Расположение файлов конфигурации и данных¶
Следующие места содержат критическую конфигурацию и данные для развернутой системы:
| Компонент | Путь на хосте | Назначение |
|---|---|---|
| Конфигурация приложения | /opt/docuseal/Caddyfile | Конфигурация обратного прокси и SSL |
| Docker Compose | /opt/docuseal/compose.yml | Определение оркестрации сервисов |
| Данные приложения | docuseal_data (Docker-том) | Постоянное хранилище для Docuseal |
| Данные БД | postgres_data (Docker-том) | Файлы базы данных PostgreSQL |
| Данные прокси | caddy_data (Docker-том) | Сертификаты и кэш Caddy |
| Конфигурация прокси | caddy_config (Docker-том) | Конфигурация времени выполнения Caddy |
Доступные порты для подключения¶
Сервер открывает следующие порты для внешних пользователей:
| Порт | Протокол | Описание |
|---|---|---|
| 80 | TCP | HTTP-трафик (перенаправляется на HTTPS) |
| 443 | TCP | HTTPS-трафик (защищенный доступ к приложению) |
| 443 | UDP | Поддержка HTTP/2 и QUIC |
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker Compose, выполняемые из директории /opt/docuseal.
-
Запустить приложение:
-
Остановить приложение:
-
Обновить приложение: Для обновления до последней версии загрузите новые образы и перезапустите контейнеры:
-
Просмотр логов: