vault backup: 2025-08-04 12:33:00

This commit is contained in:
Andrey Epifancev
2025-08-04 12:33:00 +04:00
parent 991cc33979
commit 1e36b682eb
4 changed files with 953 additions and 0 deletions

View File

@@ -0,0 +1,450 @@
## Мониторинг системы
### Проверка статуса сервисов
```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 - Обзор системы]]