Оформление
Домен и HTTPS
После start приложение доступно только во внутренней сети Docker. HTTPS включает отдельный сервис proxy в профиле public. Сначала организуйте ограниченный доступ операторов, проверьте вход и рабочие сценарии; затем открывайте доступ пользователям. Имя профиля public само по себе не ограничивает круг посетителей.
Подготовка
Если ещё нет Docker, Compose и административной сессии, сначала выполните подготовку нового сервера. Здесь команды выполняются на сервере от root; DNS меняется отдельно — в панели провайдера домена.
Выберите домен, например helpdesk.example.com, и задайте DOMAIN=helpdesk.example.com в .env, без протокола и пути. Этот параметр участвует в настройке Caddy и AUTH_ORIGIN приложения. Домен в браузере и ожидаемый origin должны совпадать.
Настройте DNS-записи A и, при использовании IPv6, AAAA на сервер. Доступ к TCP 80 и 443 определите по порядку приёмки ниже. Неверная AAAA-запись может направить часть посетителей на другой сервер. MX-записи относятся к почте: изменение веб-домена само по себе не требует их замены.
Убедитесь, что порты не заняты другим веб-сервером, а firewall и правила провайдера согласованы. PostgreSQL и порт приложения наружу не публикуйте. Постоянные тома Caddy хранят его состояние; не удаляйте их при обычном перезапуске.
Привязать домен: что вводить в панели DNS
Для примера используем helpdesk.example.com. Замените его своим адресом. Интерфейсы провайдеров разные, поэтому ориентируйтесь на назначение полей, а не на название конкретной панели.
- Откройте управление DNS-зоной домена
example.com. Оно может находиться не там, где куплен сервер, и даже не у регистратора домена: нужен провайдер, чьи DNS-серверы обслуживают зону. - Найдите существующие записи для
helpdesk. Если там уже работает другой сайт, остановитесь и согласуйте переключение; не заменяйте адрес чужой системы. - Для нового поддомена добавьте запись из таблицы. Не меняйте NS, MX и остальные имена ради одного поддомена.
- Сохраните запись и дождитесь её появления в DNS. Обновление не всегда мгновенное; время зависит от TTL и кэшей.
- Только затем переходите к ограничению доступа и запуску HTTPS ниже.
| Поле | Пример для helpdesk.example.com |
|---|---|
| Тип | A |
| Имя / хост | helpdesk; если панель требует полное имя — helpdesk.example.com |
| Значение / адрес | Публичный IPv4 нового сервера из панели хостинга, без http:// |
| TTL | Значение по умолчанию провайдера, если администратор не указал другое |
AAAA добавляйте только при настроенном и проверенном IPv6 сервера. Если используете корень домена вместо поддомена, поле имени обычно обозначается @ или пустым значением — проверьте подсказку своего провайдера. Для простого прямого подключения режим записи должен направлять трафик на сервер; CDN или проксирование провайдера требуют отдельной проверки TLS и сетевых ограничений.
Проверка с вашего компьютера Windows (PowerShell):
powershell
Resolve-DnsName helpdesk.example.com -Type A
Resolve-DnsName helpdesk.example.com -Type AAAAДля A ожидается IPv4 вашего сервера. Отсутствие AAAA нормально, если IPv6 не используете; неверный IPv6 — не нормально. Это проверка DNS, ещё не проверка доступности сайта.
На сервере откройте настройки:
sh
cd /opt/ngensia/deploy
nano .envУкажите DOMAIN=helpdesk.example.com со своим доменом. Сохраните Ctrl+O, Enter и выйдите Ctrl+X. Не добавляйте к DOMAIN протокол, порт или путь /docs/.
Закрытая приёмка и доступ пользователей
До запуска proxy настройте внешний firewall провайдера или сетевой шлюз: TCP 443 разрешён только с согласованных IP операторов либо выхода их VPN, остальным запрещён. Правило должно действовать для IPv4 и IPv6 и реально закрывать опубликованный Docker-порт; одного предположения о локальном firewall недостаточно.
TCP 80 оставьте доступным для HTTP-проверки домена при выдаче сертификата Caddy. В штатной конфигурации обычные HTTP-запросы перенаправляются на HTTPS, где действует ограничение доступа. Если политика запрещает такой доступ к 80 или центр сертификации не может проверить домен, сначала согласуйте отдельную схему выдачи сертификата; не отключайте проверку TLS в браузере.
Запустите proxy следующими командами. С разрешённого подключения откройте именно https://helpdesk.example.com/login, чтобы совпадали сертификат и AUTH_ORIGIN. С другого внешнего адреса убедитесь, что HTTPS недоступен. Затем проверьте вход и нужные сценарии. Только после приёмки расширьте сетевое правило на пользователей и повторите проверку.
При восстановлении можно использовать отдельный согласованный домен приёмки. При смене на рабочий домен обновите DOMAIN, повторите sh ngensia.sh start, запуск proxy и проверки сертификата и входа. Схема firewall и выдача сертификата должны быть проверены на целевой инфраструктуре; наличие этой инструкции не означает их приёмку.
Включение proxy
Для локального хранения файлов:
sh
cd /opt/ngensia/deploy
sh ngensia.sh start
docker compose --env-file .env -f compose.yml --profile public run --rm --no-deps proxy caddy validate --config /etc/caddy/Caddyfile
docker compose --env-file .env -f compose.yml --profile public up -d --wait proxyДля S3 используйте тот же overlay, что и приложение:
sh
cd /opt/ngensia/deploy
sh ngensia.sh start
docker compose --env-file .env -f compose.yml -f compose.s3.yml --profile public run --rm --no-deps proxy caddy validate --config /etc/caddy/Caddyfile
docker compose --env-file .env -f compose.yml -f compose.s3.yml --profile public up -d --wait proxyПроверку caddy validate выполните отдельно: при ошибке не переходите к запуску.
Caddy обслуживает заданный домен и направляет запросы к app. Проверьте в браузере https://helpdesk.example.com: сертификат, страницу входа, успешный вход и открытие вложения. Доступность главной страницы ещё не доказывает работоспособность всех функций.
Диагностика
При ошибке сертификата проверьте DNS, внешнюю доступность портов и журнал proxy. При 502 — состояние app и его внутреннюю готовность. Публичные /health, /health/* и /version намеренно отвечают 404; используйте внутреннюю диагностику, не снимайте это ограничение ради внешнего монитора.
Штатная команда stop останавливает app и PostgreSQL, но не proxy. Для закрытия внешнего входа остановите proxy отдельной Compose-командой с тем же набором файлов. Смена домена требует повторной проверки origin, сертификата и настроек интеграций.