Add safe monthly maintenance installer

This commit is contained in:
andrey271192
2026-07-31 12:14:48 +03:00
commit 8890a4110c
8 changed files with 904 additions and 0 deletions

82
docs/SAFETY.md Normal file
View File

@@ -0,0 +1,82 @@
# Модель безопасности
Цель проекта — выполнять повторяемое обслуживание Ubuntu/Debian с минимальным
риском. «Безопасно» не означает «невозможно сломать»: любое системное обновление
может содержать ошибку пакета, несовместимость приложения или service restart.
## Принципы
### Без удаления пакетов
Основное обновление использует `apt-get upgrade --no-remove`.
`dist-upgrade` и `full-upgrade` не используются.
`autoremove` выключен. Причина: пакет, нужный локальному приложению, иногда
ошибочно остается помеченным как автоматически установленный.
### Без автоматического reboot
Новое ядро устанавливается, но активируется только после решения администратора.
Это предотвращает незапланированный разрыв VPN, базы данных, SSH или другого
сервиса.
### Без опасной очистки файлов
Очистка временных данных делегируется `systemd-tmpfiles`, `logrotate`,
`journalctl` и APT. Проект не содержит рекурсивного удаления широких каталогов.
### Без очистки Docker по умолчанию
Stopped containers, tagged images, volumes и networks могут содержать нужное
состояние. Поэтому Docker cleanup выключен. Опция удаляет только dangling images.
### Сохранение конфигов
`Dpkg::Options::=--force-confold` сохраняет установленную локальную конфигурацию.
Новая версия файла пакета обычно остается рядом как `.dpkg-dist`; ее нужно
сравнить вручную.
### Проверки до изменения
APT upgrade не запускается при:
- поврежденном/незавершенном состоянии `dpkg`;
- критически малом свободном месте;
- ошибке `apt-get update`.
### Один процесс
`flock` предотвращает параллельные maintenance-запуски. APT-lock ожидается до
10 минут, что уменьшает конфликт с `apt-daily`.
## Рекомендуемая эксплуатация
1. Создайте snapshot VM перед первым запуском.
2. Проверьте installer и checksum.
3. Запустите на тестовой VM.
4. Проверьте journal, failed units и приложение.
5. Только потом развертывайте на остальные серверы.
6. Перезагружайте сервер в согласованное maintenance window.
## Что проверить после запуска
```bash
systemctl --failed
dpkg --audit
apt list --upgradable
journalctl -u safe-monthly-maintenance.service -n 200
test -e /var/run/reboot-required && echo "reboot required"
```
Для VPN, reverse proxy, базы данных и других сервисов добавьте собственные
health checks после системного обслуживания.
## Rollback
Проект сохраняет список пакетов, но не создает полноценный rollback.
Для надежного возврата нужны:
- snapshot гипервизора/VPS-провайдера;
- резервная копия `/etc` и данных приложений;
- отдельно проверенная процедура восстановления.