diff --git a/Мой сервер/Second Mind Setup/Конфигурации.md b/Мой сервер/Second Mind Setup/Конфигурации.md index a72fbf7..b45cd4f 100644 --- a/Мой сервер/Second Mind Setup/Конфигурации.md +++ b/Мой сервер/Second Mind Setup/Конфигурации.md @@ -298,4 +298,4 @@ ssh-keyscan -p 2222 git.aepif.ru >> ~/.ssh/known_hosts - Environment переменных контейнеров - Примонтированных SSH ключах -Следующий документ: [[Развертывание]] \ No newline at end of file +Следующий документ: [[Мой сервер/Second Mind Setup/Развертывание]] \ No newline at end of file diff --git a/Мой сервер/Second Mind Setup/Обзор системы.md b/Мой сервер/Second Mind Setup/Обзор системы.md index 5b2c496..f749de3 100644 --- a/Мой сервер/Second Mind Setup/Обзор системы.md +++ b/Мой сервер/Second Mind Setup/Обзор системы.md @@ -94,5 +94,5 @@ graph TB Для развертывания системы изучите: - [[Мой сервер/Second Mind Setup/Конфигурации]] - настройки всех сервисов -- [[Развертывание]] - пошаговая инструкция установки -- [[Администрирование]] - обслуживание и мониторинг \ No newline at end of file +- [[Мой сервер/Second Mind Setup/Развертывание]] - пошаговая инструкция установки +- [[Мой сервер/Second Mind Setup/Администрирование]] - обслуживание и мониторинг \ No newline at end of file diff --git a/Мой сервер/Second Mind Setup/Развертывание.md b/Мой сервер/Second Mind Setup/Развертывание.md index 4eb181b..9443c6a 100644 --- a/Мой сервер/Second Mind Setup/Развертывание.md +++ b/Мой сервер/Second Mind Setup/Развертывание.md @@ -339,4 +339,4 @@ docker exec -it second_mind_nginx ls -la /usr/share/nginx/html/ - ✅ Полнотекстовый поиск и граф связей - ✅ SSL сертификаты для всех доменов -Следующий документ: [[Администрирование]] \ No newline at end of file +Следующий документ: [[Мой сервер/Second Mind Setup/Администрирование]] \ No newline at end of file diff --git a/Мой сервер/Инфраструктура/Администрирование.md b/Мой сервер/Инфраструктура/Администрирование.md new file mode 100644 index 0000000..1fb3a60 --- /dev/null +++ b/Мой сервер/Инфраструктура/Администрирование.md @@ -0,0 +1,508 @@ +# Инфраструктура - Администрирование + +## Мониторинг системы + +### Проверка статуса всех сервисов + +```bash +# Статус инфраструктурных сервисов +cd /DOCKER/reverse-proxy && docker-compose ps +cd /DOCKER/auth && docker-compose ps + +# Общий статус системы +docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + +# Использование ресурсов +docker stats --no-stream traefik authelia auth_redis +``` + +### Мониторинг Traefik + +#### Dashboard и метрики + +```bash +# Проверка Traefik dashboard +curl -I https://traefik.aepif.ru/dashboard/ + +# Просмотр конфигурации маршрутов +curl https://traefik.aepif.ru/api/http/routers | jq + +# Проверка SSL сертификатов +curl https://traefik.aepif.ru/api/http/routers | jq '.[] | select(.tls) | {name, rule, tls}' + +# Статистика сервисов +curl https://traefik.aepif.ru/api/http/services | jq +``` + +#### Логи Traefik + +```bash +# Просмотр логов в реальном времени +cd /DOCKER/reverse-proxy +docker-compose logs -f traefik + +# Поиск ошибок SSL +docker-compose logs traefik | grep -i "acme\|ssl\|tls" + +# Анализ трафика +docker-compose logs traefik | grep -E "GET|POST" | tail -20 +``` + +### Мониторинг Authelia + +#### Проверка аутентификации + +```bash +# Health check Authelia +curl https://auth.aepif.ru/api/health + +# Проверка конфигурации +cd /DOCKER/auth +docker exec authelia authelia validate-config /config/configuration.yml + +# Статистика пользователей +docker exec authelia sqlite3 /config/db.sqlite3 "SELECT * FROM user_preferences;" +``` + +#### Анализ логов аутентификации + +```bash +# Логи Authelia +cd /DOCKER/auth +docker-compose logs -f authelia + +# Поиск неуспешных попыток входа +docker-compose logs authelia | grep -i "authentication\|failed\|banned" + +# Статистика входов по пользователям +docker-compose logs authelia | grep "Successful" | cut -d' ' -f8 | sort | uniq -c +``` + +### Мониторинг Redis + +```bash +# Статус Redis +cd /DOCKER/auth +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" info + +# Количество активных сессий +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" info keyspace + +# Список ключей сессий +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "authelia*" + +# Время жизни сессий +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*" | head -5 | xargs -I {} docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" ttl {} +``` + +## Обслуживание SSL сертификатов + +### Проверка статуса сертификатов + +```bash +# Просмотр всех сертификатов +cd /DOCKER/reverse-proxy +docker exec traefik cat /data/acme.json | jq '.letsencrypt.Certificates[] | {domains: .domain.main, expires: .certificate}' 2>/dev/null || echo "Нет сертификатов" + +# Проверка срока действия сертификата +echo | openssl s_client -connect aepif.ru:443 2>/dev/null | openssl x509 -noout -dates + +# Проверка для всех доменов +for domain in traefik.aepif.ru auth.aepif.ru notes.aepif.ru git.aepif.ru webhook.aepif.ru; do + echo "=== $domain ===" + echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null | openssl x509 -noout -subject -dates + echo +done +``` + +### Принудительное обновление сертификатов + +```bash +# Удаление старых сертификатов (ОСТОРОЖНО!) +cd /DOCKER/reverse-proxy +docker-compose stop traefik +docker volume rm reverse-proxy_traefik_data +docker volume create traefik_data +docker-compose up -d traefik + +# Проверка получения новых сертификатов +docker-compose logs -f traefik | grep -i acme +``` + +## Управление пользователями + +### Добавление нового пользователя + +```bash +# Генерация хеша пароля +NEW_PASSWORD="secure-password-123" +PASSWORD_HASH=$(docker run --rm authelia/authelia:latest authelia hash-password "$NEW_PASSWORD") + +# Редактирование базы пользователей +cd /DOCKER/auth +cp authelia/users_database.yml authelia/users_database.yml.backup + +cat >> authelia/users_database.yml << EOF + + newuser: + displayname: "New User" + password: "$PASSWORD_HASH" + email: newuser@aepif.ru + groups: + - users +EOF + +# Применение изменений +docker-compose restart authelia + +# Проверка +docker-compose logs authelia | grep -i "user\|config" +``` + +### Смена пароля пользователя + +```bash +# Генерация нового хеша +NEW_PASSWORD="new-secure-password" +PASSWORD_HASH=$(docker run --rm authelia/authelia:latest authelia hash-password "$NEW_PASSWORD") + +# Редактирование файла пользователей +cd /DOCKER/auth +nano authelia/users_database.yml + +# Замените строку password для нужного пользователя +# Перезапуск Authelia +docker-compose restart authelia +``` + +### Удаление пользователя + +```bash +# Создание резервной копии +cd /DOCKER/auth +cp authelia/users_database.yml authelia/users_database.yml.backup + +# Редактирование (удалить секцию пользователя) +nano authelia/users_database.yml + +# Очистка сессий пользователя из Redis +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*username*" | xargs docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" del + +# Перезапуск +docker-compose restart authelia +``` + +## Управление политиками доступа + +### Добавление нового защищенного сервиса + +```bash +# Редактирование конфигурации Authelia +cd /DOCKER/auth +nano authelia/configuration.yml + +# Добавить новое правило в секцию access_control.rules: +# - domain: newservice.aepif.ru +# policy: one_factor + +# Применение изменений +docker-compose restart authelia +``` + +### Изменение политик безопасности + +```bash +# Для более строгой безопасности (требует 2FA) +cd /DOCKER/auth +nano authelia/configuration.yml + +# Изменить policy с one_factor на two_factor для нужных доменов +# - domain: notes.aepif.ru +# policy: two_factor + +# Перезапуск +docker-compose restart authelia +``` + +## Обновления + +### Обновление Traefik + +```bash +cd /DOCKER/reverse-proxy + +# Проверка текущей версии +docker exec traefik traefik version + +# Получение новой версии +docker-compose pull traefik + +# Обновление с сохранением конфигурации +docker-compose up -d traefik + +# Проверка логов +docker-compose logs -f traefik +``` + +### Обновление Authelia + +```bash +cd /DOCKER/auth + +# Создание резервной копии конфигурации +tar czf authelia_backup_$(date +%Y%m%d).tar.gz authelia/ + +# Проверка текущей версии +docker exec authelia authelia --version + +# Получение новой версии +docker-compose pull authelia + +# Обновление +docker-compose up -d authelia + +# Проверка совместимости конфигурации +docker exec authelia authelia validate-config /config/configuration.yml +``` + +### Обновление Redis + +```bash +cd /DOCKER/auth + +# Создание дампа данных +docker exec auth_redis redis-cli -a "$REDIS_PASSWORD" save + +# Обновление образа +docker-compose pull redis +docker-compose up -d redis + +# Проверка работоспособности +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" ping +``` + +## Резервное копирование + +### Автоматический backup скрипт + +```bash +#!/bin/bash +# /opt/scripts/infrastructure_backup.sh + +BACKUP_DIR="/opt/backups/infrastructure" +DATE=$(date +%Y%m%d_%H%M%S) + +mkdir -p $BACKUP_DIR + +echo "Starting infrastructure backup - $DATE" + +# Backup Traefik data (SSL сертификаты) +echo "Backing up Traefik data..." +docker run --rm -v reverse-proxy_traefik_data:/data -v $BACKUP_DIR:/backup alpine \ + tar czf /backup/traefik_data_$DATE.tar.gz -C /data . + +# Backup Authelia configuration +echo "Backing up Authelia config..." +tar czf $BACKUP_DIR/authelia_config_$DATE.tar.gz -C /DOCKER/auth authelia/ + +# Backup Redis data +echo "Backing up Redis data..." +docker exec auth_redis redis-cli -a "$REDIS_PASSWORD" save +docker run --rm -v auth_redis_data:/data -v $BACKUP_DIR:/backup alpine \ + tar czf /backup/redis_data_$DATE.tar.gz -C /data . + +# Backup environment files +echo "Backing up environment files..." +tar czf $BACKUP_DIR/env_files_$DATE.tar.gz \ + /DOCKER/reverse-proxy/.env \ + /DOCKER/auth/.env \ + /DOCKER/reverse-proxy/docker-compose.yml \ + /DOCKER/auth/docker-compose.yml + +# Cleanup old backups (keep 7 days) +find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete + +echo "Infrastructure backup completed - $DATE" +``` + +### Настройка автоматического backup + +```bash +# Создание скрипта +sudo mkdir -p /opt/scripts +sudo nano /opt/scripts/infrastructure_backup.sh +sudo chmod +x /opt/scripts/infrastructure_backup.sh + +# Создание директории для бэкапов +sudo mkdir -p /opt/backups/infrastructure + +# Добавление в crontab (ежедневно в 2:00) +echo "0 2 * * * /opt/scripts/infrastructure_backup.sh >> /var/log/infrastructure_backup.log 2>&1" | sudo crontab - +``` + +### Восстановление из backup + +```bash +#!/bin/bash +# Восстановление инфраструктуры из backup + +BACKUP_DATE="20250804_020000" # Измените на нужную дату +BACKUP_DIR="/opt/backups/infrastructure" + +# Остановка сервисов +cd /DOCKER/reverse-proxy && docker-compose down +cd /DOCKER/auth && docker-compose down + +# Восстановление Traefik data +docker volume rm reverse-proxy_traefik_data +docker volume create reverse-proxy_traefik_data +docker run --rm -v reverse-proxy_traefik_data:/data -v $BACKUP_DIR:/backup alpine \ + tar xzf /backup/traefik_data_$BACKUP_DATE.tar.gz -C /data + +# Восстановление Authelia config +rm -rf /DOCKER/auth/authelia +tar xzf $BACKUP_DIR/authelia_config_$BACKUP_DATE.tar.gz -C /DOCKER/auth/ + +# Восстановление Redis data +docker volume rm auth_redis_data +docker volume create auth_redis_data +docker run --rm -v auth_redis_data:/data -v $BACKUP_DIR:/backup alpine \ + tar xzf /backup/redis_data_$BACKUP_DATE.tar.gz -C /data + +# Восстановление env файлов +tar xzf $BACKUP_DIR/env_files_$BACKUP_DATE.tar.gz -C / + +# Запуск сервисов +cd /DOCKER/reverse-proxy && docker-compose up -d +cd /DOCKER/auth && docker-compose up -d + +echo "Восстановление завершено" +``` + +## Диагностика проблем + +### Проблемы с маршрутизацией + +```bash +# Проверка правил маршрутизации в Traefik +curl https://traefik.aepif.ru/api/http/routers | jq '.[] | {name, rule, service}' + +# Проверка состояния сервисов +curl https://traefik.aepif.ru/api/http/services | jq '.[] | {name, status}' + +# Тест конкретного маршрута +curl -H "Host: notes.aepif.ru" http://localhost/ +``` + +### Проблемы с аутентификацией + +```bash +# Проверка Forward Auth middleware +curl -v https://notes.aepif.ru/ + +# Проверка сессий в Redis +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*" + +# Тест API Authelia +curl -v https://auth.aepif.ru/api/verify + +# Сброс заблокированного пользователя +docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*banned*" | xargs docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" del +``` + +### Проблемы с SSL + +```bash +# Проверка ACME логов +docker logs traefik 2>&1 | grep -i acme + +# Тест получения сертификата вручную +docker exec traefik sh -c "curl -I http://test.aepif.ru/.well-known/acme-challenge/test" + +# Проверка файла acme.json +docker exec traefik ls -la /data/ +docker exec traefik cat /data/acme.json | jq '.letsencrypt.Certificates | length' +``` + +## Мониторинг производительности + +### Настройка метрик + +```bash +# Добавление Prometheus метрик в Traefik +cd /DOCKER/reverse-proxy +nano docker-compose.yml + +# Добавить в command секцию: +# - --metrics.prometheus=true +# - --metrics.prometheus.addEntryPointsLabels=true +# - --metrics.prometheus.addServicesLabels=true + +docker-compose up -d traefik +``` + +### Анализ производительности + +```bash +# Статистика запросов к Traefik +curl https://traefik.aepif.ru/metrics + +# Анализ времени ответа +curl -w "@curl-format.txt" -o /dev/null -s https://notes.aepif.ru/ + +# Создание файла curl-format.txt: +cat > curl-format.txt << 'EOF' + time_namelookup: %{time_namelookup}s\n + time_connect: %{time_connect}s\n + time_appconnect: %{time_appconnect}s\n + time_pretransfer: %{time_pretransfer}s\n + time_redirect: %{time_redirect}s\n + time_starttransfer: %{time_starttransfer}s\n + ----------\n + time_total: %{time_total}s\n +EOF +``` + +## Автоматизация обслуживания + +### Скрипт проверки системы + +```bash +#!/bin/bash +# /opt/scripts/infrastructure_health_check.sh + +echo "=== Infrastructure Health Check $(date) ===" + +# Проверка статуса контейнеров +echo "Container Status:" +docker ps --filter "name=traefik" --filter "name=authelia" --filter "name=auth_redis" --format "table {{.Names}}\t{{.Status}}" + +# Проверка доступности сервисов +echo -e "\nService Availability:" +for service in traefik.aepif.ru auth.aepif.ru; do + if curl -s -o /dev/null -w "%{http_code}" https://$service | grep -q "200\|302"; then + echo "$service: OK" + else + echo "$service: FAILED" + fi +done + +# Проверка SSL сертификатов (срок действия) +echo -e "\nSSL Certificates:" +for domain in traefik.aepif.ru auth.aepif.ru; do + expiry=$(echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2) + echo "$domain expires: $expiry" +done + +# Проверка использования диска +echo -e "\nDisk Usage:" +df -h /var/lib/docker | tail -1 + +echo -e "\n=== End Health Check ===" +``` + +Система администрирования настроена! Теперь у вас есть полный контроль над инфраструктурой. + +Связанные документы: +- [[Инфраструктура - Обзор системы]] +- [[Second Mind - Администрирование]] \ No newline at end of file diff --git a/Мой сервер/Инфраструктура/Развертывание.md b/Мой сервер/Инфраструктура/Развертывание.md new file mode 100644 index 0000000..e38759b --- /dev/null +++ b/Мой сервер/Инфраструктура/Развертывание.md @@ -0,0 +1,148 @@ +## Предварительные требования + +### Системные требования +- Ubuntu/Debian сервер с минимум 2GB RAM +- Docker и Docker Compose установлены +- Открыты порты: 80, 443, 2222, 8080 +- Настроены DNS записи для поддоменов + +### Подготовка DNS + +Создайте A-записи для всех поддоменов: +```dns +traefik.aepif.ru IN A YOUR_SERVER_IP +auth.aepif.ru IN A YOUR_SERVER_IP +notes.aepif.ru IN A YOUR_SERVER_IP +git.aepif.ru IN A YOUR_SERVER_IP +webhook.aepif.ru IN A YOUR_SERVER_IP +``` + +## Порядок развертывания + +⚠️ **Важно**: Инфраструктурные сервисы должны быть развернуты **первыми**, так как все остальные приложения зависят от них. + +### Последовательность установки: +1. **Traefik Reverse Proxy** (сначала) +2. **Authelia Authentication** (после Traefik) +3. **Second Mind** (после обеих частей инфраструктуры) + +## 1. Развертывание Traefik + +### Подготовка директорий + +```bash +# Создание директории проекта +mkdir -p /DOCKER/reverse-proxy +cd /DOCKER/reverse-proxy + +# Создание volume для данных Traefik +docker volume create traefik_data +``` + +### Создание .env файла + +```bash +cat > .env << 'EOF' +DOMAIN=aepif.ru +ADMIN_EMAIL=epifantsev1aa@gmail.com +EOF +``` + +### Создание docker-compose.yml + +```bash +cat > docker-compose.yml << 'EOF' +version: '3.8' +services: + traefik: + image: traefik:v3.0 + container_name: traefik + command: + - --api.dashboard=true + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --providers.docker.network=proxy + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --entrypoints.ssh.address=:2222 + - --certificatesresolvers.letsencrypt.acme.email=epifantsev1aa@gmail.com + - --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json + - --certificatesresolvers.letsencrypt.acme.tlschallenge=true + - --providers.docker.exposedByDefault=false + - --api.insecure=true + ports: + - "80:80" + - "443:443" + - "8080:8080" + - "2222:2222" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - traefik_data:/data + networks: + - proxy + labels: + - traefik.enable=true + - traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`) + - traefik.http.routers.traefik.tls.certresolver=letsencrypt + - traefik.http.routers.traefik.service=api@internal + - traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`) + - traefik.http.routers.http-catchall.entrypoints=web + - traefik.http.routers.http-catchall.middlewares=redirect-to-https + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + restart: unless-stopped + +volumes: + traefik_data: + +networks: + proxy: + name: proxy + driver: bridge +EOF +``` + +### Создание сети и запуск + +```bash +# Создание внешней сети proxy +docker network create proxy + +# Запуск Traefik +docker-compose up -d + +# Проверка статуса +docker-compose ps +docker-compose logs -f +``` + +### Проверка работы Traefik + +```bash +# Проверка HTTP → HTTPS редиректа +curl -I http://traefik.aepif.ru + +# Проверка HTTPS +curl -I https://traefik.aepif.ru + +# Проверка dashboard (должен быть доступен) +curl -I https://traefik.aepif.ru/dashboard/ +``` + +## 2. Развертывание Authelia + +### Подготовка директорий + +```bash +# Создание директории проекта +mkdir -p /DOCKER/auth/authelia +cd /DOCKER/auth +``` + +### Генерация секретов + +```bash +# Генерация всех необходимых секретов +JWT_SECRET=$(openssl rand -base64 48) +SESSION_SECRET=$(openssl rand -base64 48) +STORAGE_KEY=$(openssl rand -base64 24) +REDIS_PASSWORD=$( \ No newline at end of file