vault backup: 2025-08-04 12:49:10
This commit is contained in:
@@ -298,4 +298,4 @@ ssh-keyscan -p 2222 git.aepif.ru >> ~/.ssh/known_hosts
|
|||||||
- Environment переменных контейнеров
|
- Environment переменных контейнеров
|
||||||
- Примонтированных SSH ключах
|
- Примонтированных SSH ключах
|
||||||
|
|
||||||
Следующий документ: [[Развертывание]]
|
Следующий документ: [[Мой сервер/Second Mind Setup/Развертывание]]
|
||||||
@@ -94,5 +94,5 @@ graph TB
|
|||||||
|
|
||||||
Для развертывания системы изучите:
|
Для развертывания системы изучите:
|
||||||
- [[Мой сервер/Second Mind Setup/Конфигурации]] - настройки всех сервисов
|
- [[Мой сервер/Second Mind Setup/Конфигурации]] - настройки всех сервисов
|
||||||
- [[Развертывание]] - пошаговая инструкция установки
|
- [[Мой сервер/Second Mind Setup/Развертывание]] - пошаговая инструкция установки
|
||||||
- [[Администрирование]] - обслуживание и мониторинг
|
- [[Мой сервер/Second Mind Setup/Администрирование]] - обслуживание и мониторинг
|
||||||
@@ -339,4 +339,4 @@ docker exec -it second_mind_nginx ls -la /usr/share/nginx/html/
|
|||||||
- ✅ Полнотекстовый поиск и граф связей
|
- ✅ Полнотекстовый поиск и граф связей
|
||||||
- ✅ SSL сертификаты для всех доменов
|
- ✅ SSL сертификаты для всех доменов
|
||||||
|
|
||||||
Следующий документ: [[Администрирование]]
|
Следующий документ: [[Мой сервер/Second Mind Setup/Администрирование]]
|
||||||
508
Мой сервер/Инфраструктура/Администрирование.md
Normal file
508
Мой сервер/Инфраструктура/Администрирование.md
Normal file
@@ -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 - Администрирование]]
|
||||||
148
Мой сервер/Инфраструктура/Развертывание.md
Normal file
148
Мой сервер/Инфраструктура/Развертывание.md
Normal file
@@ -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=$(
|
||||||
Reference in New Issue
Block a user