Files
second-mind-aep/Мой сервер/Second Mind Setup/Администрирование.md
2025-08-04 12:44:51 +04:00

450 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Мониторинг системы
### Проверка статуса сервисов
```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;
}
```
Система администрирования настроена! Для дальнейшего изучения см. [[Обзор системы]]