Files
demo2026-1/files/zabbix-server.sh
2026-03-13 17:39:54 +05:00

362 lines
12 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
###############################################################################
# Скрипт автоматической установки Zabbix 6.0 на Debian 12
# Версия: 2.0 (исправлена проблема с AllowUnsupportedDBVersions)
###############################################################################
set -e
# === КОНФИГУРАЦИЯ ===
DB_PASSWORD="P@ssw0rd"
DB_NAME="zabbix"
DB_USER="zabbix"
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_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
log_info "Начало установки Zabbix на $(hostname)"
###############################################################################
# 1. НАСТРОЙКА РЕПОЗИТОРИЕВ YANDEX
###############################################################################
log_info "Настройка репозиториев Yandex..."
cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date +%F-%H%M)
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 "Установка необходимых пакетов..."
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
###############################################################################
# 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
done
# Удаление старой БД если существует
mysql -u root << EOF
DROP DATABASE IF EXISTS ${DB_NAME};
CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
DROP USER IF EXISTS '${DB_USER}'@'localhost';
CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';
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"
elif [ -d "/usr/share/zabbix-server-mysql" ]; then
SQL_DIR="/usr/share/zabbix-server-mysql"
else
log_error "Не найдены SQL файлы схемы Zabbix!"
exit 1
fi
log_info "Импорт schema.sql..."
zcat ${SQL_DIR}/schema.sql.gz | mysql -u ${DB_USER} -p"${DB_PASSWORD}" ${DB_NAME}
log_info "Импорт images.sql..."
if [ -f "${SQL_DIR}/images.sql.gz" ]; then
zcat ${SQL_DIR}/images.sql.gz | mysql -u ${DB_USER} -p"${DB_PASSWORD}" ${DB_NAME}
fi
log_info "Импорт data.sql..."
if [ -f "${SQL_DIR}/data.sql.gz" ]; then
zcat ${SQL_DIR}/data.sql.gz | mysql -u ${DB_USER} -p"${DB_PASSWORD}" ${DB_NAME}
fi
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 (ИСПРАВЛЕНО!)
###############################################################################
log_info "Настройка zabbix_server.conf..."
# Создаем НОВЫЙ конфиг с нуля
cat > /etc/zabbix/zabbix_server.conf << 'ZABBIX_CONF'
# Zabbix Server Configuration File
# General settings
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
# Database settings
ZABBIX_CONF
# Добавляем параметры БД с правильными значениями
cat >> /etc/zabbix/zabbix_server.conf << EOF
DBName=${DB_NAME}
DBUser=${DB_USER}
DBPassword=${DB_PASSWORD}
DBHost=localhost
DBPort=3306
# CRITICAL: Allow unsupported MariaDB version (Debian 12 fix)
AllowUnsupportedDBVersions=1
# Process settings
StartPollers=5
StartIPMIPollers=0
StartPreprocessors=3
StartPollersUnreachable=1
StartTrappers=5
StartPingers=1
StartDiscoverers=1
StartHTTPPollers=1
StartTimers=1
StartEscalators=1
StartAlerters=3
StartProxyPollers=1
StartVMwareCollectors=0
StartSNMPTrapper=0
# Cache settings
CacheSize=32M
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=256M
# Timeout settings
Timeout=4
TrapperTimeout=300
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
# Other settings
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
SSHKeyLocation=
LogSlowQueries=3000
ProxyConfigFrequency=3600
ProxyDataFrequency=1
AllowRoot=0
User=zabbix
Include=/etc/zabbix/zabbix_server.conf.d/*.conf
EOF
# Проверка что параметр добавлен
if grep -q "AllowUnsupportedDBVersions=1" /etc/zabbix/zabbix_server.conf; then
log_info "✓ AllowUnsupportedDBVersions=1 добавлен успешно"
else
log_error "✗ НЕ УДАЛОСЬ добавить AllowUnsupportedDBVersions=1!"
exit 1
fi
# Права на конфиг
chown root:zabbix /etc/zabbix/zabbix_server.conf
chmod 640 /etc/zabbix/zabbix_server.conf
log_info "Содержимое конфига (DB параметры):"
grep -E "^(DBName|DBUser|DBPassword|AllowUnsupported)" /etc/zabbix/zabbix_server.conf
###############################################################################
# 6. НАСТРОЙКА PHP ФРОНТЕНДА
###############################################################################
log_info "Настройка PHP (Timezone: ${TIMEZONE})..."
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}..."
cat > /etc/apache2/sites-available/zabbix.conf << EOF
<VirtualHost *:80>
ServerName ${ZABBIX_HOSTNAME}
DocumentRoot /usr/share/zabbix
<Directory /usr/share/zabbix>
Options FollowSymLinks
AllowOverride None
Require all granted
<IfModule mod_php.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value date.timezone ${TIMEZONE}
</IfModule>
</Directory>
<Directory /usr/share/zabbix/conf>
Require all denied
</Directory>
<Directory /usr/share/zabbix/app>
Require all denied
</Directory>
<Directory /usr/share/zabbix/include>
Require all denied
</Directory>
<Directory /usr/share/zabbix/local>
Require all denied
</Directory>
ErrorLog \${APACHE_LOG_DIR}/zabbix-error.log
CustomLog \${APACHE_LOG_DIR}/zabbix-access.log combined
</VirtualHost>
EOF
a2ensite zabbix.conf
a2enmod php8.2 2>/dev/null || true
systemctl reload apache2
###############################################################################
# 8. НАСТРОЙКА ZABBIX AGENT
###############################################################################
log_info "Настройка Zabbix Agent..."
cat > /etc/zabbix/zabbix_agentd.conf << EOF
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=${ZABBIX_HOSTNAME}
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF
###############################################################################
# 9. ЗАПУСК СЛУЖБ
###############################################################################
log_info "Запуск служб Zabbix..."
systemctl daemon-reload
systemctl enable --now zabbix-server
systemctl enable --now 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
sleep 1
done
if ! systemctl is-active --quiet zabbix-server; then
log_error "✗ Zabbix Server не запустился!"
log_error "Проверка конфига:"
grep -E "^(DBName|DBUser|AllowUnsupported)" /etc/zabbix/zabbix_server.conf
log_error "Последние строки лога:"
if [ -f /var/log/zabbix/zabbix_server.log ]; then
tail -30 /var/log/zabbix/zabbix_server.log
else
log_error "Лог файл не найден!"
fi
exit 1
fi
###############################################################################
# 10. СБРОС ПАРОЛЯ 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
###############################################################################
# ЗАВЕРШЕНИЕ
###############################################################################
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 "========================================================================"