diff --git a/files/zabbix-server.sh b/files/zabbix-server.sh index 7485c32..5f0f85d 100644 --- a/files/zabbix-server.sh +++ b/files/zabbix-server.sh @@ -1,7 +1,7 @@ #!/bin/bash ############################################################################### -# Скрипт автоматической установки Zabbix 6.0 на Debian 12 -# Версия: 3.0 (РАБОЧАЯ - параметр в конце конфига) +# Скрипт установки Zabbix 6.0 на Debian 12 +# Конфигурация zabbix_server.conf - ТОЛЬКО необходимые правки ############################################################################### set -e @@ -14,77 +14,45 @@ ZABBIX_HOSTNAME="mon.au-team.irpo" TIMEZONE="Asia/Yekaterinburg" ADMIN_PASSWORD="P@ssw0rd" -# Цвета RED='\033[0;31m' GREEN='\033[0;32m' -YELLOW='\033[1;33m' NC='\033[0m' +log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +log_error() { echo -e "${RED}[ERROR]${NC} $1"; } -log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } -log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } -log_error() { echo -e "${RED}[ERROR]${NC} $1"; } - -if [[ $EUID -ne 0 ]]; then - log_error "Этот скрипт должен быть запущен от root" - exit 1 -fi +[[ $EUID -ne 0 ]] && { log_error "Запуск от root!"; exit 1; } log_info "Начало установки Zabbix на $(hostname)" ############################################################################### -# 1. НАСТРОЙКА РЕПОЗИТОРИЕВ YANDEX +# 1. РЕПОЗИТОРИИ YANDEX ############################################################################### -log_info "Настройка репозиториев Yandex..." - +log_info "Настройка репозиториев..." cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date +%F-%H%M) - -cat > /etc/apt/sources.list << EOF +cat > /etc/apt/sources.list << 'EOF' deb https://mirror.yandex.ru/debian bookworm main contrib non-free non-free-firmware deb https://mirror.yandex.ru/debian bookworm-updates main contrib non-free non-free-firmware deb https://mirror.yandex.ru/debian bookworm-backports main contrib non-free non-free-firmware deb https://mirror.yandex.ru/debian-security bookworm-security main contrib non-free non-free-firmware EOF - -log_info "Обновление индексов пакетов..." apt-get update -qq ############################################################################### # 2. УСТАНОВКА ПАКЕТОВ ############################################################################### -log_info "Установка необходимых пакетов..." - +log_info "Установка пакетов..." DEBIAN_FRONTEND=noninteractive apt-get install -y \ - zabbix-server-mysql \ - zabbix-frontend-php \ - zabbix-agent \ - mariadb-server \ - mariadb-client \ - apache2 \ - libapache2-mod-php \ - php-mysql \ - php-gd \ - php-xml \ - php-mbstring \ - php-bcmath \ - php-ldap \ - wget \ - curl \ - gnupg2 + zabbix-server-mysql zabbix-frontend-php zabbix-agent \ + mariadb-server mariadb-client apache2 libapache2-mod-php \ + php-mysql php-gd php-xml php-mbstring php-bcmath php-ldap wget curl gnupg2 ############################################################################### -# 3. НАСТРОЙКА БАЗЫ ДАННЫХ +# 3. БАЗА ДАННЫХ ############################################################################### log_info "Настройка MariaDB..." - systemctl enable --now mariadb - -log_info "Ожидание готовности MariaDB..." for i in {1..30}; do - if mysql -u root -e "SELECT 1;" &>/dev/null; then - log_info "MariaDB готова!" - break - fi - sleep 1 + mysql -u root -e "SELECT 1;" &>/dev/null && break || sleep 1 done mysql -u root << EOF @@ -96,102 +64,64 @@ GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost'; FLUSH PRIVILEGES; EOF -############################################################################### -# 4. ИМПОРТ СХЕМЫ ZABBIX -############################################################################### -log_info "Импорт схемы Zabbix в БД..." - +# Импорт схемы if [ -d "/usr/share/zabbix-sql-scripts/mysql" ]; then SQL_DIR="/usr/share/zabbix-sql-scripts/mysql" else SQL_DIR="/usr/share/zabbix-server-mysql" fi - -log_info "Импорт schema.sql..." zcat ${SQL_DIR}/schema.sql.gz | mysql -u ${DB_USER} -p"${DB_PASSWORD}" ${DB_NAME} -log_info "Импорт images.sql..." [ -f "${SQL_DIR}/images.sql.gz" ] && zcat ${SQL_DIR}/images.sql.gz | mysql -u ${DB_USER} -p"${DB_PASSWORD}" ${DB_NAME} -log_info "Импорт data.sql..." [ -f "${SQL_DIR}/data.sql.gz" ] && zcat ${SQL_DIR}/data.sql.gz | mysql -u ${DB_USER} -p"${DB_PASSWORD}" ${DB_NAME} -TABLE_COUNT=$(mysql -u ${DB_USER} -p"${DB_PASSWORD}" -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${DB_NAME}';" 2>/dev/null) -log_info "Импортировано таблиц: ${TABLE_COUNT}" - ############################################################################### -# 5. НАСТРОЙКА ZABBIX SERVER (РАБОЧИЙ МЕТОД!) +# 4. НАСТРОЙКА zabbix_server.conf (МИНИМАЛЬНЫЕ ПРАВКИ!) ############################################################################### log_info "Настройка zabbix_server.conf..." -# НЕ перезаписываем конфиг, а редактируем существующий -# 1. Раскомментируем и устанавливаем параметры БД -sed -i "s|^#DBName=.*|DBName=${DB_NAME}|" /etc/zabbix/zabbix_server.conf -sed -i "s|^#DBUser=.*|DBUser=${DB_USER}|" /etc/zabbix/zabbix_server.conf -sed -i "s|^#DBPassword=.*|DBPassword=${DB_PASSWORD}|" /etc/zabbix/zabbix_server.conf +CONF="/etc/zabbix/zabbix_server.conf" -# 2. Если параметры без # - заменяем их значения -sed -i "s|^DBName=.*|DBName=${DB_NAME}|" /etc/zabbix/zabbix_server.conf -sed -i "s|^DBUser=.*|DBUser=${DB_USER}|" /etc/zabbix/zabbix_server.conf -sed -i "s|^DBPassword=.*|DBPassword=${DB_PASSWORD}|" /etc/zabbix/zabbix_server.conf +# Правим ТОЛЬКО нужные строки, не трогая остальное: +# 1. Параметры БД (раскомментируем и ставим значения) +sed -i "s|^#*DBName=.*|DBName=${DB_NAME}|" "$CONF" +sed -i "s|^#*DBUser=.*|DBUser=${DB_USER}|" "$CONF" +sed -i "s|^#*DBPassword=.*|DBPassword=${DB_PASSWORD}|" "$CONF" -# 3. Устанавливаем LogFile если не задан -if ! grep -q "^LogFile=" /etc/zabbix/zabbix_server.conf; then - sed -i "s|^#LogFile=.*|LogFile=/var/log/zabbix/zabbix_server.log|" /etc/zabbix/zabbix_server.conf -fi +# 2. LogFile +sed -i "s|^#*LogFile=.*|LogFile=/var/log/zabbix-server/zabbix_server.log|" "$CONF" -# 4. КРИТИЧНО: Добавляем AllowUnsupportedDBVersions=1 В САМЫЙ КОНЕЦ файла -# Это обходит проверку версии и гарантирует применение параметра -echo "" >> /etc/zabbix/zabbix_server.conf -echo "### CUSTOM SETTINGS (added by installer) ###" >> /etc/zabbix/zabbix_server.conf -echo "AllowUnsupportedDBVersions=1" >> /etc/zabbix/zabbix_server.conf +# 3. PidFile +sed -i "s|^#*PidFile=.*|PidFile=/run/zabbix/zabbix_server.pid|" "$CONF" -# 5. Проверка -if tail -5 /etc/zabbix/zabbix_server.conf | grep -q "AllowUnsupportedDBVersions=1"; then - log_info "✓ AllowUnsupportedDBVersions=1 добавлен в конец конфига" +# 4. КРИТИЧНО: AllowUnsupportedDBVersions=1 В САМЫЙ КОНЕЦ файла +echo "AllowUnsupportedDBVersions=1" >> "$CONF" + +# Проверка +if tail -1 "$CONF" | grep -q "AllowUnsupportedDBVersions=1"; then + log_info "✓ Конфиг настроен" else - log_error "✗ Не удалось добавить параметр!" + log_error "✗ Ошибка настройки конфига" exit 1 fi -# 6. Права на файл -chown root:zabbix /etc/zabbix/zabbix_server.conf -chmod 640 /etc/zabbix/zabbix_server.conf - -log_info "Проверка параметров БД в конфиге:" -grep -E "^(DBName|DBUser|DBPassword|AllowUnsupported)" /etc/zabbix/zabbix_server.conf +chown root:zabbix "$CONF" +chmod 640 "$CONF" ############################################################################### -# 6. НАСТРОЙКА PHP ФРОНТЕНДА +# 5. PHP и Apache ############################################################################### -log_info "Настройка PHP (Timezone: ${TIMEZONE})..." - +log_info "Настройка PHP и Apache..." PHP_INI="/etc/php/8.2/apache2/php.ini" -if [ -f "$PHP_INI" ]; then - sed -i "s|^;date.timezone =|date.timezone = ${TIMEZONE}|" $PHP_INI - sed -i "s|^date.timezone =.*|date.timezone = ${TIMEZONE}|" $PHP_INI - sed -i "s/^max_execution_time = .*/max_execution_time = 300/" $PHP_INI - sed -i "s/^memory_limit = .*/memory_limit = 128M/" $PHP_INI - sed -i "s/^post_max_size = .*/post_max_size = 16M/" $PHP_INI - sed -i "s/^upload_max_filesize = .*/upload_max_filesize = 2M/" $PHP_INI - sed -i "s/^max_input_time = .*/max_input_time = 300/" $PHP_INI - sed -i "s/^max_input_vars = .*/max_input_vars = 10000/" $PHP_INI -fi - -############################################################################### -# 7. НАСТРОЙКА APACHE VIRTUALHOST -############################################################################### -log_info "Настройка Apache VirtualHost для ${ZABBIX_HOSTNAME}..." +[ -f "$PHP_INI" ] && sed -i "s|^;date.timezone =|date.timezone = ${TIMEZONE}|" "$PHP_INI" cat > /etc/apache2/sites-available/zabbix.conf << EOF ServerName ${ZABBIX_HOSTNAME} - DocumentRoot /usr/share/zabbix - Options FollowSymLinks AllowOverride None Require all granted - php_value max_execution_time 300 php_value memory_limit 128M @@ -202,7 +132,6 @@ cat > /etc/apache2/sites-available/zabbix.conf << EOF php_value date.timezone ${TIMEZONE} - Require all denied @@ -215,21 +144,17 @@ cat > /etc/apache2/sites-available/zabbix.conf << EOF Require all denied - ErrorLog \${APACHE_LOG_DIR}/zabbix-error.log CustomLog \${APACHE_LOG_DIR}/zabbix-access.log combined EOF - -a2ensite zabbix.conf -a2enmod php8.2 2>/dev/null || true +a2ensite zabbix.conf 2>/dev/null || true systemctl reload apache2 ############################################################################### -# 8. НАСТРОЙКА ZABBIX AGENT +# 6. Zabbix Agent ############################################################################### -log_info "Настройка Zabbix Agent..." - +log_info "Настройка агента..." cat > /etc/zabbix/zabbix_agentd.conf << EOF PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log @@ -241,60 +166,38 @@ Include=/etc/zabbix/zabbix_agentd.d/*.conf EOF ############################################################################### -# 9. ЗАПУСК СЛУЖБ +# 7. ЗАПУСК ############################################################################### -log_info "Запуск служб Zabbix..." - +log_info "Запуск служб..." systemctl daemon-reload -systemctl enable --now zabbix-server -systemctl enable --now zabbix-agent +systemctl enable --now zabbix-server zabbix-agent systemctl restart apache2 -log_info "Ожидание запуска Zabbix Server (до 30 сек)..." for i in {1..30}; do - if systemctl is-active --quiet zabbix-server; then - log_info "✓ Zabbix Server запущен успешно!" - break - fi + systemctl is-active --quiet zabbix-server && { log_info "✓ Server запущен"; break; } sleep 1 done if ! systemctl is-active --quiet zabbix-server; then - log_error "✗ Zabbix Server не запустился!" - log_error "Последние 20 строк лога:" + log_error "✗ Server не запустился! Лог:" tail -20 /var/log/zabbix/zabbix_server.log 2>/dev/null || echo "Лог не найден" exit 1 fi ############################################################################### -# 10. СБРОС ПАРОЛЯ ADMIN +# 8. ПАРОЛЬ ADMIN ############################################################################### -log_info "Сброс пароля пользователя Admin..." - -mysql -u root ${DB_NAME} << EOF -DELETE FROM users WHERE username = 'Admin'; -INSERT INTO users (userid, username, passwd, name, surname, url, autologin, autologout, lang, refresh, type, theme, failed_attempts, login_attempts) -VALUES ('1', 'Admin', MD5('${ADMIN_PASSWORD}'), 'Zabbix', 'Administrator', '', '0', '900', 'en_US', '30s', '3', 'darkblue', '0', '0'); -EOF +mysql -u root ${DB_NAME} -e "DELETE FROM users WHERE username='Admin'; INSERT INTO users (userid,username,passwd,name,surname,url,autologin,autologout,lang,refresh,type,theme,failed_attempts,login_attempts) VALUES ('1','Admin',MD5('${ADMIN_PASSWORD}'),'Zabbix','Administrator','',0,900,'en_US','30s',3,'darkblue',0,0);" ############################################################################### -# ЗАВЕРШЕНИЕ +# ФИНАЛ ############################################################################### echo "" -echo "========================================================================" -echo -e "${GREEN}✓ Установка Zabbix завершена успешно!${NC}" -echo "========================================================================" -echo "" -echo " Доступ к веб-интерфейсу:" -echo " URL: http://${ZABBIX_HOSTNAME}/" -echo " Логин: Admin" -echo " Пароль: ${ADMIN_PASSWORD}" -echo "" -echo "⚠️ ВАЖНО: Смените пароль после первого входа!" -echo "" -echo "📁 Основные конфиги:" -echo " Server: /etc/zabbix/zabbix_server.conf" -echo " Agent: /etc/zabbix/zabbix_agentd.conf" -echo " Apache: /etc/apache2/sites-available/zabbix.conf" -echo "" -echo "========================================================================" \ No newline at end of file +echo "============================================================" +echo -e "${GREEN}✓ Zabbix установлен!${NC}" +echo "============================================================" +echo "URL: http://${ZABBIX_HOSTNAME}/" +echo "Логин: Admin" +echo "Пароль: ${ADMIN_PASSWORD}" +echo "⚠️ Смените пароль после входа!" +echo "============================================================" \ No newline at end of file