Commit graph

21 commits

Author SHA1 Message Date
SamoilenkoVadym
610a45dc60 fix: настроен trust proxy для n8n за Traefik
Добавлена переменная 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>
2025-11-20 18:33:27 +00:00
SamoilenkoVadym
51969ba447 feat: обеспечена 100% восстановимость инфраструктуры из бэкапов
КРИТИЧНЫЕ ИЗМЕНЕНИЯ:
- Исправлены имена Docker volumes для корректного бэкапа
- Добавлены ВСЕ критичные volumes: n8n, Odoo, Authentik-postgres, Outline, WikiJS
- Добавлены Grafana dashboards в бэкап application data
- Добавлена автоочистка локальных бэкапов (7 дней)
- Изменен retention R2: с 1 дня на 3 дня (безопасность)
- Исправлен путь к Supabase storage

УЛУЧШЕНИЯ:
- backup-full-enhanced.sh v2.2.0
- Добавлена функция cleanup_old_local_backups()
- Создан детальный RESTORE-GUIDE.md с пошаговыми инструкциями
- 100% покрытие для disaster recovery

БЭКАПИРУЕМЫЕ КОМПОНЕНТЫ:
Databases:
  - PostgreSQL (postgres-main + authentik-postgres)
  - MariaDB (mautic-db)
  - MongoDB (если есть)

Volumes (9 критичных):
  - authentik_authentik-postgres-data (SSO БД)
  - authentik_authentik-redis-data (sessions)
  - evolution-api_evolution-data (WhatsApp)
  - n8n-shared_n8n-data (workflows, credentials)
  - odoo_odoo-data + odoo_odoo-addons (ERP)
  - vaultwarden_vaultwarden-data (passwords)
  - outline_outline-data + wikijs_data (wiki)

Application Data:
  - Vault secrets
  - Docker Compose configs + .env
  - Grafana dashboards
  - Supabase storage
  - Documenso documents
  - Evolution instances
  - Mautic data

Cloud Backup:
  - R2 (HOT): последние 3 дня
  - Google Drive (COLD): 7д + 4н + 3м

РЕЗУЛЬТАТ:
Теперь возможно полное восстановление всей инфраструктуры
на новом сервере с 0 за 4-6 часов.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 19:22:22 +00:00
SamoilenkoVadym
ae7caa2615 fix: исправлен healthcheck для BigBlueButton GraphQL сервера
Проблема: контейнер 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>
2025-11-09 19:43:03 +00:00
SamoilenkoVadym
256cdc2a04 feat: добавлен BigBlueButton для проведения workshops
- Установлен 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>
2025-11-08 21:13:40 +00:00
SamoilenkoVadym
d1ebf0e042 feat: улучшена система бэкапов для критичных данных клиентов
Проблема:
- 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>
2025-11-07 15:35:52 +00:00
SamoilenkoVadym
cc95b76117 fix: Loki reject_old_samples_max_age настройка для устранения ошибок Promtail
Проблема:
- 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>
2025-11-07 14:52:02 +00:00
SamoilenkoVadym
12b95e25f9 fix: исправлен health-check-alerting.sh и настроены ежедневные отчеты
Исправлены критические проблемы в 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>
2025-11-07 14:45:54 +00:00
SamoilenkoVadym
f7c225f8f5 fix: исправлен скрипт бэкапов backup-full-enhanced.sh
Исправлены 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>
2025-11-07 14:38:12 +00:00
SamoilenkoVadym
eb0f8f272b feat: автоматизация backup и экспорт всех credentials
Исправления и улучшения:

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>
2025-11-06 11:41:55 +00:00
SamoilenkoVadym
a00f937bc9 feat: добавлена папка для синхронизации секретов с Mac
Создана инфраструктура для безопасной синхронизации секретов:

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>
2025-11-06 11:25:49 +00:00
SamoilenkoVadym
955ad0a589 fix: исправлен расчет использования Cloudflare R2 storage
Проблема:
- health-check-alerting.sh использовал --mode restore-size
- Показывал 23.33GB вместо реальных 6.51GB
- False positive alert о превышении лимита R2 (10GB)

Решение:
- Изменен режим на --mode raw-data для получения фактического размера
- raw-data показывает реальное использование R2 с учетом дедупликации
- Добавлены пояснительные логи "(raw storage with deduplication)"

Проверка:
- Cloudflare UI: 7.05GB 
- restic stats raw-data: 6.514 GiB 
- restore-size: 23.330 GiB (размер при восстановлении всех снапшотов)

Теперь скрипт корректно показывает:
 R2 storage OK: 6.51GB / 10GB (raw storage with deduplication)
📦 R2 snapshots: 3 (policy: keep 3 daily + 1 weekly)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 11:06:52 +00:00
SamoilenkoVadym
c5401eb33c fix: улучшения скриптов мониторинга и backup
Исправлены критические проблемы и добавлены улучшения:

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>
2025-11-06 10:47:20 +00:00
SamoilenkoVadym
a1d606d4fb chore: reset Presenton to clean installation
- 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>
2025-11-06 10:13:20 +00:00
SamoilenkoVadym
25eaf2218b docs: update Presenton config with Google Gemini Flash for images
- 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>
2025-11-06 10:01:57 +00:00
SamoilenkoVadym
0f40ef007f feat: fix Presenton Azure OpenAI integration and add project documentation
- 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>
2025-11-06 09:19:27 +00:00
SamoilenkoVadym
117de92709 feat: add Presenton AI presentation generator with Azure OpenAI integration
Deployed Presenton (AI-powered presentation generator) to production infrastructure.

Features:
- AI-generated presentations from text prompts and documents
- Azure OpenAI GPT-5 for text generation
- Azure OpenAI DALL-E 3 for image generation
- Export to PPTX and PDF formats
- Custom template support with HTML/Tailwind CSS
- Privacy-focused (local data processing)

Infrastructure:
- Container: ghcr.io/presenton/presenton:latest
- Domain: presentation.ai-impress.com
- SSL: Automatic via Traefik + Cloudflare DNS
- Network: traefik-public
- Resources: 1-2 CPU cores, 1-2GB RAM

Configuration:
- LLM: Azure OpenAI Custom endpoint (GPT-5)
- Images: Azure DALL-E 3
- API keys managed via .env (not committed)
- UI key management enabled (CAN_CHANGE_KEYS=true)

Services started:
- Nginx (port 80) - reverse proxy
- Next.js (port 3000) - frontend
- FastAPI (port 8000) - backend API
- MCP Server (port 8001) - Model Context Protocol

Location: /opt/02-core/presenton/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 23:03:18 +00:00
SamoilenkoVadym
b052b91f9b chore: exclude system-backup folder from Git
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>
2025-11-05 16:59:27 +00:00
SamoilenkoVadym
972003dba2 feat: add /mnt folder to Syncthing sync
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>
2025-11-05 16:52:52 +00:00
SamoilenkoVadym
28bc0e2fa1 chore: merge with remote, keep detailed README
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 16:47:56 +00:00
SamoilenkoVadym
a987d45fbc chore: initial infrastructure setup with Syncthing, Git and documentation
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>
2025-11-05 16:41:12 +00:00
9a775362bc
Initial commit 2025-11-05 09:09:42 +00:00