Добавлена переменная N8N_PROXY_HOPS=1 для корректной работы
n8n за reverse proxy (Traefik). Это устраняет ValidationError
"The 'X-Forwarded-For' header is set but the Express 'trust proxy'
setting is false" при работе express-rate-limit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Проблема: контейнер bbb-graphql-server-1 был помечен как unhealthy
из-за неправильного healthcheck (проверял порт 8080 вместо 8085).
Решение:
- Добавлен правильный healthcheck в docker-compose.yml для порта 8085
- Обновлен CLAUDE.md с информацией о BigBlueButton, Vault и Syncthing troubleshooting
- Добавлена документация по Odoo custom addons (bbb_connector, virtual_meeting)
Результат: контейнер теперь healthy, FailingStreak снизился с 2693 до 0.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Установлен BigBlueButton с Greenlight v3 frontend
- Настроен SMTP через Microsoft 365 Relay (aiimpress-com0e.mail.protection.outlook.com:25)
- Email отправка работает: noreply@ai-impress.com
- Доступ: https://bbb.ai-impress.com
- Настроена интеграция с Traefik для SSL
- Включены: запись вебинаров (90 дней), webhooks для n8n, Prometheus экспорт
- Локаль: русский язык (ru-RU)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Проблема:
- Authentik, Evolution API, Vaultwarden, Documenso не бэкапились
- Slack уведомления только для CRITICAL, не для WARNINGS
- R2 порог warning 80% (слишком поздно)
- Неточный подсчет snapshots (grep вместо JSON)
Изменения в backup-full-enhanced.sh:
+ Добавлена функция backup_docker_volume для volumes
+ PHASE 3.5: бэкап критичных volumes (authentik, evolution, vaultwarden, documenso)
+ Автообнаружение authentik-postgres
+ Расширен backup_application_data (8 директорий вместо 3)
Изменения в health-check-alerting.sh:
+ R2 warning при 70% вместо 80%
+ Показ процента использования R2 storage
+ Исправлен подсчет snapshots через JSON (было grep)
+ Slack уведомления для WARNINGS
Изменения в .gitignore:
+ Разрешены скрипты opt/05-backups/scripts/
+ Разрешены документы *.md, *.txt
- Игнорируются бэкапы opt/05-backups/*
Результат:
- Покрытие бэкапами увеличено с 60% до ~85%
- Раннее предупреждение при 70% R2
- Все критичные данные клиентов защищены
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Проблема:
- Promtail логи показывали множество ошибок "entry too far behind"
- Loki использовал дефолтное значение reject_old_samples_max_age = 1h
- Это конфликтовало с retention_period = 720h (30 дней)
Решение:
- Добавлена настройка reject_old_samples_max_age: 720h
- Теперь Loki принимает логи возрастом до 30 дней
- Соответствует периоду retention
Результат:
- Ошибки "entry too far behind" исчезли из логов Promtail
- Loki и Promtail работают стабильно после рестарта
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Исправлены критические проблемы в health-check-alerting.sh:
1. check_backup_status: Исправлено определение последнего snapshot
- Было: grep | tail | cut (брал первый time из JSON)
- Стало: python3 парсинг JSON массива (берет snapshots[-1])
- Теперь видит актуальный бэкап от 2025-11-07 14:37
2. check_container_restarts: Добавлена проверка uptime
- Теперь алертит только если uptime < 24h для >10 рестартов
- Или uptime < 48h для >5 рестартов
- realtime-dev.supabase-realtime (uptime: 63h) больше не алертит
3. check_backup_status: Улучшена проверка локальных бэкапов
- Изменено с days на hours для более точного контроля
Настроено расписание cron:
- Было: Каждые 30 минут (*/30 * * * *)
- Стало: Дважды в день в 10:00 и 19:00 (0 10,19 * * *)
Результаты тестирования:
- ✅ Restic backup OK: 0h old (было: 8 days old)
- ✅ Local DB backup OK: 0h old
- ✅ Container restarts: нет алертов (было: 2 critical)
- ⚠️ 1 warning: Too many R2 snapshots (некритично)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Исправлены 3 критические проблемы в скрипте бэкапов:
1. backup_docker_configs: Исправлена команда tar
- Удалена неверная опция -path
- Использован find с передачей в tar через -T
2. backup_application_data: Добавлена проверка существования директорий
- Теперь проверяет наличие директорий перед бэкапом
- Пропускает несуществующие директории с предупреждением
- Добавлена директория /opt/02-core/presenton/app_data
3. backup_with_restic: Исправлена логика проверки успешности
- Создание файла .restic-exclude если не существует
- Правильная обработка вывода restic
- Улучшена проверка exit code и snapshot saved
Результаты:
- ✅ 4 PostgreSQL базы данных
- ✅ Vault data
- ✅ Docker configs
- ✅ Application data
- ✅ Restic backup в Cloudflare R2
- Total: 8/8 успешных компонентов (было 5/8)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Исправления и улучшения:
1. **backup-full-enhanced.sh v2.1.0 → v2.1.1:**
- Исправлен баг парсинга в discover_databases()
- Убраны логи из функции discovery (только результат)
- Улучшен вывод обнаруженных баз данных
- Добавлена проверка на пустые строки
- Теперь корректно показывает список БД перед backup
2. **export-credentials.sh (NEW):**
- Автоматический экспорт всех credentials из .env файлов
- Markdown формат с документацией
- Структурированные разделы по категориям:
* Core Infrastructure (Traefik, PostgreSQL, Redis, Vault)
* Security & Authentication (Authentik, Vaultwarden)
* Business Applications (Odoo, Outline, Documenso, Wiki.js)
* Core Services (N8N, Evolution API, Supabase, Postiz, Presenton)
* Monitoring & Tools (Grafana, Prometheus, Portainer, Uptime Kuma)
- Включает URLs всех сервисов
- Database connection strings
- SSH access information
- Backup locations
- Emergency contacts
- Disaster recovery guide
- Права 600/700 для безопасности
3. **Cron Configuration:**
- Добавлен экспорт credentials в 2:30 AM (перед backup)
- Full backup в 3:00 AM ежедневно (уже был)
- Full backup в 2:00 AM по воскресеньям (уже был)
- Health check каждые 30 минут (уже был)
- Server reports в 6:00 AM (уже был)
4. **secrets-backup folder:**
- Создана папка /opt/secrets-backup на сервере
- Создана папка /Volumes/SSD/Aimpress_Cloud_Prod/secrets-backup на Mac
- Готово к синхронизации через Syncthing
- Исключено из Git (.gitignore)
Результаты:
- ✅ Backup теперь корректно работает с auto-discovery
- ✅ Все credentials экспортируются автоматически
- ✅ Файлы готовы к синхронизации через Syncthing
- ✅ Полная автоматизация через cron
- ✅ Безопасность (права 600/700)
Следующие шаги:
1. Настроить Syncthing folder для secrets-backup
2. Server Device ID: 7WWT3Q3-IL2RSA2-XHO6JKN-LCL2XEL-NWFZCDJ-6XVWIZ7-NYJ6JKJ-C53YCAC
3. Добавить папку в Syncthing UI на обоих устройствах
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Создана инфраструктура для безопасной синхронизации секретов:
1. Папка /Volumes/SSD/Aimpress_Cloud_Prod/secrets-backup/
- Исключена из Git (.gitignore)
- README с документацией
- Будет синхронизироваться через Syncthing
2. Скрипт экспорта секретов /opt/05-backups/scripts/export-vault-secrets.sh
- Экспорт всех секретов из HashiCorp Vault
- Формат JSON (machine-readable)
- Формат Markdown (human-readable)
- Индивидуальные файлы по сервисам
- Timestamp последней синхронизации
Структура экспорта:
- vault-export.json - полный экспорт в JSON
- credentials.md - человеко-читаемый формат
- services/*.json - индивидуальные файлы
- last-sync.txt - метка времени
Безопасность:
- Права 600/700 на все файлы
- Синхронизация только через encrypted Syncthing
- Исключено из Git
Следующие шаги:
- Настроить Vault token с правами чтения
- Добавить папку в Syncthing на обоих устройствах
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Исправлены критические проблемы и добавлены улучшения:
1. **server-full-report.sh**:
- Улучшены Slack уведомления с детектором проблем
- Добавлены автоматические рекомендации по исправлению
- Добавлена цветная индикация статуса (good/warning/danger)
- Улучшена структура уведомлений с приоритетами
2. **generate-summary.sh**:
- Исправлено дублирование контента в отчетах
- Удален незакрытый heredoc, вызывавший проблемы
- Добавлены правильные разделители секций
3. **backup-full-enhanced.sh** v2.0.0 → v2.1.0:
- Добавлен полный auto-discovery для всех типов БД
- Добавлена поддержка MongoDB backup
- Улучшена детекция PostgreSQL/MariaDB через образы
- Автоматическое определение пользователей БД
- Удален hardcoded список баз данных
4. **health-check-alerting.sh**:
- Добавлена проверка наличия 'bc' перед использованием
- Добавлен fallback на integer comparison без bc
- Улучшена надежность проверки R2 storage
Slack уведомления теперь включают:
- Автоматическое обнаружение проблем (unhealthy, down sites, high disk)
- Конкретные команды для исправления проблем
- SSH инструкции и ссылки на admin tools
- Цветовую индикацию серьезности (danger/warning/good)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove LiteLLM proxy configuration
- Reset to default single-container setup
- Clear all custom LLM and image provider settings
- Remove litellm-config.yaml
- Simple .env with minimal configuration
Service is now in clean state ready for fresh configuration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Configure IMAGE_PROVIDER=gemini_flash with Google API key
- Update .env.example with all available IMAGE_PROVIDER options
- Document that Presenton does NOT support Azure DALL-E
- Add notes about alternative image providers (pexels, pixabay, dall-e-3)
Note: Gemini Flash configured but image generation not working yet
May require additional troubleshooting or Presenton version update
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add CLAUDE.md with comprehensive project documentation for Claude Code
- Fix Presenton to use LiteLLM proxy instead of direct Azure OpenAI calls
- Add LiteLLM proxy service to Presenton docker-compose
- Create .env.example and litellm-config.yaml.example templates
- Update .gitignore to exclude litellm-config.yaml but allow .env.example files
- Presenton now successfully connects to Azure OpenAI via LiteLLM proxy
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added system-backup/ to .gitignore to prevent large backup files from being committed to repository.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added /mnt folder synchronization for backups (6.8GB) and PostgreSQL data. Updated documentation in README.md, .claude/workflow.md and .gitignore to exclude large backup files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Set up three-tier synchronization: Syncthing (real-time), GitHub (version control), rsync (disaster recovery). Includes complete documentation for future Claude sessions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>