## Мониторинг системы ### Проверка статуса сервисов ```bash # Статус всех контейнеров docker-compose ps # Подробная информация о ресурсах docker stats second_mind_gitea second_mind_webhook second_mind_nginx second_mind_db # Проверка дискового пространства df -h du -sh /DOCKER/second-mind/ ``` ### Мониторинг логов ```bash # Все логи системы docker-compose logs -f # Логи конкретного сервиса docker-compose logs -f quartz-webhook docker-compose logs -f gitea docker-compose logs -f nginx # Последние 100 строк с отметками времени docker-compose logs --tail=100 -t quartz-webhook ``` ### Health checks ```bash # Проверка webhook сервиса curl https://webhook.aepif.ru/health # Проверка Gitea curl -I https://git.aepif.ru # Проверка статического сайта curl -I https://notes.aepif.ru # Проверка SSH доступа к Git ssh -p 2222 git@git.aepif.ru ``` ## Обслуживание ### Регулярные задачи #### Очистка логов Docker ```bash # Очистка логов всех контейнеров docker system prune -f # Очистка конкретного контейнера docker logs second_mind_webhook 2>/dev/null | tail -1000 > temp.log docker cp temp.log second_mind_webhook:/tmp/ docker exec second_mind_webhook truncate -s 0 /proc/1/fd/1 rm temp.log ``` #### Очистка старых образов ```bash # Удаление неиспользуемых образов docker image prune -f # Удаление всех неиспользуемых ресурсов docker system prune -a -f ``` ### Перезапуск сервисов ```bash # Перезапуск всей системы (с сохранением данных) docker-compose restart # Перезапуск конкретного сервиса docker-compose restart quartz-webhook # Полная пересборка webhook сервиса docker-compose build quartz-webhook docker-compose up -d quartz-webhook # Graceful restart с ожиданием docker-compose stop docker-compose up -d ``` ## Обновления ### Обновление Quartz ```bash # Вход в контейнер webhook docker exec -it second_mind_webhook bash # Обновление Quartz репозитория cd /quartz git pull origin main npm install # Выход из контейнера exit # Перезапуск для применения изменений docker-compose restart quartz-webhook ``` ### Обновление образов Docker ```bash # Скачивание новых версий docker-compose pull # Пересоздание контейнеров с новыми образами docker-compose up -d # Принудительное пересоздание всех сервисов docker-compose up -d --force-recreate ``` ### Обновление системы ```bash # Обновление пакетов хост-системы apt update && apt upgrade -y # Обновление Docker и Docker Compose до последних версий curl -fsSL https://get.docker.com | sh pip3 install --upgrade docker-compose ``` ## Диагностика проблем ### Проблемы с webhook'ами #### Проверка получения webhook'ов ```bash # Просмотр логов webhook сервиса в реальном времени docker-compose logs -f quartz-webhook # Проверка последних webhook'ов в Gitea # Repository → Settings → Webhooks → Recent Deliveries ``` #### Ручной запуск сборки ```bash # Вход в контейнер webhook docker exec -it second_mind_webhook bash # Ручной запуск процесса сборки cd /webhook node -e " const { execSync } = require('child_process'); const fs = require('fs'); function buildSite() { try { console.log('Manual build started...'); execSync('cd /obsidian && git pull origin main || git pull origin master', { stdio: 'inherit' }); execSync('cd /quartz && npm run quartz build -- -d /obsidian', { stdio: 'inherit' }); execSync('rm -rf /public/*', { stdio: 'inherit' }); execSync('cp -r /quartz/public/* /public/', { stdio: 'inherit' }); console.log('Manual build completed!'); } catch (error) { console.error('Build error:', error.message); } } buildSite(); " ``` ### Проблемы с Git #### Проверка SSH подключения ```bash # Тест SSH соединения ssh -p 2222 -v git@git.aepif.ru # Проверка SSH ключей в контейнере docker exec -it second_mind_webhook ls -la /root/.ssh/ docker exec -it second_mind_webhook cat /root/.ssh/config ``` #### Сброс SSH ключей ```bash # Пересоздание SSH ключей rm ~/.ssh/id_ed25519* ssh-keygen -t ed25519 -C "webhook-new" -f ~/.ssh/id_ed25519 # Добавление нового ключа в Gitea cat ~/.ssh/id_ed25519.pub # Копировать в Gitea → Settings → SSH Keys # Перезапуск webhook контейнера docker-compose restart quartz-webhook ``` ### Проблемы с базой данных #### Проверка подключения к PostgreSQL ```bash # Вход в контейнер базы данных docker exec -it second_mind_db psql -U gitea -d gitea # Проверка размера базы \l+ # Проверка активных подключений SELECT * FROM pg_stat_activity; # Выход \q ``` #### Очистка базы данных (ОСТОРОЖНО!) ```bash # Полная очистка и пересоздание базы docker-compose stop gitea docker exec -it second_mind_db psql -U gitea -c "DROP DATABASE gitea;" docker exec -it second_mind_db psql -U gitea -c "CREATE DATABASE gitea;" docker-compose start gitea ``` ### Проблемы с Nginx #### Проверка конфигурации ```bash # Тест конфигурации Nginx docker exec -it second_mind_nginx nginx -t # Перезагрузка конфигурации без перезапуска docker exec -it second_mind_nginx nginx -s reload # Проверка файлов статического сайта docker exec -it second_mind_nginx ls -la /usr/share/nginx/html/ ``` ## Безопасность ### Регулярная смена паролей ```bash # Изменение паролей в .env файле nano .env # Применение новых переменных docker-compose up -d --force-recreate ``` ### Мониторинг доступа ```bash # Просмотр логов Nginx для анализа трафика docker-compose logs nginx | grep -E "GET|POST" # Анализ логов Gitea для подозрительной активности docker-compose logs gitea | grep -i "login\|failed" # Проверка активных SSH сессий docker exec -it second_mind_gitea who ``` ### Обновления безопасности ```bash # Регулярное обновление образов для получения security patches docker-compose pull docker-compose up -d # Проверка уязвимостей в образах docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ -v $PWD/cache:/tmp/cache --name trivy aquasec/trivy \ image second-mind_quartz-webhook ``` ## Backup и восстановление ### Создание резервных копий ```bash # Backup базы данных docker exec second_mind_db pg_dump -U gitea gitea > backup_db_$(date +%Y%m%d).sql # Backup Git репозиториев (Gitea data) docker run --rm -v second-mind_gitea_data:/data -v $(pwd):/backup alpine \ tar czf /backup/gitea_data_$(date +%Y%m%d).tar.gz -C /data . # Backup конфигурационных файлов tar czf config_backup_$(date +%Y%m%d).tar.gz \ docker-compose.yml Dockerfile nginx.conf .env webhook-server/ # Backup SSH ключей cp -r ~/.ssh ssh_backup_$(date +%Y%m%d) ``` ### Восстановление из резервных копий ```bash # Остановка сервисов docker-compose down # Восстановление базы данных docker-compose up -d db sleep 10 docker exec -i second_mind_db psql -U gitea gitea < backup_db_YYYYMMDD.sql # Восстановление Gitea data docker run --rm -v second-mind_gitea_data:/data -v $(pwd):/backup alpine \ tar xzf /backup/gitea_data_YYYYMMDD.tar.gz -C /data # Запуск всех сервисов docker-compose up -d ``` ## Автоматизация ### Cron задачи для автоматического обслуживания ```bash # Добавление в crontab crontab -e # Ежедневный backup в 2:00 0 2 * * * cd /DOCKER/second-mind && docker exec second_mind_db pg_dump -U gitea gitea > backup_db_$(date +\%Y\%m\%d).sql # Еженедельная очистка старых логов в воскресенье в 3:00 0 3 * * 0 docker system prune -f # Ежемесячное обновление образов в первое воскресенье месяца в 4:00 0 4 1-7 * 0 cd /DOCKER/second-mind && docker-compose pull && docker-compose up -d ``` ### Скрипт мониторинга ```bash #!/bin/bash # monitoring.sh - проверка состояния Second Mind echo "=== Second Mind System Status ===" echo "Date: $(date)" echo # Проверка контейнеров echo "Container Status:" docker-compose ps echo echo "Resource Usage:" docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" \ second_mind_gitea second_mind_webhook second_mind_nginx second_mind_db echo echo "Disk Usage:" df -h /DOCKER/second-mind echo echo "Webhook Health:" curl -s https://webhook.aepif.ru/health || echo "Webhook unreachable" echo echo "Recent Errors:" docker-compose logs --tail=20 | grep -i error || echo "No recent errors" ``` ### Настройка алертов ```bash # Простой скрипт алертов через email (требует настройки sendmail/postfix) #!/bin/bash # alerts.sh WEBHOOK_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://webhook.aepif.ru/health) NOTES_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://notes.aepif.ru) if [ "$WEBHOOK_STATUS" != "200" ]; then echo "ALERT: Webhook service is down!" | mail -s "Second Mind Alert" admin@aepif.ru fi if [ "$NOTES_STATUS" != "200" ]; then echo "ALERT: Notes website is down!" | mail -s "Second Mind Alert" admin@aepif.ru fi ``` ## Performance оптимизация ### Настройка ресурсов контейнеров ```yaml # В docker-compose.yml добавить лимиты ресурсов services: gitea: # ... другие настройки deploy: resources: limits: memory: 512M cpus: '0.5' reservations: memory: 256M cpus: '0.25' quartz-webhook: # ... другие настройки deploy: resources: limits: memory: 1G cpus: '1.0' reservations: memory: 512M cpus: '0.5' ``` ### Оптимизация Nginx ```nginx # Добавление в nginx.conf для улучшения производительности http { # ... существующие настройки # Увеличение буферов client_body_buffer_size 128k; client_max_body_size 10m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; output_buffers 1 32k; postpone_output 1460; # Кэширование файлов open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; } ``` Система администрирования настроена! Для дальнейшего изучения см. [[Second Mind - Обзор системы]]