Установка Zabbix 8.0 LTS на Ubuntu Server 26 (Nginx + PostgreSQL)

Установка Zabbix 8 начинается с выбора одного из множества доступных вариантов. Можно ставить на deb-based или rpm-based linux, можно с использованием фронта на apache или nginx. Можно с использованием СУБД PostgreSQL или каких-нибудь других. При любом раскладе результат должен быть один, правильный и долгосрочный. В данной статье будет рассматриваться установка Zabbix 8.0 LTS + Nginx + PostgreSQL на Ubuntu Server 26.
Почему Ubuntu? Потому что Ubuntu - это мейнстрим, для неё куча статей в интернете, 99% проблем разобраны на атомарном уровне. Она легко ставится, у неё большое комьюнити. Она является стандартом современных линуксов. Тот же WSL в Windows - это безбожно оскаплённая, но всё же Ubuntu (мы не рассматриваем Windows в этой статье и тем более WSL, это лишь пример). Всё вышеперечисленное делает Ubuntu идеальным кандидатом для обучения. Поэтому рассматривать установку Zabbix мы будем исключительно на базе актуальной версии Ubuntu.


Почему Nginx? Потому что, как ни крути, он тоже является стандартом. Если развиваться дальше, в различные готовые решения типа разношёрстных образов Docker, они в большинстве своём так же базируются вокруг Nginx. Развиваясь дальше в девопса(псиню), вы доберётесь до Kubernetes, там, в зависимости от того, насколько старый кластер, вы наткнётесь на Nginx Ingress или же, если новый, то Nginx Gateway. Да, возможно, там будет и какая-то экзотика типа k3s+traefik, но в общем и целом Nginx такой же индустриальный стандарт.
Почему PostgreSQL? PostgreSQL лучше держит нагрузку, подобную той, что даёт Zabbix на больших объёмах. Поддерживает TimescaleDB, параллельные запросы. PostgreSQL идеальный выбор для Zabbix, несмотря на то что Zabbix поддерживает ряд других СУБД.
Почему пакеты, а не Docker? Потому что наша цель изучить процесс установки заббикса, а не Docker. И не поиск готового compose или написание своего и это вот всё. Плюс заббикс работающий очень требователен к ресурсам и любой оверхед, хоть и не значительно, но отъедающий ресурсы, если вы планируете высоконагруженную систему мониторинга, не очень желателен. Хотя мы, конечно же, рассмотрим развёртывание заббикса в Docker в будущем
Полезные ссылки


Подготовка и требования
На данный момент процесс описывается на основе PRE-RELEASE, если после релиза что-то в процессе установки изменится, статья будет актуализирована.
Используемые параметры ВМ:
4 vCPU
4GB RAM
10GB SSD
Для тестов этих параметров хватит за глаза, для маленького начального прода на 10-100 хостов мониторящихся шаблоном Linux by Zabbix Agent 2, я бы накинул оперативы +4GB и диска в зависимости от того сколько планируется хранить данные.
Скачиваем пакет Zabbix Release
Переходим в /tmp и скачиваем пакет, который добавит нам в систему репозитории Zabbix 8й версии, и проверяем, что он скачался:
cd /tmp
wget https://repo.zabbix.com/zabbix/8.0/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_8.0+ubuntu26.04_all.deb

Пакет Zabbix Release
Этот пакет не устанавливает сам Zabbix, единственная его цель добавить нам в папку /etc/apt/sources.list.d/ репозитории Zabbix выбранной нами версии.
Устанавливаем скачанный пакет
sudo apt install ./zabbix-release_latest_8.0+ubuntu26.04_all.debДля того чтобы APT понял, что мы хотим установить не какой-то пакет из репозитория, а именно скачанный локально пакет, перед названием файла обязательно указываем ./ . В противном случае APT полезет искать в репозиториях пакет, 1в1 называющийся как имя файла, которое мы ему передаём.
Конструкция ./ означает "здесь и сейчас, в той папке, в которой я нахожусь, использовать файл zabbix-release_latest_8.0+ubuntu26.04_all.deb". Консоль конструкцию ./ интерпретирует аналогично результату команды pwd, которая возвращает полный путь до папки, в которой в момент её применения находится текущая сессия.
Обновляем APT кеш
sudo apt update
Устанавливаем пакеты
sudo apt install postgresql zabbix-server-pgsql zabbix-frontend-php php8.5-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

Создаём пользователя
sudo -u postgres createuser --pwprompt zabbixДанная команда с помощью sudo -u postgres от имени пользователя postgres создаст в PostgreSQL пользователя с логином zabbix и попросит интерактивно ввести пароль для него. Ввиду частых ошибок на данном этапе стоит отметить, что это не пользователь zabbix, с помощью которого вы будете авторизовываться в веб-интерфейсе. Это пользователь PostgreSQL, с помощью которого zabbix-server и zabbix-frontend будут авторизовываться в PostgreSQL.

Создаём базу данных
sudo -u postgres createdb -O zabbix zabbixДанная команда, аналогично вышеуказанной, от пользователя postgres выполнит createdb -O zabbix zabbix, тем самым создав базу данных с именем zabbix, владельцем которой будет пользователь с именем zabbix
Импортируем начальную схему Zabbix в PostgreSQL
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbixКогда мы устанавливаем пакет zabbix-sql-scripts, он не ставит и не запускает нам какой-либо сервис, цель этого пакета скачать в папку /usr/share/zabbix/ набор различных SQL скриптов. Один из этих SQL скриптов мы как раз и используем, чтобы импортировать в PostgreSQL первичные данные, необходимые для работы Zabbix.
Множество записей INSERT, CREATE, ALTER и в конце мы ожидаем COMMIT

Настраиваем подключение Zabbix Server к PostgreSQL
Указываем в файле /etc/zabbix/zabbix_server.conf пароль от пользователя PostgreSQL, созданного ранее
nano /etc/zabbix/zabbix_server.conf

Находим строку DBPassword= . Можно воспользоваться комбинацией клавиш Ctrl+W.
Перезапускаем все сервисы
systemctl restart zabbix-server zabbix-agent2 nginx php8.5-fpm

Именно так выглядит работающий демон Zabbix Server, вы должны увидеть кучу различных алертеров, синкеров, воркеров и прочего. Если пишет просто статус active (running), но нет кучи подпроцессов, значит, где-то допущена ошибка и нужно смотреть логи в /var/log/zabbix/zabbix_server.log
Включаем для них же автозапуск
systemctl enable zabbix-server zabbix-agent2 nginx php8.5-fpm

Настраиваем доступ в веб-интерфейс
Настройки веб сервера можно отредактировать через симлинк в /etc/zabbix/nginx.conf
nano /etc/zabbix/nginx.conf

Для самого минимального варианта нам достаточно раскомментировать первые 2 строки и заменить example.com в server_name на default (мы же предполагаем, что ничего, кроме Zabbix, на этом хосте не крутится).
default в конфиге nginx определяют server как стандартный для всех запросов, для которых не задан отдельный server с уникальным именем.

После внесения правок в файл сохраняем его через Ctrl+O и закрываем через Ctrl+X.
Применяем правки:
sudo nginx -t # проверяем, что не допустили каких-то явных опечаток
sudo systemctl restart nginx # перезапускаем nginx
systemctl status nginx # проверяем, что nginx запустился

В описанном варианте с 8080 и default, при ip сервера 192.168.23.94, фронт заббикса будет доступен по адресу http://192.168.23.94:8080

Если же у вас есть DNS сервер, где вы можете настроить A запись, то вместо default можно указать DNS имя, которое вам нужно, и порт заменить на 80.

В моём случае DNS А-запись zabbix.adminguide.tlp будет указывать на IP 192.168.23.94

Настраиваем фронт Zabbix
Выбор языка
Дефолтный язык выбираем English, нажимаем Next
Другие локали мы даже не будем рассматривать, потому что, если вы будете задавать инженерам мониторинга вопросы, опираясь на терминологию русского языка, в лучшем случае они не поймут, о чём вообще идёт речь.
Проверяем соответствие требованиям

Если вы ставите фронт Zabbix не на какой-то самый дешёвый\бесплатный вэбхостинг, а хотябы на захудалую вмку, у вас все пункты будут OK. Если же у вас что-то не ОК, вам придётся разбираться, как это привести в норму и возможно ли это вообще.
Затем настраиваем подключение фронта к БД
Важно отметить, что этот этап настраивает исключительно подключение вэб интерфейса Zabbix к PostgreSQL. Это никак не влияет и не имеет отношения к подключению Zabbix Server к PostgreSQL.
Так как мы в самом начале установили и все пакеты Zabbix и PostgreSQL на один хост, мы оставляем Database host со значением по умолчанию (localhost). Если бы PostgreSQL был установлен где-то на соседней вмке, нам необходимо было бы указать IP адрес той вмки вместо localhost
Database port оставляем 0. В данном конкретном случае 0 - означает "использовать порт по умолчанию". PostgreSQL по умолчанию использует порт 5432, его фронт и будет использовать, если мы оставим 0.
Database name - если до этого этапа вы дошли по инструкции этой или официальной, у вас база так и называется zabbix
Database user - аналогично zabbix
Database password - указываем тот же, что мы указывали при создании пользователя. Его же мы ранее указывали в zabbix_server.conf
И нажимаем Next step
Если что-то было указано неправильно, появится сообщение Cannot connect to database . Если же всё ок, нас перекинет на следующий экран настройки

Задаём имя сервера, часовой пояс, тему
Всё это можно изменить в будущем

Далее проверяем саммари
И нажимаем Next step

Настройка фронта завершена
Нажимаем Finish

Авторизуемся
Логин пароль по умолчанию: Admin \ zabbix . В связи с тем, что это важный момент при первом знакомстве с Zabbix, отдельно отмечу, что Admin именно с большой буквы, zabbix именно с маленькой

Итак, добро пожаловать в святая святых - админку Zabbix 8.0

Все настройки фронта можно найти в файле /etc/zabbix/web/zabbix.conf.php
Шпаргалка: установка Zabbix 8.0 LTS одним списком
Все команды из статьи по порядку. Пригодится, если ставите заббикс уже во второй раз и подробности не нужны. Обратите внимание, что на шагах 8 и 9 придётся отвлечься на редактирование конфигов, вслепую весь блок целиком не выполнится.
# 1. Скачиваем пакет, который добавит в систему репозитории Zabbix 8.0
cd /tmp
wget https://repo.zabbix.com/zabbix/8.0/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_8.0+ubuntu26.04_all.deb
# 2. Устанавливаем скачанный пакет, ./ перед именем файла обязательно
sudo apt install ./zabbix-release_latest_8.0+ubuntu26.04_all.deb
# 3. Обновляем кеш APT, чтобы он увидел новые репозитории
sudo apt update
# 4. Ставим PostgreSQL, Zabbix Server, фронт, конфиг для Nginx и агент
sudo apt install postgresql zabbix-server-pgsql zabbix-frontend-php php8.5-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2
# 5. Создаём пользователя PostgreSQL, пароль запросит интерактивно
sudo -u postgres createuser --pwprompt zabbix
# 6. Создаём базу данных zabbix, владелец - пользователь zabbix
sudo -u postgres createdb -O zabbix zabbix
# 7. Импортируем начальную схему, в конце ожидаем COMMIT
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
# 8. Прописываем в DBPassword= пароль от пользователя PostgreSQL из шага 5
sudo nano /etc/zabbix/zabbix_server.conf
# 9. Раскомментируем первые 2 строки, меняем example.com на default, проверяем синтаксис
sudo nano /etc/zabbix/nginx.conf
sudo nginx -t
# 10. Перезапускаем сервисы и ставим их в автозапуск
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.5-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.5-fpm
sudo systemctl status zabbix-server nginx
Дальше идём в браузер на IP сервера с портом 8080, проходим визард настройки фронта и логинимся под Admin / zabbix.
Полезные пути и значения по умолчанию
| Конфиг Zabbix Server | /etc/zabbix/zabbix_server.conf |
| Конфиг Nginx для Zabbix | /etc/zabbix/nginx.conf |
| Настройки веб-интерфейса, заданные визардом | /etc/zabbix/web/zabbix.conf.php |
| Лог Zabbix Server | /var/log/zabbix/zabbix_server.log |
| SQL-скрипты Zabbix | /usr/share/zabbix/sql-scripts/ |
| Порт PostgreSQL | 5432 |
| Логин и пароль веб-интерфейса | Admin / zabbix |
Конфигуратор для установки Zabbix из пакетов под огромное количество ситуаций можно найти по этой ссылке
FAQ по установке Zabbix 8.0
Zabbix Server в статусе active (running), но мониторинг не работает
У живого заббикс сервера в systemctl status видно кучу подпроцессов: алертеры, синкеры, поллеры, воркеры и прочее. Если статус active (running), а подпроцессов нет, значит, сервер стартовал и сразу упёрся в ошибку. Смотрим /var/log/zabbix/zabbix_server.log, в большинстве случаев там будет проблема с подключением к базе: не тот пароль в DBPassword или не импортированная схема.
Какой логин и пароль у Zabbix 8 по умолчанию
Admin / zabbix. Admin именно с большой буквы, zabbix именно с маленькой. Пароль стоит сменить сразу после первого входа, в настройках пользователя.
На каком порту открывается веб-интерфейс Zabbix
Зависит от того, что вы раскомментировали в /etc/zabbix/nginx.conf. В варианте из статьи это listen 8080 и server_name default, то есть фронт доступен по http://IP-сервера:8080. Если есть DNS сервер, меняем listen на 80, а в server_name пишем своё DNS имя, и заббикс открывается по заданному имени, например http://zabbix.mydev.lan.
Чем пользователь zabbix в PostgreSQL отличается от Admin в веб-интерфейсе
Это две никак не связанные сущности, и путают их чаще всего остального. Пользователь zabbix - это учётка внутри PostgreSQL, которой zabbix-server и фронт подключаются к базе данных. Её пароль лежит в zabbix_server.conf и в zabbix.conf.php, руками её нигде вводить не нужно. Admin - это учётка внутри самого Zabbix, ей вы логинитесь в браузере, и к PostgreSQL она отношения не имеет.
При настройке фронта появляется Cannot connect to database
Фронт не смог подключиться к PostgreSQL с теми данными, которые вы ввели. Проверяем по порядку: Database name - zabbix, Database user - zabbix, Database password - тот же, что задавали в createuser --pwprompt и прописывали в zabbix_server.conf. Database host - localhost, Database port - 0, что означает порт по умолчанию, то есть 5432.
Обязательно ли ставить PostgreSQL на тот же сервер, что и Zabbix
Нет. В статье всё поставлено на один хост, поэтому Database host остаётся localhost. Если база живёт на отдельной вмке, её IP нужно указать в двух местах: в визарде фронта и в параметре DBHost в zabbix_server.conf. Сам PostgreSQL при этом должен слушать не только localhost и пускать к себе заббикс по сети.
Можно ли поставить Zabbix 8 на MySQL или MariaDB
Можно, Zabbix поддерживает несколько СУБД, но набор пакетов и SQL-скрипт для импорта схемы будут другими: вместо zabbix-server-pgsql ставится zabbix-server-mysql, вместо php8.5-pgsql - php8.5-mysql. Для мониторинга под нагрузкой мы всё же выбираем PostgreSQL, он лучше держит профиль нагрузки, который даёт Zabbix, и умеет TimescaleDB.
Зачем перед именем файла нужно ./ в apt install
Конструкция ./ говорит APT, что установить нужно файл из текущей папки. Без неё APT пойдёт искать в подключённых репозиториях пакет с именем zabbix-release_latest_8.0+ubuntu26.04_all.deb, не найдёт его и вернёт ошибку.
Ошибся в визарде настройки фронта, как пройти его заново
Все параметры, которые вы задали в визарде, складываются в файл /etc/zabbix/web/zabbix.conf.php. Его можно поправить руками, а можно просто удалить, и тогда при следующем открытии веб-интерфейса визард запустится с самого начала.