Files
second-mind-aep/⚙️ Техническое/🖥️ Серверы/Second Mind Setup/Администрирование.md
Andrey Epifancev e96fec3709 Реорганизация структуры заметок v2.0
- Создана новая организационная структура с эмодзи-папками
- Добавлена система Inbox для быстрого захвата идей
- Созданы шаблоны для всех типов заметок с YAML метаданными
- Перенесен весь контент из старой структуры в новую
- Добавлен главный дашборд с динамическими запросами
- Создано подробное руководство по использованию системы
- Техническая документация реорганизована по типам

Основные улучшения:
 Inbox-first подход для новых заметок
 Тематическая организация по 8 областям знаний
 Шаблоны с метаданными для структурированности
 Система связей между заметками
 Динамические дашборды с аналитикой
 Централизованная техническая документация без дублирования
2025-08-09 22:11:50 +04:00

12 KiB
Raw Blame History

Мониторинг системы

Проверка статуса сервисов

# Статус всех контейнеров
docker-compose ps

# Подробная информация о ресурсах
docker stats second_mind_gitea second_mind_webhook second_mind_nginx second_mind_db

# Проверка дискового пространства
df -h
du -sh /DOCKER/second-mind/

Мониторинг логов

# Все логи системы
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

# Проверка 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

# Очистка логов всех контейнеров
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

Очистка старых образов

# Удаление неиспользуемых образов
docker image prune -f

# Удаление всех неиспользуемых ресурсов
docker system prune -a -f

Перезапуск сервисов

# Перезапуск всей системы (с сохранением данных)
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

# Вход в контейнер webhook
docker exec -it second_mind_webhook bash

# Обновление Quartz репозитория
cd /quartz
git pull origin main
npm install

# Выход из контейнера
exit

# Перезапуск для применения изменений
docker-compose restart quartz-webhook

Обновление образов Docker

# Скачивание новых версий
docker-compose pull

# Пересоздание контейнеров с новыми образами
docker-compose up -d

# Принудительное пересоздание всех сервисов
docker-compose up -d --force-recreate

Обновление системы

# Обновление пакетов хост-системы
apt update && apt upgrade -y

# Обновление Docker и Docker Compose до последних версий
curl -fsSL https://get.docker.com | sh
pip3 install --upgrade docker-compose

Диагностика проблем

Проблемы с webhook'ами

Проверка получения webhook'ов

# Просмотр логов webhook сервиса в реальном времени
docker-compose logs -f quartz-webhook

# Проверка последних webhook'ов в Gitea
# Repository → Settings → Webhooks → Recent Deliveries

Ручной запуск сборки

# Вход в контейнер 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 подключения

# Тест 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 ключей

# Пересоздание 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

# Вход в контейнер базы данных
docker exec -it second_mind_db psql -U gitea -d gitea

# Проверка размера базы
\l+

# Проверка активных подключений
SELECT * FROM pg_stat_activity;

# Выход
\q

Очистка базы данных (ОСТОРОЖНО!)

# Полная очистка и пересоздание базы
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

Проверка конфигурации

# Тест конфигурации 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/

Безопасность

Регулярная смена паролей

# Изменение паролей в .env файле
nano .env

# Применение новых переменных
docker-compose up -d --force-recreate

Мониторинг доступа

# Просмотр логов 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

Обновления безопасности

# Регулярное обновление образов для получения 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 и восстановление

Создание резервных копий

# 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)

Восстановление из резервных копий

# Остановка сервисов
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 задачи для автоматического обслуживания

# Добавление в 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

Скрипт мониторинга

#!/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"

Настройка алертов

# Простой скрипт алертов через 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 оптимизация

Настройка ресурсов контейнеров

# В 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.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 Setup/Обзор системы