> ## Documentation Index
> Fetch the complete documentation index at: https://docs.axottle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Установка страницы подписок

> Мастер из четырёх вопросов: название, домен, сервер и проверка DNS. Плюс обновление, удаление и типовые ошибки.

Пока страница не поставлена, раздел **Страница подписок** показывает мастер и ничего больше. Мастер задаёт по одному вопросу за раз и переживает уход из раздела: вернувшись позже, вы продолжите с того же шага, а не начнёте заново.

<Info>Для кого: администратор панели. Требуемые права: `subscription_page.deploy`. Лицензия: ключ `core.subscription_page`.</Info>

## Что понадобится

* Отдельный сервер под страницу: **чистый** Linux и доступ по SSH.
* Поддомен, например `sub.вашдомен.ru`, и возможность завести для него A-запись.
* Открытые наружу 80 и 443 на этом сервере: сертификат выпускается по HTTP-01. Исключение — установка за уже стоящим прокси, там TLS завершает он.
* Подключение к Remnawave с заданным адресом API и токеном: страница берёт подписки оттуда, и без этого мастер поставить не даст.

<Warning>
  Сервер должен быть отдельным и чистым. Страница подписок — публичный сайт, который открывает каждый клиент: рядом с панелью или нодой она становится дорогой к вашей инфраструктуре, а на занятой машине упирается в чужие 80 и 443. Почему так — [Почему отдельный сервер](/ru/subscription-page/overview#почему-отдельный-сервер) и [Чистый сервер](/ru/getting-started/requirements#чистый-сервер).
</Warning>

## Шаги мастера

<Steps>
  <Step title="Название">
    Видно только вам в панели — клиенту его не показывают. Название можно поменять, вернувшись назад по шагам мастера.
  </Step>

  <Step title="Адрес">
    Домен без `https://`, обычно поддомен вида `sub.вашдомен.ru`. По этому адресу клиент откроет страницу и заберёт конфиг.

    Под «Дополнительно» — напоминание про TLS: по умолчанию сертификат выпускает себе сама страница через Let's Encrypt. Если перед ней уже стоит ваш Caddy или nginx, за сертификат отвечает он.
  </Step>

  <Step title="Куда поставить">
    Два способа, и от выбора зависит, что мастер спросит дальше.

    **Панель поставит сама по SSH.** Вы вводите адрес сервера, порт, пользователя и один секрет: приватный ключ или пароль. Реквизиты нужны на одну установку и нигде не сохраняются. Домен должен указывать на тот же сервер.

    **Поставлю сам, рядом с существующим прокси.** Панель выдаёт одну команду, вы выполняете её на сервере от root; доступа к серверу панель при этом не получает. Страница садится на `127.0.0.1` и за сертификат не отвечает — TLS завершает ваш прокси, поэтому шаг проверки DNS пропускается. Здесь же спрашивается **порт страницы** (по умолчанию `3010`) — менять его стоит, только если порт уже занят. Вместе с командой панель отдаёт готовый кусок конфигурации для Caddy и для nginx.
  </Step>

  <Step title="Предупреждение о совмещении">
    Появляется, только если выбранный сервер — это сервер панели или узнанная нода. Мастер сверяет и хост подключения, и адрес, на который смотрит домен: за NAT они разные, и совпасть с известным сервером может любой из них.

    Экран объясняет, чем придётся расплатиться, и на несколько секунд оставляет кнопку подтверждения недоступной. Запрета здесь нет — есть требование прочитать.
  </Step>

  <Step title="Проверка домена">
    Мастер ждёт, пока домен начнёт резолвиться в адрес сервера, и перепроверяет это каждые 15 секунд. Шаг нельзя пропустить: сертификат выпускается по HTTP-01, а неудачные попытки выпуска списываются из лимита Let's Encrypt на домен.

    Опрашивается несколько резолверов, и ответ каждого виден отдельно: «панель не видит, а 1.1.1.1 видит» — это диагноз, а «домен не резолвится» при заведённой записи — загадка. Молчание резолвера и ответ «такого имени нет» тоже различаются.

    Если интеграция с Cloudflare подключена и нужная зона в ней есть, панель предложит завести A-запись за вас. Токен для этого нужен с правом `Zone.DNS:Edit`.
  </Step>

  <Step title="Установка">
    Идёт несколько минут: качается образ, поднимаются контейнеры, выпускается сертификат. Стадии видно по ходу дела.
  </Step>
</Steps>

## Что происходит во время установки

| Стадия                      | Что делается                                                                              |
| --------------------------- | ----------------------------------------------------------------------------------------- |
| Проверяем готовность        | Сверяются домен, адрес сервера и остальные предварительные условия                        |
| Подключаемся к серверу      | Проверяется доступ по SSH, читаются ОС и архитектура                                      |
| Готовим одноразовый ключ    | Выпускается ключ установки на 15 минут                                                    |
| Ставим страницу подписок    | Работает установщик: Docker, образ, конфигурация, сертификат                              |
| Ждём, пока страница ответит | Панель ходит на публичный адрес и проверяет, что он отзывается                            |
| Сверяемся с Remnawave       | Читаются настройки подписки и проверяется, что клиент получит страницу, а не сырой конфиг |

При установке своими руками панель показывает команду и ждёт: закончив, установщик сам отчитается панели по тому же одноразовому ключу.

Если установка сорвалась, панель показывает последнюю осмысленную строку установщика, а не код возврата. Полный вывод раскрывается кнопкой под сообщением.

## «Пока поставить нельзя»

Мастер собирает всё, чего не хватает, в один список и не даёт запустить установку, пока он не пуст. Что там бывает:

| Сообщение                                          | Что сделать                                                                         |
| -------------------------------------------------- | ----------------------------------------------------------------------------------- |
| Не задан домен или адрес сервера                   | Вернуться на шаг адреса и заполнить                                                 |
| Домен ещё не указывает на сервер                   | Дождаться распространения A-записи на шаге проверки                                 |
| Нет ни одного подключения к Remnawave              | Подключить панель Remnawave — [Подключение Remnawave](/ru/remnawave/connections)    |
| Подключений к Remnawave несколько                  | Выбрать, чьи подписки показывает эта страница                                       |
| У подключения не задан адрес API или токен         | Дописать их в подключении: без токена страница не запустится                        |
| На этом сервере уже стоит страница статуса Axottle | Взять другой сервер: её рантайм сам держит 80 и 443 и чужие сайты отдавать не умеет |

Кнопка на экране — подсказка, а не разрешение: тот же список проверяется ещё раз перед выдачей ключа установки и перед самой установкой.

## Проверка

<Check>
  Плитка **Страница** показывает «Отвечает», у плитки **Сертификат** есть срок, кнопка **Открыть страницу** ведёт на рабочий сайт, а карточка **Связь с Remnawave** не содержит предупреждений. Открытая по ссылке подписки страница показывает клиенту кнопки и QR, а не текст конфига.
</Check>

Сразу после установки нормально увидеть «сертификат ещё не выпущен»: обычно это занимает пару минут после того, как домен доедет. Кнопка **Проверить** перечитывает состояние, не дожидаясь очередной пятиминутной пробы.

## После установки

* **Проверить** — панель ходит на публичный адрес и обновляет плитки, включая срок сертификата.
* **Открыть страницу** — публичный адрес в новой вкладке.
* **Обновить страницу** — свежий образ и перезапуск; домен и сертификат не трогаются. Реквизиты доступа к серверу панель не хранит, поэтому она выдаёт готовую команду, которую вы выполняете на сервере страницы сами.
* **История операций** — что панель делала со страницей и чем это кончилось.

Отдельный шаг после установки — домен страницы в самой Remnawave. Пока он не выставлен, клиенты продолжают получать ссылки на старый адрес: страница при этом работает, но по ней никто не приходит. См. [Связь с Remnawave](/ru/subscription-page/remnawave#ручной-шаг-домен-страницы-в-remnawave).

## Откат

* Незаконченный мастер сбрасывается кнопкой **Снести черновик** — она стирает черновик установки и возвращает к первому вопросу.
* Развёрнутая страница убирается кнопкой **Убрать из панели**. Панель перестаёт за ней следить; сама страница продолжает работать, и выданные клиентам ссылки остаются рабочими. Сервер панель снести не может — если он больше не нужен, погасите его руками.

<Warning>
  Удаление записи в панели не отзывает ссылки у клиентов. Если страница должна перестать отвечать, гасить нужно её сервер, а не запись в разделе.
</Warning>

## Типовые ошибки

<AccordionGroup>
  <Accordion title="«Домен ведёт на другой адрес», хотя запись создана">
    Записи нужно время, чтобы разойтись. Проверьте, что A-запись указывает на IP сервера страницы, а не панели. Если запись живёт в Cloudflare, включите для неё серое облако: за оранжевым (проксирование) запрос ACME до вашего сервера не дойдёт и сертификат не выпустится.
  </Accordion>

  <Accordion title="Установка обрывается на стадии подключения">
    Панель не смогла зайти по SSH. Проверьте порт, пользователя и то, что ключ подходит именно к этому серверу. Пароль от учётной записи с запретом на парольный вход даёт тот же отказ.
  </Accordion>

  <Accordion title="Установщик говорит, что порты заняты">
    80 и 443 держит что-то своё. Либо освободите их, либо ставьте страницу за этим прокси — способом «поставлю сам, рядом с существующим прокси», с готовым куском конфигурации от панели.
  </Accordion>

  <Accordion title="Команда установки истекла">
    Ключ в ней живёт 15 минут. Вернитесь на шаг «Поставлю сам» и получите команду заново.
  </Accordion>

  <Accordion title="Страница отвечает, но сертификат не выпустился">
    Проверка Let's Encrypt идёт по порту 80 — чаще всего он закрыт снаружи. Второй частый случай — исчерпанный лимит неудачных попыток на домен: тогда придётся подождать.
  </Accordion>

  <Accordion title="Клиенты по-прежнему приходят на старый адрес">
    В Remnawave не выставлен домен страницы. Панель туда не ходит: это переменная окружения её процесса. Точное значение и порядок действий — [Связь с Remnawave](/ru/subscription-page/remnawave#ручной-шаг-домен-страницы-в-remnawave).
  </Accordion>

  <Accordion title="Клиент открывает ссылку и видит сырой конфиг или JSON">
    Дело в настройках подписки Remnawave, а не в странице. Что именно проверить и что панель может включить сама — [Связь с Remnawave](/ru/subscription-page/remnawave).
  </Accordion>
</AccordionGroup>

Связанные страницы: [Страница подписок: обзор](/ru/subscription-page/overview), [Связь с Remnawave](/ru/subscription-page/remnawave), [DNS и Cloudflare AutoDNS](/ru/cdn/dns), [Чистый сервер](/ru/getting-started/requirements#чистый-сервер).
