initial commit

This commit is contained in:
unknown
2026-02-19 20:05:04 +03:00
parent 1ee67d8159
commit 05097d5dda
32 changed files with 4413 additions and 3 deletions

275
02/02-k-git-server-deploy.14.sh Executable file
View File

@@ -0,0 +1,275 @@
#!/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 настроен"