Домени та TLS
Ваш сайт доступний одразу після розгортання — за автоматичним іменем і з сертифікатом, — а ще ви можете підключати власні домени. Перш ніж просити в CA сертифікат, платформа перевіряє, що ім'я справді веде до неї.
Два типи доменів#
| авто | власний | |
|---|---|---|
| Ім'я | <slug>.<alias>.<base_domain> |
будь-яке, яке ви додасте, наприклад www.mysite.org |
| Створюється | разом із проєктом | через Додати власний домен |
| Можна видалити | ні (видаляється разом із проєктом) | Видалити |
| Кнопка перевірки | немає (запускається сама) | Повторити перевірку |
Ім'я належить рівно одному проєкту
Ім'я хоста можна прикріпити лише до одного проєкту в усій платформі. Імена зберігаються в нижньому регістрі без зайвих пробілів, тож Shop.Example.com і shop.example.com — це те саме ім'я. Спроба додати ім'я, яке вже має будь-який проєкт (ваш чи чужий), завершується відмовою з кодом 409.
Додавання власного домену#
- Спрямуйте DNS на платформу.
Створіть для імені запис
A, що вказує на публічну адресу вхідного шлюзу (ingress) платформи (її підкаже адміністратор). - Додайте домен.
На вкладці Домени проєкту введіть ім'я в поле custom.example.com і натисніть Додати власний домен — або викличте
add_domain/POST /projects/{id}/domains. - Стежте за перевіркою. Вона запускається негайно. Коли з'явиться пройдено, маршрут записано й запитано сертифікат.
- За потреби виправте й повторіть. Після зміни DNS натисніть Повторити перевірку.
Перевірка#
Перш ніж запитувати будь-який сертифікат, платформа доводить, що ім'я веде назад до неї самої. Тому помилковий DNS-запис або «двійник» перед платформою ніколи не призведе до вичерпання ліміту ACME.
- DNS. Ім'я має резолвитися. Якщо адміністратор задав публічну адресу платформи (
lb_public_ip), запис має їй дорівнювати; якщо ні, достатньо, щоб ім'я резолвилося. - Маршрутизація. Платформа надсилає запит
http://<domain>/.well-known/platform/precheckреальним шляхом — вихід із хоста, ваша публічна адреса, вхідний шлюз (ingress), Traefik. Відповідь має містити власнийplatform_idплатформи.
Лише після цього з'являється файл маршруту й вмикається TLS.
Стани#
| Перевірка | Що це означає | Що робити |
|---|---|---|
| очікує | додано, ще не перевірено | зачекайте кілька секунд |
| пройдено | DNS і маршрутизація в порядку | нічого |
| помилка DNS | ім'я не резолвиться або веде не на адресу платформи | виправте запис A, дочекайтеся поширення DNS і повторіть перевірку |
| помилка маршрутизації | DNS у порядку, але маркер не повернувся | перевірте, що вхідний шлюз (ingress) пересилає порти 80 і 443 на платформу |
| Сертифікат | Що це означає |
|---|---|
| немає | маршруту ще немає (перевірку не пройдено) |
| очікує | триває виклик (challenge) від CA |
| видано | HTTPS працює |
| помилка | видача не вдалася; сторожовий процес повторює спробу й показує причину |
Сторожовий процес (watchdog) запускається кожні п'ять хвилин: він перевіряє файл маршруту й маршрутизатор, стежить, щоб сертифікати були на місці й не втрачали чинності протягом 14 днів, і повторно запускає невдалі перевірки. Саме поновлення — завдання Traefik, воно відбувається автоматично.
Сертифікати: dev або production#
Платформа працює в одному з двох режимів TLS, який обирає адміністратор:
- dev — локальний центр сертифікації підписує окремий кінцевий сертифікат для кожного домену. Браузери попереджатимуть, доки ви не імпортуєте CA (
data/platform/traefik/certs/dev/ca.crt); DNS імітується, перевірка маршрутизації — справжня. Режим призначений для тестування без публічного DNS і лімітів CA. - prod — сертифікати від CA з ACME (типово Let's Encrypt; можна обрати ZeroSSL, Google Public CA або власний сервер) через виклик HTTP-01. Для цього порт 80 має бути доступний платформі, а контактна пошта — справжньою. Wildcard-сертифікати не видаються.
Як адміністратор обирає CA, див. розділ Адміністрування.
HTTP і HTTPS#
Щойно домен отримає сертифікат, звичайні HTTP-запити перенаправляються на HTTPS. Ваш застосунок від платформи бачить лише звичайний HTTP — див. Запуск застосунку.
Налагодження невдалої перевірки
dns_failed → перевірте dig +short your.domain ззовні. routing_failed → звідти ж curl -i http://your.domain/.well-known/platform/precheck має повернути 200 і тіло JSON із platform_id.
