Сервіси без агента
Не все живе на вашому сервері. У кабінеті, у розділі Сервіси → Підключення, можна дати Pult ключ до хостингу, бази, App Store Connect, Cloudflare чи GitHub Actions. Pult читає їхній стан вашим ключем і показує його поруч із серверами: на Огляді, у застосунку, у Telegram і на сторінці стану проєкту.
- Хостинг і хмари: Railway · Vercel · Netlify · Render · Fly.io · Heroku · DigitalOcean · Hetzner Cloud
- Бази даних: Supabase · Neon
- Застосунки й домени: App Store Connect · Cloudflare
- Збірки: GitHub Actions
- Без ключа: пошта домену — MX, SMTP, SPF, DMARC і строк реєстрації · від кого залежить ваш продукт — сторінки стану понад 40 постачальників
Ключі
Ключ перевіряємо одразу, коли ви його додаєте: якщо сервіс його не прийняв або ключу бракує прав, Pult скаже, чого саме, і нічого не збереже. Збережений ключ зашифрований (AES-256-GCM), і показати його знову не зможе ніхто, навіть ми. Pult лише читає: надсилає тільки запити на читання, нічого не змінює й нічого не запускає. Якщо ключ потім відкличуть, прийде тривога «більше не приймає ключ».
Де сервіс уміє видавати ключі «лише читання» (Fly.io, Heroku, DigitalOcean, Hetzner Cloud, Cloudflare, GitHub), нижче написано, як такий зробити. Railway, Vercel, Netlify, Render, Supabase і Neon таких ключів не мають: їхній ключ дає повний доступ, а обмежує себе Pult сам. Якщо це для вас неприйнятно, лишіться на перевірках ззовні.
Як часто: з інтервалом вашого плану (Free — раз на 3 хв, Indie — щохвилини), але не частіше ніж щохвилини; Heroku — раз на 2 хв, App Store Connect — раз на 5 хв. Нова викатка, що ще збирається, не змінює стану: стара ще працює. Висить понад 30 хв — перебої. Дані, старші за три інтервали, показуються сірими, а не зеленими.
Проєкт хостингу, застосунок чи домен стає в проєкт Pult з такою самою назвою (Railway «plio» і домен plio.app — у проєкт «Plio»), інакше — у новий, названий так само. Змінити це можна в Сервісах, полем «Проєкт у Pult» біля кожного.
Хостинг і хмари
Railway
Ключ: railway.com → Account Settings → Tokens — токен акаунта чи команди, бачить усі проєкти; або Project Settings → Tokens — один проєкт і одне середовище.
Права: Railway не видає токенів «лише читання»; Pult лише читає.
Що видно: для кожного сервісу в кожному середовищі — остання викатка: викочено, збирається, викатка впала, упав. Невдала викатка чи сервіс, що впав, — тривога. Окремим рядком — сторінка стану самого Railway. Тимчасові середовища для pull request не показуються. Підключити →
Vercel
Ключ: vercel.com → Account Settings → Tokens → Create, Scope — акаунт або команда з проєктами. Для команди ще Team ID: Team Settings → General → Team ID.
Права: Vercel не видає токенів «лише читання»; Pult лише читає.
Що видно: остання production-викатка кожного проєкту (до 50): викочено, впала (тривога) чи збирається; скасована — сірим. Окремим рядком — сторінка стану Vercel. Підключити →
Netlify
Ключ: app.netlify.com → User settings → Applications → Personal access tokens → New access token.
Права: токени Netlify не мають обмежень прав; Pult лише читає.
Що видно: остання production-викатка кожного сайту (до 50): опубліковано, впала (тривога) чи збирається. Окремим рядком — сторінка стану Netlify. Підключити →
Render
Ключ: dashboard.render.com → Account Settings → API Keys → Create API Key.
Права: ключ Render бачить усі робочі простори власника й не має обмежень прав; Pult лише читає.
Що видно: кожен сервіс (до 50, без preview), згрупований за проєктами Render: остання викатка — працює, впала збірка, оновлення чи команда перед викаткою (тривога). Сервіс, який зупинив сам Render (оплата, постійні падіння), — тривога; призупинений вами — сірим. Окремим рядком — сторінка стану Render. Підключити →
Fly.io
Ключ: у терміналі fly tokens create readonly -o <організація>; вставте весь рядок разом з «FlyV1». Організація — slug з fly orgs list, порожньо — personal.
Права: readonly — токен лише на читання.
Що видно: кожен застосунок організації (до 50) і його машини: працюють, сплять, зупинені чи впали, і їхні перевірки здоровʼя. Машина впала — тривога; усі машини зупинені без автозапуску чи перевірка здоровʼя не проходить — перебої; машини, які Fly сам приспав без запитів, — це нормально. Окремим рядком — сторінка стану Fly.io. Підключити →
Heroku
Ключ: у терміналі heroku authorizations:create --scope read --description Pult, рядок Token. Ключ з Account Settings → API Key теж підійде, але він дає повний доступ.
Права: --scope read — лише читання.
Що видно: кожен застосунок (до 30): процеси працюють, сплять чи впали, останній реліз і режим обслуговування. Процес упав чи реліз не вдався — тривога, режим обслуговування — перебої, eco-процеси, що сплять, — це нормально. Читаємо раз на 2 хв: Heroku рахує запити. Окремим рядком — стан платформи Heroku. Підключити →
DigitalOcean
Ключ: cloud.digitalocean.com → Account → API → Tokens → Generate New Token.
Права: Scopes — Read Only (або власні: droplet:read, app:read, database:read).
Що видно: дроплети (працює; вимкнений — тривога), застосунки App Platform (остання викатка: працює, впала — тривога, збирається) і керовані бази (у мережі чи ні). Окремим рядком — status.digitalocean.com. Підключити →
Hetzner Cloud
Ключ: Hetzner Cloud Console → ваш проєкт → Security → API Tokens → Generate API Token. Один токен — один проєкт.
Права: Read.
Що видно: кожен сервер проєкту: працює, вимкнений чи зупиняється (тривога), запускається. Рядка стану самого Hetzner немає: status.hetzner.com не має стану, який може прочитати машина, і ми не вгадуємо. Підключити →
Бази даних
Supabase
Ключ: supabase.com/dashboard/account/tokens → Generate new token.
Права: Supabase не видає токенів «лише читання»; Pult лише читає.
Що видно: кожен проєкт (до 30): працює, призупинений (перебої: не відповідає, доки його не відновлять) чи запускається, і чи відповідають база, REST, Auth, Storage, Realtime. Не відповідає база чи REST — тривога, інша служба — перебої. Окремим рядком — status.supabase.com. Підключити →
Neon
Ключ: console.neon.tech → Account settings → API keys → Create new API key (або Organization settings → API keys для ключа організації).
Права: ключів «лише читання» Neon не має; Pult лише читає.
Що видно: обчислення кожної гілки (до 30 проєктів): працює чи спить — обидва нормально, бо Neon присипляє обчислення без запитів і будить першим запитом; вимкнене — тривога; остання операція впала — перебої. Окремим рядком — neonstatus.com. Підключити →
Застосунки й домени
App Store Connect
Ключ: App Store Connect → Users and Access → Integrations → App Store Connect API → Team Keys → «+». Потрібні три речі: Key ID, Issuer ID (над списком ключів) і вміст файлу .p8, який можна завантажити лише один раз.
Права: роль Developer.
Що видно: для кожного застосунку — остання версія на кожній платформі (на перевірці, схвалено, у продажу, відмова) і остання збірка. Відмова Apple чи відхилена збірка — тривога; решта кроків (подано, на перевірці, схвалено) — події в стрічці без сповіщення. Читаємо раз на 5 хв: стани в App Store змінюються годинами. Підключити →
Cloudflare
Ключ: dash.cloudflare.com → My Profile → API Tokens → Create Token → Create Custom Token, на потрібні домени. Поле «Домен» можна лишити порожнім, тоді Pult стежитиме за всіма зонами, які бачить токен.
Права: Zone → Zone → Read і Zone → Analytics → Read — лише читання.
Що видно: для кожного домену — стан зони (працює, ще не перейшов на Cloudflare, пішов з нього) і частка помилок 5xx на краю Cloudflare за останні 15 хв: від 5% — перебої, від 25% — не працює (якщо запитів за цей час більше 50). Окремим рядком — сторінка стану самого Cloudflare. Підключити →
Пересилання пошти, якщо дати токену ще й Zone → Email Routing Rules → Read (і Account → Email Routing Addresses → Read, щоб бачити адреси): для кожного домену з Email Routing — чи ввімкнено пересилання, скільки правил і що з рештою листів, чи підтверджено адреси, куди вони йдуть. Cloudflare каже «misconfigured» (записи MX змінено) — тривога; непідтверджена адреса чи жодного правила — перебої. Без цих прав рядка просто немає, помилки не буде.
Збірки
GitHub Actions
Ключ: github.com → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token; Repository access — потрібні репозиторії. Поле «Репозиторії» можна лишити порожнім: тоді Pult візьме до 30 репозиторіїв, у які пушили найнещодавніше.
Права: Repository permissions → Actions: Read-only (Metadata: Read-only додасться сама). Класичний токен з правом repo теж спрацює, але він може й записувати.
Що видно: останній запуск кожного workflow на основній гілці: пройшов, впав (тривога) чи збирається. Окремим рядком — компонент Actions на githubstatus.com. Список репозиторіїв перечитуємо раз на годину, а незмінені запуски GitHub не рахує в ліміт запитів; коли в токена лишається менше 500 запитів на годину, Pult чекає. Підключити →
Пошта домену
Ключ не потрібен. У Сервісах чи на кроці «Перевірки ззовні» впишіть домен (той, що після @), і Pult раз на 5 хв дивитиметься на його пошту так, як її бачить чужий поштовий сервер. Жодного листа не надсилаємо. На план це одна перевірка ззовні. Додати →
- MX — у домену є поштові сервери, і в кожного є адреса. Немає MX — тривога «пошта не приймається». Постачальника Pult називає сам: Cloudflare Email Routing, Proton, Google Workspace, Microsoft 365, Zoho, Fastmail…
- SMTP — найкращий з них відповідає на порту 25 привітанням 220 (Pult дочекається привітання й попрощається, нічого не надсилаючи). Не відповідає жоден — тривога; відповідає лише запасний — перебої. Якщо з боку Pult порт 25 закритий (так буває в хмарах), рядок скаже «не перевірено», а не «не працює».
- SPF і DMARC — один запис SPF, що закінчується на
~allчи-all, і політика DMARC. Немає SPF чи DMARC, або DMARC лише спостерігає (p=none) — порада, а не збій: жовтий рядок у Сервісах, без сповіщень і без жовтого проєкту.+all(слати від імені домену може будь-хто) — тривога. - DKIM — якщо постачальник має відомий селектор (Proton, Google, Microsoft 365, Fastmail), Pult перевірить, що ключ на місці.
- Реєстрація домену — строк з реєстру (RDAP): за 30 днів — жовтий рядок у стрічці, за 7 днів і після — тривога. Деякі національні домени строку не публікують — тоді так і буде написано.
- Збій перевіряємо ще раз через інший DNS (1.1.1.1, потім 8.8.8.8), перш ніж сказати: один загублений DNS-запит — не тривога.
- На публічній сторінці стану проєкту — один рядок «Пошта»: приймає вона чи ні (MX і SMTP). SPF, DMARC, строк домену й назви серверів — лише ваші.
Від кого залежить ваш продукт
Ключ не потрібен. У Сервісах позначте сервіси, на яких тримається продукт: GitHub, Supabase, OpenAI, SendGrid та ще понад 40 — хостинг і хмари, бази, платежі, пошта, ШІ, розробка й інструменти команди. Pult читає їхні публічні сторінки стану раз на 3 хв і скаже, коли аварія в них, а не у вас: «Supabase: перебої з 14:05». На план усі постачальники разом — одне підключення. Обрати →
- Аварія чи великі перебої в постачальника — тривога, як і збій на вашому сервері, а потім повідомлення, що вони минули.
- Дрібні перебої й планові роботи — лише рядок у стрічці, без сповіщень.
- У великих постачальників можна обрати частину сервісу: регіон AWS чи Google Cloud, окремі служби. Поки частину не обрано, AWS, Google Cloud і Apple Developer показуються щонайбільше як «дрібні перебої»: аварія в одному з десятків регіонів чи служб зазвичай вас не стосується, а щоденна тривога привчила б її не читати.
- Сторінка, яка не відповідає понад 10 хв, — сірий рядок «невідомо», ніколи не зелений на старих даних.
- На публічних сторінках стану вашого продукту постачальників не видно: якщо їхня аварія справді зачепила продукт, це покажуть перевірки самого продукту.