vault backup: 2025-08-04 12:34:05
This commit is contained in:
450
Second Mind Setup/Администрирование.md
Normal file
450
Second Mind Setup/Администрирование.md
Normal 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;
|
||||
}
|
||||
```
|
||||
|
||||
Система администрирования настроена! Для дальнейшего изучения см. [[Обзор системы]]
|
||||
Reference in New Issue
Block a user