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) — бэкапы, расписание
|
||||
@@ -81,6 +81,9 @@ VPS в ЦОД Миран (Санкт-Петербург). Развёрнуты
|
||||
| 9100 | node-exporter | TCP |
|
||||
| 3000 | Grafana | TCP |
|
||||
| 3001 | Uptime Kuma | TCP |
|
||||
| 8000 | Healthchecks (внутр.) | TCP |
|
||||
|
||||
**Healthchecks** — self-hosted Dead man's switch для homelab. Развёртывание: [healthchecks-miran-setup.md](healthchecks-miran-setup.md). Доступ через nginx (healthchecks.katykhin.ru).
|
||||
|
||||
---
|
||||
|
||||
@@ -110,7 +113,7 @@ docker compose logs -f telegram-bot
|
||||
|
||||
## Бэкап VPS (telegram-helper-bot)
|
||||
|
||||
Бэкап выполняется **с хоста Proxmox** скриптом `backup-vps-miran.sh` (cron 01:00). Копируются:
|
||||
Бэкап выполняется **с хоста Proxmox** скриптом `backup-vps-miran.sh` (systemd timer 01:00). Копируются:
|
||||
|
||||
1. **БД:** `/home/prod/bots/telegram-helper-bot/database/tg-bot-database.db` → `/mnt/backup/vps/miran/db/` (с датой в имени, хранение 14 дней).
|
||||
2. **Голосовые сообщения:** `/home/prod/bots/telegram-helper-bot/voice_users/` → `/mnt/backup/vps/miran/voice_users/` (rsync).
|
||||
|
||||
Reference in New Issue
Block a user