#!/bin/bash #=============================================================================== # ШАГ 14: НАСТРОЙКА LOGROTATE #=============================================================================== # Запуск: sudo bash 02-k-git-server-deploy.14.sh # # Настраивает ротацию логов для: # - Gitea # - Nginx # - msmtp # - Скриптов установки #=============================================================================== SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh" init_log check_root print_header "ШАГ 14: НАСТРОЙКА LOGROTATE" #------------------------------------------------------------------------------- # 14.1 Проверка установки logrotate #------------------------------------------------------------------------------- print_subheader "Проверка logrotate" if is_installed logrotate; then print_success "logrotate установлен" else print_info "Установка logrotate..." apt install -y logrotate fi #------------------------------------------------------------------------------- # 14.2 Настройка ротации логов Gitea #------------------------------------------------------------------------------- print_subheader "Настройка ротации логов Gitea" GITEA_LOG_DIR="$GITEA_DATA/log" # Создаём директорию если нет mkdir -p "$GITEA_LOG_DIR" chown git:git "$GITEA_LOG_DIR" cat > /etc/logrotate.d/gitea << 'EOF' # Logrotate configuration for Gitea # Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh /var/lib/gitea/log/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 git git sharedscripts postrotate # Gitea не требует сигнала для reopening логов # Она автоматически открывает новые файлы endscript } EOF print_success "Конфигурация Gitea создана: /etc/logrotate.d/gitea" #------------------------------------------------------------------------------- # 14.3 Настройка ротации логов Nginx #------------------------------------------------------------------------------- print_subheader "Настройка ротации логов Nginx" # Проверяем существующую конфигурацию (обычно уже есть) if [[ -f /etc/logrotate.d/nginx ]]; then print_info "Nginx logrotate уже настроен" # Показать текущую конфигурацию echo "" cat /etc/logrotate.d/nginx else cat > /etc/logrotate.d/nginx << 'EOF' # Logrotate configuration for Nginx # Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi endscript postrotate invoke-rc.d nginx rotate >/dev/null 2>&1 || true endscript } EOF print_success "Конфигурация Nginx создана: /etc/logrotate.d/nginx" fi #------------------------------------------------------------------------------- # 14.4 Настройка ротации логов msmtp #------------------------------------------------------------------------------- print_subheader "Настройка ротации логов msmtp" # Создаём лог-файл если нет touch /var/log/msmtp.log chmod 644 /var/log/msmtp.log cat > /etc/logrotate.d/msmtp << 'EOF' # Logrotate configuration for msmtp # Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh /var/log/msmtp.log { weekly missingok rotate 8 compress delaycompress notifempty create 0644 root root } EOF print_success "Конфигурация msmtp создана: /etc/logrotate.d/msmtp" #------------------------------------------------------------------------------- # 14.5 Настройка ротации логов установки #------------------------------------------------------------------------------- print_subheader "Настройка ротации логов установки" cat > /etc/logrotate.d/git-server-setup << 'EOF' # Logrotate configuration for Git Server Setup Scripts # Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh /var/log/git-server-deploy.log /var/log/server-setup.log { monthly missingok rotate 6 compress delaycompress notifempty create 0644 root root } EOF print_success "Конфигурация setup logs создана: /etc/logrotate.d/git-server-setup" #------------------------------------------------------------------------------- # 14.6 Настройка ротации логов Fail2ban #------------------------------------------------------------------------------- print_subheader "Настройка ротации логов Fail2ban" if is_installed fail2ban; then # Проверяем существующую конфигурацию if [[ -f /etc/logrotate.d/fail2ban ]]; then print_info "Fail2ban logrotate уже настроен" else cat > /etc/logrotate.d/fail2ban << 'EOF' # Logrotate configuration for Fail2ban # Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh /var/log/fail2ban.log { weekly missingok rotate 8 compress delaycompress notifempty create 0640 root adm postrotate /usr/bin/fail2ban-client flushlogs >/dev/null 2>&1 || true endscript } EOF print_success "Конфигурация Fail2ban создана: /etc/logrotate.d/fail2ban" fi else print_info "Fail2ban не установлен, пропуск" fi #------------------------------------------------------------------------------- # 14.7 Тестирование конфигурации #------------------------------------------------------------------------------- print_subheader "Тестирование конфигурации" echo "Проверка всех конфигураций logrotate..." echo "" ALL_OK=true for config in /etc/logrotate.d/gitea /etc/logrotate.d/nginx /etc/logrotate.d/msmtp /etc/logrotate.d/git-server-setup; do if [[ -f "$config" ]]; then if logrotate -d "$config" 2>&1 | head -5; then echo -e " $(basename $config): ${GREEN}OK${NC}" else echo -e " $(basename $config): ${RED}ERROR${NC}" ALL_OK=false fi fi done echo "" if $ALL_OK; then print_success "Все конфигурации валидны" else print_warning "Есть ошибки в конфигурациях" fi #------------------------------------------------------------------------------- # 14.8 Принудительный запуск (опционально) #------------------------------------------------------------------------------- print_subheader "Тестовый запуск" echo "Logrotate запускается автоматически через cron.daily" echo "" echo "Текущее расписание:" if [[ -f /etc/cron.daily/logrotate ]]; then echo " /etc/cron.daily/logrotate - запускается ежедневно" fi echo "" read -p "Запустить logrotate сейчас (dry-run)? [y/N]: " RUN_NOW if [[ "$RUN_NOW" =~ ^[Yy]$ ]]; then print_info "Dry-run всех логов..." logrotate -v /etc/logrotate.conf 2>&1 | tail -30 fi #------------------------------------------------------------------------------- # 14.9 Итог #------------------------------------------------------------------------------- echo "" echo -e "${GREEN}============================================================${NC}" echo -e "${GREEN} LOGROTATE НАСТРОЕН${NC}" echo -e "${GREEN}============================================================${NC}" echo "" echo "Настроена ротация логов:" echo "" echo " Gitea: /var/lib/gitea/log/*.log" echo " Ротация: ежедневно, хранить 14 дней" echo "" echo " Nginx: /var/log/nginx/*.log" echo " Ротация: ежедневно, хранить 14 дней" echo "" echo " msmtp: /var/log/msmtp.log" echo " Ротация: еженедельно, хранить 8 недель" echo "" echo " Setup scripts: /var/log/git-server-deploy.log" echo " /var/log/server-setup.log" echo " Ротация: ежемесячно, хранить 6 месяцев" echo "" echo "Конфигурационные файлы:" echo " /etc/logrotate.d/gitea" echo " /etc/logrotate.d/nginx" echo " /etc/logrotate.d/msmtp" echo " /etc/logrotate.d/git-server-setup" echo "" echo "Полезные команды:" echo " Тест: logrotate -d /etc/logrotate.d/gitea" echo " Принудительно: logrotate -f /etc/logrotate.conf" echo " Статус: cat /var/lib/logrotate/status" echo "" print_success "Шаг 14 завершён: Logrotate настроен"