Так как у меня установлена Astra Linux 1.8.6.39, то при подключении по ssh, меня информируют, что система не активирована. Воспользуюсь своим так называемым keygen и уберу эту назойливую надпись.


Прогнал свой keygen, теперь при подключении по ssh меня больше не встречает назойливая надпись.


Теперь приступим к установке zabbix.
Настройка сервера
Использовать пакеты будем штатные, с репозиториев Astra Linux.
Если у вас не настроены репы от астры, то можно взять отсюда.
Или взять тут:
# Основной репозиторий, включающий актуальное оперативное или срочное обновление
deb https://dl.astralinux.ru/astra/stable/1.8_x86-64/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
# Расширенный репозиторий, соответствующий актуальному оперативному обновлению
deb https://dl.astralinux.ru/astra/stable/1.8_x86-64/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
1. Подготовим нашу астру, для начала обновим индексы пакетов.
sudo apt update
1.1 Часовой пояс и время. Для мониторинга время критично.
sudo apt install -y chrony
Ставим часовой пояс:
timedatectl set-timezone Europe/Moscow
sudo systemctl enable --now chrony
Добавим российский NTP-pool:
sudo grep -q '^pool' /etc/chrony/chrony.conf || echo 'pool ru.pool.ntp.org iburst' >> /etc/chrony/chrony.conf
sudo systemctl restart chrony
Проводим синхронизацию времени:
timedatectl
sudo chronyc sources -v

1.2 Имя сервера
Изменим имя сервера.
hostnamectl set-hostname ВАШЕ_НОВОЕ_НАЗВАНИЕ
Если после переименования вы получаете
unable to resolve host ИМЯ_СЕРВЕРА: Неизвестное имя или служба
Значит у Вас расхождение имен в /etc/hostname и /etc/hosts
Исправим это:
sudo -i
vim /etc/hosts
исправляем имя на то, которое задали в set-hostname.


Установка базы данных
2. Установка PostgreSQL 15
остаемся в root, дальше делаем под ним. Если вы вышли, то заходим обратно sudo -i
apt install -y postgresql postgresql-client

Включим и добавим базу данных postgresql в автозагрузку.
systemctl enable --now postgresql
2.1 Создание базы данных и пользователя Zabbix
Для нашего удобства, создадим временные переменные с логином, названием базы и паролем.
Переменная логина
export ZBX_DB_USER=zabbix
Переменная название базы данных
export ZBX_DB_NAME=zabbix
Интерактивная переменная с паролем
read -rs -p "Введите надежный пароль для пользователя БД zabbix: " ZBX_DB_PASSWORD
Запишем ее результат
export ZBX_DB_PASSWORD
Пока вы не закрыли сессию в терминале, она помнит значением этих переменных (нигде в системе их не будет)

Теперь нужно зайти в postgres, создать учетную запись, создать базу и дать необходимые права. Для Вашего удобства и что бы ускорить процесс, я обернул все в одну команду. Менять в ней ничего не нужно! Для это мы и сделали переменные, если вы изменили значения переменных, то они автоматически подставятся в эту длинную команду. Все для Вас))
sudo -u postgres psql -v ON_ERROR_STOP=1 <<SQL
CREATE ROLE ${ZBX_DB_USER} WITH LOGIN PASSWORD '${ZBX_DB_PASSWORD}';
CREATE DATABASE ${ZBX_DB_NAME} OWNER ${ZBX_DB_USER} ENCODING 'UTF8' TEMPLATE template0;
ALTER ROLE ${ZBX_DB_USER} SET client_encoding TO 'utf8';
ALTER ROLE ${ZBX_DB_USER} SET default_transaction_isolation TO 'read committed';
ALTER ROLE ${ZBX_DB_USER} SET timezone TO 'Europe/Moscow';
SQL

2.2 Настройка доступа к БД (pg_hba.conf)
Разрешаем локальные TCP-подключения для пользователя zabbix.
По аналогии с пунктом 2.1, создадим для удобства переменную с адресом конфига pg_hba.conf
PG_HBA=/etc/postgresql/15/main/pg_hba.conf
Добавим в конец файла правила
cat >> ${PG_HBA} <<EOF
host zabbix zabbix 127.0.0.1/32 scram-sha-256
host zabbix zabbix ::1/128 scram-sha-256
EOF
Перезагрузим postgresql после правок
systemctl reload postgresql

2.3 Проверка подключения
Теперь проверим, что zabbix может подключаться к БД по tcp. P.s.: так как мы уже использовали переменные, ничего вводить не нужно (вы же делаете все в одной сессии?).
PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME} -c "SELECT version();"

Если команда отработала без ошибок и вывела версию postgresql - все идеально, база готова.
Установка Zabbix
3. Установка Zabbix 7.0, nginx и импорт схемы БД
Главная задача - установить zabbix и nginx, не допустив установки apache, который часто тянется как зависимость и занимает 80-ый порт. Мы будем использовать флаг --no-install-recommends и явно укажем нужные php-модули.
Установка zabbix и nginx:
apt install --no-install-recommends -y zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 nginx php-fpm php-pgsql php-gd php-xml php-mbstring php-bcmath php-curl php-ldap fping
3.1 Импорт схемы базы данных
Импорт схемы базы данных (по очереди)
1) Структура базы
zcat /usr/share/zabbix-server-pgsql/schema.sql.gz | PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME}
2) Картинки и иконки
zcat /usr/share/zabbix-server-pgsql/images.sql.gz | PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME}
3) Стартовые данные (админ, настройки итд)
zcat /usr/share/zabbix-server-pgsql/data.sql.gz | PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME}
Это займет 10-20 сек.

3.2 Настройка конфигурации zabbix server
Укажем серверу, как подключаться к postgresql (аналогично, для Вашего удобства и быстроты, я упаковал в одну команду с помощью sed):
ZBX_CONF=/etc/zabbix/zabbix_server.conf
sed -i 's/^# DBHost=.*/DBHost=127.0.0.1/' $ZBX_CONF
sed -i 's/^DBName=.*/DBName=${ZBX_DB_NAME}/' $ZBX_CONF
sed -i 's/^DBUser=.*/DBUser=${ZBX_DB_USER}/' $ZBX_CONF
sed -i "s/^# DBPassword=.*/DBPassword=${ZBX_DB_PASSWORD}/" $ZBX_CONF
sed -i 's/^# DBPort=.*/DBPort=5432/' $ZBX_CONF

3.3 Настройка php-fpm
Зададим таймзону и лимиты, чтобы веб-интерфейс не упал при генерации графиков:
PHP_CONF=/etc/php/8.2/fpm/conf.d/99-zabbix.ini
cat > $PHP_CONF <<EOF
date.timezone = Europe/Moscow
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
max_execution_time = 300
max_input_time = 300
EOF
Перезапустим php
systemctl restart php8.2-fpm

3.4 Настройка nginx
vim /etc/nginx/conf.d/zabbix.conf
server {
listen 80;
server_name _;
root /usr/share/zabbix;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}

Удаляем дефолтный сайт, чтобы он не занимал 80 порт
rm -f /etc/nginx/sites-enabled/default
Переносим наш конфиг из conf.d в sites-available
mv /etc/nginx/conf.d/zabbix.conf /etc/nginx/sites-available/zabbix
Жестко очищаем все текущие включения (удаляем дефолтные сайты)
rm -f /etc/nginx/sites-enabled/*
rm -f /etc/nginx/conf.d/*.conf
Создаем символическую ссылку для нашего конфига
ln -s /etc/nginx/sites-available/zabbix /etc/nginx/sites-enabled/zabbix

Проверяем синтаксис (должно быть ok) и перезапускаем nginx
nginx -t
systemctl restart nginx

3.5 Запуск всех сервисов
Включаем автозагрузку и стартуем:
systemctl enable --now zabbix-server zabbix-agent2 nginx php8.2-fpm

Так как мы уже импортировали схему базы данных через консоль, но еще не создали файл конфигурации для самого веб-интерфейса, zabbix поймет, что база есть, но веб-морда не настроена, и автоматически перенаправит нас на страницу мастера настройки (/setup.php).

3.6 Настройки веб-интерфейса
Переключим на русский язык
Переходим далее.

Опа, а один пакет с предупреждением, нужно исправить.

Доустановим отсутствующий пакет (я его уже добавил в команду при установка всего php, у вас не должно быть этой ошибки). Но если все же есть, то вот команда:
apt install -y php-curl
и перезапустить php
systemctl restart php8.2-fpm

Идем дальше.

Тут немного притормозим.
Ну с типом я думаю итак понятно базы данных. Хост указываем localhost, если база расположена на том же сервере, где и веб-интерфейс (можно разбить на три сервера: 1) сервер базы данных, 2) сервер zabbix, 3) сервер веб-интерфейса zabbix).
Порт если не меняли, то тоже стандартный. Имя базы данных, тут уже вписываем свое.
Схему базы данных - оставьте пустым.
Это поле нужно только в том случае, если вы при создании базы данных вручную создавали отдельную схему PostgreSQL (не public). Мы импортировали всю схему в стандартную public, поэтому здесь ничего писать не нужно.
Хранение учетных данных - «Простой текст»
Простой текст - пароль будет записан в файл /etc/zabbix/web/zabbix.conf.php. Это стандартный вариант. HashiCorp Vault / CyberArk Vault - это для серьезных enterprise-сред, где пароли хранятся во внешнем секрет-менеджере и подтягиваются оттуда. У нас такого нет, поэтому не трогаем.
TLS шифрование базы данных - снимаем галку
База данных стоит на этом же сервере (127.0.0.1), трафик не покидает хост, а серверные TLS-сертификаты для postgresql мы не выпускали. Если галочку оставить, веб-интерфейс попытается подключиться по SSL и, скорее всего, упадет с ошибкой соединения. TLS до базы включаем тогда, когда БД вынесена на отдельный сервер и едет по сети. Тогда уже настраиваем сертификаты и на postgresql, и на zabbix.
Итого:
| Поле | Значение |
|---|---|
| Тип базы данныхy | PostgreSQL |
| Хост базы данных | localhost (или 127.0.0.1) |
| Порт базы данных | 5432 (или свой) |
| Имя базы данных | Пишем свое имя |
| Схема базы данных | (пусто) |
| Хранение учетных данных | Простой текст |
| Пользователь | Ваш пользователь |
| Пароль | Ваш пароль от БД |
| TLS шифрование | без галочки |
Идем дальше. Меняем тему по вкусу, вписываем имя сервера.

Предварительный обзор инсталляции

Но тут меня ждала оказия(

Я предположил, что проблема с правами, возможно у веб-сервера нет прав на запись в /etc/zabbix. Возможно из-за работы root. Скачаем конфиг вручную и закинем на сервер.

Перекинем на сервер
scp ~/Загрузки/zabbix.conf.php superuser@192.168.31.81:/tmp

так как мы все еще под рутом, перенес конфиг в /etc/zabbix
cp /tmp/zabbix.conf.php /etc/zabbix/
Пройдемся правосудием и порядком, назначим права:
chown www-data:www-data /etc/zabbix/zabbix.conf.php
chmod 640 /etc/zabbix/zabbix.conf.php
Возвращаемся в браузер и обновляем страницу.

Ага, ничего страшного, перезайдем. Нажимаем вход в систему.

Какой логин и пароль? Согласно документации:
Логин: Admin
Пароль: zabbix


Быстро пробегаемся по всем пунктам.


После кнопки финиш, мы попадаем в сам zabbix интерфейс.

Ага, снова неладное) Zabbix сервер запущен - нет.
![]()
Где-то косяк в конфигах, так как zabbix запущен.
Посмотрим конфиг zabbix.conf.php который мы скачали

Нет, проблема не в нем. Давайте посмотрим zabbix_server.conf, сразу пройдемся регуляркой для быстроты поиска.
cat /etc/zabbix/zabbix_server.conf | grep -nE "(Host|Name|User|Password|Port)"

Ага, вот и проблема. Сама переменная ${ZBX_DB_NAME} вписалась вместо значения.

Откроем конфиг и исправим переменную на значения
vim /etc/zabbix/zabbix_server.conf
сохраняем конфиг, перезапускаем zabbix и ждем 5 секунд, смотрим службу.
systemctl restart zabbix-server.service && sleep 5
systemctl status zabbix-server.service

Как видим, zabbix поднялся. До этого в службе был всего 1 процесс, забыл сделать скриншот. Сейчас как видно процессов очень много. Обычно я всегда смотрю статус служб, но в этот раз повелся на интерфейс и что обычно, всегда все работает)

Отлично, все поднялось и работает! Поздравляю, если вы дочитали до этих слов, значит вы подняли с нуля zabbix-сервер, настроили базу данных. Развернуть zabbix - это пол дела. Ягодки Вас ждут впереди) Увидимся в следующих частях цикла)