Docker Compose
Запустите полноценный бесплатный экземпляр Status200 на одном Linux-сервере с помощью Docker Compose. Эта страница проведёт вас от чистого сервера до работающего экземпляра, а затем расскажет об HTTPS, подготовке к продакшену, резервных копиях, обновлениях и удалении. Чтобы работать с кодом самого Status200, см. Локальная разработка.
Как это работает
Docker Compose запускает каждую часть Status200 в виде контейнера на вашем сервере. Весь трафик входит через контейнер ingress, который направляет его в app. Приложение хранит данные в PostgreSQL, ClickHouse и Valkey. Встроенный зонд выполняет проверки ваших мониторов и отправляет результаты обратно через ingress.
Развёртывание с Docker Compose
| Сервис | Образ | Что он делает |
|---|---|---|
ingress | status200/nginx | Принимает весь трафик на портах 80 и 443 и направляет его в приложение. Отдаёт HTTPS, когда Status200 управляет сертификатом. |
app | status200/app | Панель, API, страницы статуса, приём телеметрии и фоновые обработчики. |
probe-1 | status200/probe | Глобальный зонд, который выполняет проверки ваших мониторов. Использует сеть хоста. |
runner | status200/runner | Runner экземпляра, который выполняет исправления кода с помощью ИИ. Использует сеть хоста. |
postgres | postgres:15 | Конфигурация и состояние: мониторы, инциденты, пользователи. Хранится в томе postgres. |
clickhouse | clickhouse/clickhouse-server:26.7 | Телеметрия: логи, метрики, трассировки и исключения. Хранится в томе clickhouse. |
valkey | valkey/valkey:9.1-alpine | Кэш и очереди. Ничего не хранит на диске. |
Сервис valkey запускает Valkey, форк Redis 7.2 под лицензией BSD, который настраивается параметрами VALKEY_* в config.env. Подойдёт любой сервер с протоколом Redis — при желании направьте VALKEY_HOST на управляемый Redis. До 13.0.0 эти параметры назывались REDIS_*; старые имена по-прежнему читаются, контейнер по-прежнему отвечает на имя хоста redis, а npm run update их не переписывает, поэтому старый config.env не требует правок.
Для продакшена большого масштаба или когда нужна высокая доступность используйте вместо этого Helm-чарт в Kubernetes: Docker Compose запускает по одной копии каждого сервиса на одном сервере.
Требования
Выбирайте размер сервера по тому, что вы будете на нём запускать. Память и диск определяет телеметрия (логи, метрики, трассировки); когда узнаете свои объёмы, загляните в Подбор размеров и планирование ёмкости.
| Рекомендуется | Минимум для домашней лаборатории | |
|---|---|---|
| Память | 16 ГБ | 8 ГБ |
| CPU | 8 ядер | 4 ядра |
| Диск | 400 ГБ | 20 ГБ |
| Система | Ubuntu 22.04 или другой Linux на основе Debian, Ubuntu или RHEL | То же |
| Архитектура | x86-64 (amd64) или ARM (arm64) | То же |
Минимум для домашней лаборатории подходит для личного и экспериментального использования — некоторые запускают Status200 на Raspberry Pi.
Также понадобятся:
- Docker с плагином Docker Compose v2 (команда
docker compose). - Git, чтобы загрузить Status200.
- Node.js и npm, которые запускают скрипты
npm startиnpm run update, оборачивающие Docker Compose. - Свободные порты 80 и 443 на сервере. В таблице ниже перечислены все порты, которые Status200 использует на хосте.
| Порт хоста | Кто использует | Параметр | Для чего |
|---|---|---|---|
| 80 | ingress | ONEUPTIME_HTTP_PORT | Панель, API, приём телеметрии и проверка Let's Encrypt. |
| 443 | ingress | STATUS_PAGE_HTTPS_PORT | HTTPS для вашего экземпляра, когда Status200 управляет сертификатом, а также для страниц статуса и панелей на собственных доменах. |
| 5400 | postgres | Задан в docker-compose.yml | Даёт npm run backup и restore.sh доступ к PostgreSQL с самого сервера. Опубликован только на 127.0.0.1. |
| 3874 | probe-1 | GLOBAL_PROBE_1_PORT | Собственный сервер зонда. Ничему за пределами сервера он не нужен. |
| 3876 | runner | ONEUPTIME_RUNNER_PORT | Собственный сервер Runner. Ничему за пределами сервера он не нужен. |
Есть также видео с пошаговой установкой.
Установка Status200
Клонируйте ветку release
Ветка
releaseсодержит файлы последнего релиза.git clone --depth 1 --single-branch --branch release https://git.wilix.dev/status200/status200.git cd oneuptimeСоздайте config.env
Все настройки Status200 хранятся в
config.env. Начните с примера:cp config.example.env config.envЗадайте имя хоста
Откройте
config.envи укажите вHOSTдоменное имя или IP-адрес, по которому к Status200 будут обращаться, безhttp://. Оставляйтеlocalhost, только чтобы попробовать Status200 на своём компьютере.HOST=status200.example.comСгенерируйте случайные секреты
В файле примера есть секреты-заглушки, которые публично доступны на GitHub. Замените каждый собственным случайным значением:
while grep -q "please-change-this-to-random-value" config.env; do sed -i "0,/please-change-this-to-random-value/{s/please-change-this-to-random-value/$(openssl rand -hex 32)/}" config.env done grep -c "please-change-this" config.envПоследняя команда выводит
0: заглушек не осталось. Цикл использует GNUsed, который есть на любом Linux-сервере. Вот параметры, которые он заполняет:Параметр Что он защищает ONEUPTIME_SECRETВызовы между собственными сервисами Status200. ENCRYPTION_SECRETСекреты, которые хранит Status200, например токены интеграций и пароли SMTP, и выдаваемые им токены входа. DATABASE_PASSWORD,CLICKHOUSE_PASSWORD,VALKEY_PASSWORDТри хранилища данных. REGISTER_PROBE_KEYРегистрацию зондов в вашем экземпляре. GLOBAL_PROBE_1_KEY,GLOBAL_PROBE_2_KEYГлобальные зонды, которые может запускать Docker Compose ( probe-1работает по умолчанию).STATUS200_RUNNER_KEYВстроенный Runner. GLOBAL_RUNNER_KEYВстроенный глобальный Runner, который выполняет шаги JavaScript всех проектов. ВажноЗадайте секреты до первого запуска и не меняйте их потом. PostgreSQL принимает пароль только при создании своей базы данных, а смена
ENCRYPTION_SECRETпозже делает нечитаемым любое значение, зашифрованное старым. Если при первом запускеDATABASE_PASSWORDвсё ещё заглушка,npm startзадаёт ему случайное значение до того, как PostgreSQL создаст свою базу данных.Запустите Status200
npm
npm startDocker CLI
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d)Первый запуск занимает несколько минут: Docker скачивает образы, а Status200 создаёт свои базы данных.
npm startждёт, пока ответит каждая часть, и завершается строкой Status200 is up!Создайте первую учётную запись
Откройте
http://и следом вашHOST(например,http://localhost) и зарегистрируйтесь. Первая учётная запись нового экземпляра становится его главным администратором, который может открыть Admin Dashboard по адресу/admin.Любой, кто может открыть страницу, сможет зарегистрироваться после вас. Чтобы запретить это, откройте Admin Dashboard, перейдите в Настройки > Аутентификация и выключите Разрешить регистрацию. Люди, которых вы приглашаете в проект, по-прежнему смогут создать учётную запись.
Настройка HTTPS
Status200 отдаёт обычный HTTP, пока вы не выберете один из двух способов добавить HTTPS:
| Status200 получает сертификат сам | Ваш собственный обратный прокси | |
|---|---|---|
| Где завершается TLS | В ingress Status200, с бесплатным сертификатом Let's Encrypt, который он продлевает сам | В вашем прокси: Caddy, Nginx или балансировщике нагрузки |
| Что нужно | Публичное доменное имя, указывающее на сервер, и порты 80 и 443, доступные из интернета | Прокси и сертификат для вашего домена |
| Параметры | PROVISION_SSL=true, HTTP_PROTOCOL=https | PROVISION_SSL=false, HTTP_PROTOCOL=https, TRUSTED_PROXY_HOPS=2 |
| Страницы статуса на собственных доменах | Работают без дополнительной настройки | Ваш прокси должен обслуживать и эти домены |
Если вы размещаете страницы статуса или панели на собственных доменах, проще доверить TLS самому Status200: ingress сам заказывает и отдаёт сертификаты этих доменов.
С HTTP_PROTOCOL=https Status200 строит ссылки HTTPS, держит cookie входа на HTTPS и просит браузеры открывать ваш HOST только по HTTPS. Браузер соблюдает это год, на любом порту этого имени, поэтому если HOST когда-нибудь снова должен будет отвечать по обычному HTTP, задайте HSTS_MAX_AGE_SECONDS=0 в config.env заранее: браузеры забудут правило при следующем посещении.
Status200 получает сертификат сам
Направьте домен на сервер
Создайте для домена DNS-запись
A(илиAAAAдля IPv6) со значением — публичным IP-адресом сервера. Если есть записьAAAA, включите также IPv6 для Status200: см. Адреса посетителей.Включите получение сертификатов
Задайте эти значения в
config.env:HOST=status200.example.com PROVISION_SSL=true HTTP_PROTOCOL=httpsHOSTдолжен быть доменным именем: Status200 не может получить сертификат для IP-адреса или дляlocalhost.Перезапустите с новыми параметрами
npm startОткройте экземпляр по HTTPS
Откройте
https://status200.example.com. Status200 заказывает сертификат при запуске, затем проверяет его каждый час и продлевает, когда остаётся меньше 30 дней. Пока не придёт первый сертификат, обычно в течение нескольких минут, ingress отдаёт временный самоподписанный, и браузер вас предупреждает.
Ваш собственный обратный прокси
В этих шагах прокси работает на том же сервере, что и Status200. Если ваш прокси работает на другой машине, пропустите первый шаг, направьте прокси на порт 80 этого сервера и межсетевым экраном вашего облачного провайдера разрешите доступ к портам 80 и 443 только прокси: посетитель, который обращается к Status200 в обход прокси, может выбрать адрес, по которому Status200 его учитывает.
Переведите ingress с портов 80 и 443
Прокси нужны порты 80 и 443, поэтому переведите ingress на другие порты, опубликованные только на loopback-адресе
127.0.0.1этого сервера, чтобы посетители попадали в Status200 только через ваш прокси. Зонд и Runner используют сеть хоста и обращаются к Status200 черезhttp://localhost, поэтому переезжают вместе с ним:ONEUPTIME_HTTP_PORT=127.0.0.1:8080 STATUS_PAGE_HTTPS_PORT=127.0.0.1:8443 GLOBAL_PROBE_1_STATUS200_URL=http://localhost:8080 ONEUPTIME_RUNNER_STATUS200_URL=http://localhost:8080Сообщите Status200, что он за прокси
HOST=status200.example.com HTTP_PROTOCOL=https PROVISION_SSL=false TRUSTED_PROXY_HOPS=2HTTP_PROTOCOL=httpsзаставляет ссылки, которые строит Status200, использовать HTTPS.TRUSTED_PROXY_HOPS=2учитывает ваш прокси и ingress Status200, чтобы для списков разрешённых IP и ограничений частоты Status200 читал настоящий адрес посетителя. Прибавляйте по единице за каждый следующий прокси, дописывающий вX-Forwarded-For, например CDN или балансировщик нагрузки.Перезапустите Status200 на новых портах
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d) bash Tests/Scripts/status-check.sh localhost:8080npm startпроверяетhttp://localhostна порту 80, где будет ваш прокси, поэтому проверьте новый порт сами. Скрипт завершается строкой Status200 is up!Настройте прокси
Caddy
status200.example.com { reverse_proxy localhost:8080 }Caddy сам получает и продлевает сертификат, перенаправляет HTTP на HTTPS и пропускает соединения WebSocket. После изменения файла перезагрузите Caddy, например командой
sudo systemctl reload caddy.Nginx
map $http_upgrade $status200_connection_upgrade { default upgrade; "" close; } server { listen 80; server_name status200.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name status200.example.com; ssl_certificate /etc/letsencrypt/live/status200.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/status200.example.com/privkey.pem; # The limits Status200's own ingress uses. client_max_body_size 50M; proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $status200_connection_upgrade; location / { proxy_pass http://127.0.0.1:8080; } # MCP clients keep a stream open. location /mcp { proxy_pass http://127.0.0.1:8080; proxy_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } }Пути к сертификатам — это места, куда Certbot кладёт сертификат Let's Encrypt; если ваш сертификат получен иначе, укажите его пути. Проверьте файл и перезагрузите Nginx командой
sudo nginx -t && sudo systemctl reload nginx.Оба отправляют
X-Forwarded-Proto, который сообщает Status200, что посетитель пришёл по HTTPS. Любой другой прокси тоже должен его отправлять, иначе cookie входа страниц статуса и панелей на ваших собственных доменах не удерживаются на HTTPS.Откройте экземпляр через прокси
Откройте
https://status200.example.com. Вы должны увидеть страницу входа Status200, отданную с сертификатом вашего прокси.
За собственным прокси отправляйте телеметрию по OTLP/HTTP (/otlp). OTLP по gRPC доходит до Status200, только когда TLS завершает его собственный ingress (PROVISION_SSL=true).
Адреса посетителей
Status200 учитывает каждого посетителя по адресу, с которого тот подключается: его читают ограничения входа, другие ограничения по адресу и списки разрешённых IP страниц статуса и дашбордов. Двум конфигурациям нужна настройка, чтобы этот адрес был собственным адресом посетителя:
| Конфигурация | Настройка |
|---|---|
Люди обращаются к Status200 по IPv6, например через запись AAAA | IPv6 в сети Status200, в docker-compose.override.yml |
| Перед Status200 стоит ваш собственный обратный прокси | TRUSTED_PROXY_HOPS=2, а ingress опубликован на 127.0.0.1 (см. Ваш собственный обратный прокси) |
Без IPv6 в сети Status200 Docker передаёт ему каждого посетителя, пришедшего по IPv6, с одного своего адреса, и Status200 считает их всех одним посетителем: неудачные попытки входа одного человека могут заблокировать остальных. Для IPv6 нужен Docker Engine 27 или новее (вашу версию показывает docker version).
Включите IPv6
Создайте
docker-compose.override.ymlрядом сdocker-compose.ymlили добавьте это в уже существующий файл;npm startиnpm run updateчитают его:networks: oneuptime: enable_ipv6: trueПерезапустите Status200
npm stop npm startStatus200 останавливается и запускается снова, уже с IPv6 в своей сети. Ваши данные сохраняются. Docker не может удалить сеть, к которой ещё подключён ваш собственный контейнер, например обратный прокси: сначала отключите его от сети Status200, а потом подключите снова. Если
npm startостанавливается сhas active endpoints, отключите его и снова выполнитеnpm stopиnpm start.Проверьте сеть
docker network ls --quiet --filter name=_oneuptime | xargs docker network inspect | grep EnableIPv6Команда выводит
"EnableIPv6": true,.
Когда несколько человек входят с одного адреса частной сети, страница Состояние Status200 в Admin Dashboard сообщает об этом и называет настройку, которая это меняет.
Чек-лист для продакшена
Docker Compose запускает по одной копии каждого сервиса на одном сервере, что подходит небольшим командам и домашним лабораториям. Прежде чем на него полагаться, пройдитесь по этому списку.
| Область | Что сделать |
|---|---|
| Секреты | Ни одно значение в config.env больше не является заглушкой please-change-this-to-random-value. См. Сгенерируйте случайные секреты, а для установки, запущенной с заглушкой в DATABASE_PASSWORD, — Смените пароль базы данных. |
| HTTPS | К Status200 обращаются по HTTPS, и задан HTTP_PROTOCOL=https. См. Настройка HTTPS. |
| Регистрации | Когда у команды появятся учётные записи, выключите Разрешить регистрацию в Настройки > Аутентификация в Admin Dashboard. |
| Межсетевой экран | В интернет открыты только порты 80 и 443 (и SSH). Status200 публикует порт 5400 PostgreSQL только на 127.0.0.1. Любой другой порт, который вы публикуете, закройте межсетевым экраном облачного провайдера: правила ufw не действуют на порты, которые публикует Docker. |
| Адреса посетителей | Страница Состояние Status200 в Admin Dashboard не сообщает, что несколько человек входят с одного адреса. См. Адреса посетителей. |
| Резервные копии | PostgreSQL копируется каждый день, и копии уходят с сервера. См. Резервное копирование и восстановление. |
| Почта | В Admin Dashboard в Настройки > Уведомления > Email настроен почтовый сервер, чтобы Status200 мог отправлять приглашения и уведомления. См. SMTP. |
| Диск | За свободным местом следят. ClickHouse растёт вместе с хранимой телеметрией (см. Подбор размеров и планирование ёмкости); лог каждого контейнера ограничен 1000 МБ. |
| Обновления | Status200 обновляется не реже раза в неделю. Релизы выходят часто. См. Обновление Status200. |
| Высокая доступность | Если она нужна, переходите на Helm-чарт в Kubernetes. |
Смените пароль базы данных
PostgreSQL сохраняет пароль, с которым была создана база, поэтому если сменить только DATABASE_PASSWORD в config.env, Status200 потеряет доступ к своей базе данных. Чтобы дать установке, запущенной с заглушкой, собственный пароль, смените его одновременно в PostgreSQL и в config.env, а затем снова запустите Status200:
NEW_PASSWORD=$(openssl rand -hex 32) &&
(export $(grep -v '^#' config.env | xargs) && docker compose exec -T postgres psql -U "$DATABASE_USERNAME" -d "$DATABASE_NAME" -c "ALTER USER \"$DATABASE_USERNAME\" PASSWORD '$NEW_PASSWORD'") &&
sed -i "s/^DATABASE_PASSWORD=.*/DATABASE_PASSWORD=$NEW_PASSWORD/" config.env
npm startЕсли вы задали DATABASE_BACKUP_PASSWORD и DATABASE_RESTORE_PASSWORD, дайте им тоже новое значение.
Резервное копирование и восстановление
PostgreSQL хранит всё, что вы настраиваете: мониторы, инциденты, страницы статуса, пользователей. npm run backup сохраняет его дамп в файл в папке Backups.
Передайте скрипту резервного копирования пароль базы данных
В
config.envзадайтеDATABASE_BACKUP_PASSWORDравным значениюDATABASE_PASSWORD. Скрипт читаетconfig.envкак обычный текст, поэтому идущий в комплекте${DATABASE_PASSWORD}никогда не подставляется.Запустите резервное копирование
npm run backupСкрипт запрашивает пароль sudo и записывает
Backups/db-<day of the month>.backup, так что ежедневные копии заменяют копии месячной давности. Запускайте его хотя бы раз в день.Скопируйте резервные копии за пределы сервера
Копия на том же диске, что и база данных, не переживёт потерю этого диска.
PostgreSQL доступен только с самого сервера: он отвечает на порту 5400 адреса 127.0.0.1. Чтобы делать резервные копии с другой машины, откройте с неё SSH-туннель, а затем подключитесь к её собственному порту 5400:
ssh -N -L 5400:127.0.0.1:5400 you@status200.example.comОпубликовать PostgreSQL на адресе частной сети
Если инструменту в вашей частной сети нужен доступ к PostgreSQL без туннеля, опубликуйте его также на адресе сервера в этой сети, на отдельном порту. Создайте docker-compose.override.yml рядом с docker-compose.yml; npm start и npm run update читают его:
services:
postgres:
ports:
- "10.0.0.5:5401:5432"Укажите собственный частный адрес сервера вместо 10.0.0.5, никогда не публичный, и сначала задайте PostgreSQL собственный пароль (см. Смените пароль базы данных). Затем выполните npm start, и PostgreSQL будет отвечать и на порту 5401 этого адреса.
ClickHouse хранит телеметрию в томе Docker status200_clickhouse, и никакой скрипт его не копирует. Если эту телеметрию нужно сохранить, сделайте резервную копию тома инструментом для ClickHouse, например clickhouse-backup, или скопируйте том, пока Status200 остановлен.
Чтобы восстановить PostgreSQL, задайте значения DATABASE_RESTORE_* в config.env: DATABASE_RESTORE_PASSWORD — значением DATABASE_PASSWORD, как для резервного копирования, а DATABASE_RESTORE_FILENAME — именем восстанавливаемой копии, например db-31.backup. Затем выполните bash restore.sh. База данных, в которую идёт восстановление, должна уже существовать; в работающей установке она есть.
restore.sh удаляет из целевой базы данных каждый объект из резервной копии перед тем, как создать его заново. Перед началом скрипт спрашивает подтверждение; проверьте имя базы данных, которое он показывает.Обновление Status200
Сначала сделайте резервную копию, затем выполните:
git checkout release
git pull
npm run updatenpm run update запрашивает пароль sudo, добавляет в ваш config.env новые параметры из config.example.env (ваши значения сохраняются), скачивает новые образы и перезапускает Status200. Как и npm start, он завершается строкой Status200 is up!
Переход на новую основную версию (например, с 13 на 14) может потребовать большего: прочитайте Обновление Status200 до новой версии, прежде чем начинать.
APP_TAG=release в config.env всегда скачивает последний релиз Community Edition. Чтобы остаться на одной версии, укажите в APP_TAG её номер, например 14.0.22. Для Enterprise Edition теги — enterprise-release и enterprise-14.0.22.
Удаление Status200
Остановите Status200 и удалите его контейнеры и сеть:
npm run downВаши данные остаются в томах status200_postgres и status200_clickhouse, а папка oneuptime сохраняет config.env и резервные копии. Чтобы удалить и данные:
(export $(grep -v '^#' config.env | xargs) && docker compose down --volumes --remove-orphans)Затем удалите папку oneuptime.
--volumes навсегда удаляет все мониторы, инциденты, пользователей и всю телеметрию. Если что-то из этого может понадобиться, сначала сделайте резервную копию.Устранение неполадок
Docker пишет "permission denied" при запуске npm start
Ваш пользователь не может обратиться к демону Docker. Добавьте его в группу docker, затем выйдите из системы и войдите снова:
sudo usermod -aG docker $USERIngress не запускается, потому что порт 80 или 443 занят
Порт занимает другая программа на сервере, часто веб-сервер. Остановите её или переведите ingress на другие порты и поставьте эту программу перед Status200, как описано в разделе Ваш собственный обратный прокси.
npm start завершается с "Maximum retries reached"
Проверка в конце npm start сдалась раньше, чем Status200 ответил. Первый запуск может длиться дольше, чем ждёт проверка, пока скачиваются образы и создаются базы данных. Посмотрите, что запущено, и прочитайте логи:
npm run ps
npm run logsКогда все контейнеры запущены, повторите проверку командой npm run status-check. Если вы перевели ingress с порта 80, проверьте вместо этого его новый порт: bash Tests/Scripts/status-check.sh localhost:8080.
Часть страниц загружается, но живые обновления или загрузки файлов не работают
Открывайте Status200 по адресу из HOST. Ingress направляет запросы по имени хоста: всё приложение доступно только по HOST и localhost, а любое другое имя, например IP-адрес сервера, считается доменом страницы статуса. Укажите в HOST имя, которым пользуются люди, и выполните npm start.
Регистрация или вход завершается ошибкой "Page not found"
Страница регистрации загружается, но регистрация завершается ошибкой Page not found - /identity/signup, а вход — Page not found - /identity/login. Запрос дошёл до Status200 под именем хоста, отличным от HOST, поэтому ingress направил его как собственный домен страницы статуса, где собственные регистрация и вход Status200 не обслуживаются. Проверьте оба пункта:
HOST— это адрес, который открывают люди, вместе с портом, если он используется, напримерstatus200.example.com:8080. После изменения выполнитеnpm start.- Прокси перед Status200 передаёт имя хоста, которое запросил браузер. Caddy делает это по умолчанию, Nginx — с помощью
proxy_set_header Host $host;, как в разделе Ваш собственный обратный прокси, а Apache — с помощьюProxyPreserveHost On.
Браузер предупреждает о сертификате после того, как вы задали PROVISION_SSL
Пока Let's Encrypt не выпустит сертификат, ingress отдаёт временный самоподписанный. Если предупреждение держится дольше нескольких минут, проверьте, что:
HOST— доменное имя, а не IP-адрес и неlocalhost.- DNS-запись домена указывает на этот сервер.
- Порт 80 доступен из интернета, чтобы Let's Encrypt мог проверить домен.
Когда заказ не удаётся, приложение пишет в лог ошибку, которая начинается с CoreSSL:EnsurePrimaryHostCertificate, а за ней следует причина:
(export $(grep -v '^#' config.env | xargs) && docker compose logs app) | grep -A 5 CoreSSLВстроенный зонд показывает Отключено после смены порта ingress
Admin Dashboard показывает зонд в Настройки > Мониторинг > Глобальные зонды. Он обращается к Status200 по GLOBAL_PROBE_1_STATUS200_URL, где по умолчанию указан http://localhost (порт 80). Укажите там новый порт ingress, например http://localhost:8080, так же задайте ONEUPTIME_RUNNER_STATUS200_URL и перезапустите Status200.