Update architecture and backup documentation to include Healthchecks integration
Add Healthchecks service details to architecture and backup documentation, including its role as a Dead man's switch for backups. Update backup scripts to utilize systemd timers instead of cron for improved scheduling. Enhance network topology documentation to reflect Healthchecks integration in the VPS Miran setup. This update clarifies backup processes and enhances overall system reliability.
This commit is contained in:
112
docs/vps/healthchecks-miran-setup.md
Normal file
112
docs/vps/healthchecks-miran-setup.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Healthchecks на VPS Миран
|
||||
|
||||
Self-hosted [Healthchecks.io](https://healthchecks.io/) на VPS 185.147.80.190 — Dead man's switch для homelab. Если Proxmox не отправляет ping после окна бэкапов, Healthchecks шлёт алерт в Telegram.
|
||||
|
||||
---
|
||||
|
||||
## Доступ
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| **URL** | https://healthchecks.katykhin.ru/healthchecks/ |
|
||||
| **Логин** | admin@katykhin.ru |
|
||||
| **Пароль** | в Vaultwarden (Healthchecks admin) |
|
||||
|
||||
Доступ настроен по домену. Telegram webhook требует валидный SSL — без домена с Let's Encrypt бот не отвечает на `/start`.
|
||||
|
||||
---
|
||||
|
||||
## Развёртывание (для переустановки)
|
||||
|
||||
### 1. Подготовка
|
||||
|
||||
```bash
|
||||
ssh -p 15722 deploy@185.147.80.190
|
||||
mkdir -p /home/prod/healthchecks
|
||||
cd /home/prod/healthchecks
|
||||
```
|
||||
|
||||
Скопировать из репозитория: `scripts/healthchecks-docker/docker-compose.yml`, `scripts/healthchecks-docker/.env.example` → `.env`
|
||||
|
||||
### 2. Конфигурация .env
|
||||
|
||||
```env
|
||||
SITE_ROOT=https://healthchecks.katykhin.ru/healthchecks
|
||||
SECRET_KEY=<openssl rand -hex 32>
|
||||
ALLOWED_HOSTS=healthchecks.katykhin.ru,185.147.80.190,localhost
|
||||
|
||||
DB_HOST=db
|
||||
DB_NAME=hc
|
||||
DB_USER=postgres
|
||||
DB_PASSWORD=<надёжный пароль>
|
||||
|
||||
TELEGRAM_TOKEN=<токен из Vaultwarden: HOME_BOT_TOKEN>
|
||||
TELEGRAM_BOT_NAME=<username бота из @BotFather, напр. Katykhinhomebot>
|
||||
|
||||
REGISTRATION_OPEN=False
|
||||
DEFAULT_FROM_EMAIL=healthchecks@katykhin.ru
|
||||
```
|
||||
|
||||
### 3. Запуск
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
docker-compose run web /opt/healthchecks/manage.py createsuperuser --email admin@katykhin.ru --password <password>
|
||||
docker-compose run web python /opt/healthchecks/manage.py settelegramwebhook
|
||||
```
|
||||
|
||||
### 4. Nginx
|
||||
|
||||
Отдельный server block для `healthchecks.katykhin.ru` с Let's Encrypt. Референс: `scripts/healthchecks-nginx-server.conf`. Proxy на 127.0.0.1:8000; нужны location для `/healthchecks/`, `/static/`, `/projects/`, `/accounts/`, `/integrations/`, `/ping/` и др. (Django редиректы без префикса).
|
||||
|
||||
### 5. DNS
|
||||
|
||||
A-запись: `healthchecks.katykhin.ru` → `185.147.80.190`. Сертификат: `certbot --nginx -d healthchecks.katykhin.ru`.
|
||||
|
||||
---
|
||||
|
||||
## Привязка Telegram к check
|
||||
|
||||
1. Войти в Healthchecks → **Integrations** → **Add Integration** → **Telegram**
|
||||
2. Писать **своему** боту (из TELEGRAM_TOKEN), не @HealthchecksBot
|
||||
3. В Telegram: `/start` боту → перейти по ссылке → **Connect** в веб-интерфейсе
|
||||
|
||||
Check **homelab-backups** (UUID: 9451b52b-89f5-4a6c-b922-247a775bbf45).
|
||||
|
||||
---
|
||||
|
||||
## Ping с Proxmox
|
||||
|
||||
Скрипт `/root/scripts/healthcheck-ping.sh`, таймер `backup-healthcheck-ping.timer` — 04:35 ежедневно.
|
||||
|
||||
Конфиг `/root/.healthchecks.env`:
|
||||
|
||||
```env
|
||||
HEALTHCHECKS_URL=https://healthchecks.katykhin.ru/healthchecks
|
||||
HEALTHCHECKS_HOMELAB_UUID=<uuid из Healthchecks>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Смена пароля без SMTP
|
||||
|
||||
Healthchecks требует SMTP для смены пароля через веб. Без SMTP — через Django:
|
||||
|
||||
```bash
|
||||
cd /home/prod/healthchecks
|
||||
docker-compose run web python /opt/healthchecks/manage.py shell -c "
|
||||
from django.contrib.auth import get_user_model
|
||||
User = get_user_model()
|
||||
u = User.objects.get(email='admin@katykhin.ru')
|
||||
u.set_password('NEW_PASSWORD')
|
||||
u.save()
|
||||
print('OK')
|
||||
"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- [vps-miran-bots](vps-miran-bots.md) — VPS Миран, порты
|
||||
- [backup-howto](../backup/backup-howto.md) — бэкапы, расписание
|
||||
Reference in New Issue
Block a user