Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить Zabbix на сервер

Пошаговая инструкция для самостоятельной установки. Установим Zabbix 7.0 LTS через официальный Docker Compose, закроем базу данных, включим HTTPS и настроим первую проверку с уведомлением об ошибке.

Первый узел мониторинга передаёт показания серверу, а заданный порог включает сигнал тревоги

Что подготовить и как читать инструкцию #

Zabbix хранит показатели и события в PostgreSQL, сервер выполняет проверки, а веб-интерфейс показывает графики и проблемы. Установим эти компоненты на одной машине. Дополнительно запустим Agent 2 для первой активной проверки: она помогает убедиться, что сбор данных работает. Затем подключим сайт и доставку уведомлений.

Используем Ubuntu 26.04 LTS как Docker-хост. Официальная документация поддерживает установку Zabbix в контейнерах; это позволяет не подменять пакеты для старой Ubuntu пакетами на новой ОС. Выбрана стабильная LTS-ветка 7.0.31. Наличие документации 8.0 не означает, что версия уже пригодна для такой установки: здесь образы development не используются.

Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.

Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.

Настройка внешнего доступа использует обратный прокси Nginx и Certbot для Nginx. Приложение остаётся доступным на локальном порту; снаружи открыт его HTTPS-домен.

Дополнительные официальные источники: Официальный образ Agent 2 и переменные, Настройка активных проверок агента, Почтовые уведомления, Замена портов в Compose, Docker Engine на Ubuntu.

Шаг 1. Установите инструменты #

Git скачивает официальный комплект, Python применяет настройки файлов, openssl создаёт пароль базы.

Установите инструменты
sudo apt update
sudo apt install -y git python3 openssl curl

apt завершился без ошибок.

Шаг 2. Скачайте закреплённый комплект Zabbix #

Получим ветку 7.0 и переключим её на конкретный коммит. Все дальнейшие команды выполняются из /opt/zabbix.

Скачайте закреплённый комплект Zabbix
sudo install -d -o "$USER" -g "$(id -gn)" /opt/zabbix
git clone --branch 7.0 --single-branch https://github.com/zabbix/zabbix-docker.git /opt/zabbix
cd /opt/zabbix
git checkout --detach 32578dac48f7de44d250a2cea0117f26ffa8fbe0

Текущий каталог верный; checkout выбранной ревизии успешен.

Шаг 3. Закрепите версии образов #

Скрипт меняет только .env: выбирает Zabbix 7.0.31/PostgreSQL 16.15 и два Compose-файла. Проверка внутри скрипта остановит его, если ожидаемые параметры не найдены.

Закрепите версии образов
umask 077
python3 - <<'PYCONF'
from pathlib import Path
import re
p = Path('.env')
s = p.read_text()
for key, value in {'ZBX_IMAGE_TAG': 'alpine-7.0.31',
                   'POSTGRESQL_IMAGE_TAG': '16.15-alpine'}.items():
    s, n = re.subn(r'^' + key + r'=.*$', key + '=' + value, s, flags=re.M)
    assert n == 1, key
s += '\nCOMPOSE_PROJECT_NAME=zabbix\nCOMPOSE_FILE=compose_pgsql.yaml:compose.local.yaml\n'
p.write_text(s)
PYCONF

Версии записаны; нет ошибки assert для параметров .env.

Шаг 4. Создайте реквизиты PostgreSQL #

Compose передаёт базе секреты файлами из env_vars. Каталог закрыт для посторонних, файлы доступны контейнеру по чтению. Это не пароль пользователя веб-панели.

Создайте реквизиты PostgreSQL
printf 'zabbix\n' > env_vars/.POSTGRES_USER
openssl rand -hex 32 > env_vars/.POSTGRES_PASSWORD
chmod 700 env_vars
chmod 444 env_vars/.POSTGRES_USER env_vars/.POSTGRES_PASSWORD
chmod 600 .env

Оба файла секретов созданы, пароль не пуст; .env защищён.

Шаг 5. Подготовьте настройки Zabbix server #

Создадим каталог экспорта с владельцем контейнера и файл настроек server. Дополнительные Java/SNMP-функции в этом первом сценарии отключены.

Подготовьте настройки Zabbix server
sudo install -d -o 1997 -g 0 zbx_env/var/lib/zabbix/export
cat > env_vars/.env_srv_override <<'EOF'
ZBX_JAVAGATEWAY_ENABLE=false
ZBX_STARTJAVAPOLLERS=0
ZBX_ENABLE_SNMP_TRAPS=false
EOF

Каталог export создан с UID 1997, серверный override сохранён.

Шаг 6. Укажите часовой пояс веб-интерфейса #

Отдельный override задаёт PHP_TZ для отображения времени. Используйте свой часовой пояс, если Europe/Moscow вам не подходит.

Укажите часовой пояс веб-интерфейса
cat > env_vars/.env_web_override <<'EOF'
PHP_TZ=Europe/Moscow
ZBX_SERVER_NAME=Мониторинг компании
EOF

Веб-настройка сохранена отдельно от server.

Шаг 7. Сохраните локальный Compose override #

Откройте nano compose.local.yaml и вставьте YAML. !override заменяет прежние порты, привязывая их к localhost. Agent2 в примере наблюдает контейнер monitoring-container; для наблюдения физической ОС позже нужен её отдельный агент.

Сохраните локальный Compose override
services:
  zabbix-server:
    ports: !override
      - target: 10051
        published: "10051"
        host_ip: 127.0.0.1
        protocol: tcp
  zabbix-web-nginx-pgsql:
    ports: !override
      - target: 8080
        published: "8080"
        host_ip: 127.0.0.1
        protocol: tcp
  zabbix-agent2:
    image: zabbix/zabbix-agent2:alpine-7.0.31
    init: true
    restart: unless-stopped
    environment:
      ZBX_SERVER_HOST: zabbix-server
      ZBX_ACTIVESERVERS: zabbix-server:10051
      ZBX_ACTIVE_ALLOW: "true"
      ZBX_PASSIVE_ALLOW: "false"
      ZBX_HOSTNAME: monitoring-container
    networks:
      - backend

Файл сохранён с правильными отступами; порты не публикуются на внешний IP.

Шаг 8. Проверьте конфигурацию #

Compose использует два файла, заданных в .env. Если он не понимает !override, обновите Compose до поддерживаемой версии по общей подготовке.

Проверьте конфигурацию
cd /opt/zabbix
docker compose config --quiet

config --quiet завершился без ошибки.

Шаг 9. Скачайте контейнеры #

Загрузим согласованные версии компонентов. Пользовательские данные пока отсутствуют.

Скачайте контейнеры
docker compose pull

pull завершился успешно.

Шаг 10. Запустите Zabbix #

Первый запуск выполняет подготовку базы. Не прерывайте его повторным запуском другой версии.

Запустите Zabbix
docker compose up -d

Контейнеры созданы.

Шаг 11. Дождитесь подготовки базы и сайта #

Проверим в том числе одноразовый server-db-init; успешное завершение init нормально. Постоянные server и web должны работать.

Дождитесь подготовки базы и сайта
docker compose ps -a
docker compose logs --tail=100 server-db-init zabbix-server
curl -fsS http://127.0.0.1:8080/ping

Нет ошибки инициализации, /ping отвечает.

Шаг 12. Откройте первый вход через SSH-туннель #

Следующую команду выполняйте на своём компьютере, заменив user/SERVER_IP учётной записью и IP сервера. Оставьте терминал открытым; в браузере откройте http://127.0.0.1:18080. Порт веб-панели не нужно открывать в Интернет для этого входа.

Откройте первый вход через SSH-туннель
# На своём компьютере: замените user и SERVER_IP
ssh -L 18080:127.0.0.1:8080 user@SERVER_IP

Страница Zabbix открывается через локальный 18080.

Шаг 13. Смените первоначальный пароль #

Войдите начальной записью Admin с паролем zabbix и сразу смените его в профиле на уникальный. Для ежедневного наблюдения позднее создайте обычную запись.

Вход с новым паролем работает; стандартный больше не подходит.

Шаг 14. Сохраните сайт Nginx #

Установите Nginx и Certbot по подготовке Ubuntu, если ещё не установили. Откройте sudo nano /etc/nginx/sites-available/zabbix и вставьте файл ниже. Замените все домены своими. Nginx передаёт приложению домен, адрес клиента и протокол; Upgrade и Connection сохраняют WebSocket. До получения сертификата условие $scheme блокирует обычные HTTP-запросы кодом 403, чтобы вход не происходил без шифрования.

Файл /etc/nginx/sites-available/zabbix
map $http_upgrade $zabbix_connection_upgrade {
    default upgrade;
    "" close;
}

server {
    listen 80;
    server_name monitor.example.org;
    client_max_body_size 100m;
    location / {
        if ($scheme = http) { return 403; }
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $zabbix_connection_upgrade;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_buffering off;
    }
}

Сохраните Ctrl+O, Enter, Ctrl+X. В файле пока нет путей к сертификатам: Nginx сможет проверить его до выпуска HTTPS.

Шаг 15. Подключите сайт и проверьте HTTP #

Ссылка подключает сохранённый сайт. nginx -t проверяет все настройки сервера; && разрешает перечитать их только при успешной проверке. curl проверяет ответ для вашего домена. При ошибке остановитесь, исправьте указанную строку и повторите проверку.

Подключите сайт и проверьте HTTP
sudo ln -sfn /etc/nginx/sites-available/zabbix /etc/nginx/sites-enabled/zabbix
sudo nginx -t && sudo systemctl reload nginx
curl -I http://monitor.example.org/

Ожидается successful от nginx -t и HTTP 403 для обычного запроса: до HTTPS это намеренная блокировка. DNS должен указывать на сервер, TCP 80/443 — быть доступен у провайдера. Ничего не вводите в форму входа по HTTP.

Шаг 16. Получите сертификат и включите HTTPS #

Каждое имя из команды должно указывать на этот сервер. Certbot проверит домены, сам добавит сертификат в сайт Nginx и включит перенаправление HTTP → HTTPS. Укажите свою почту при запросе и подтвердите условия Let’s Encrypt. Это отдельное действие после успешной проверки HTTP.

Получите сертификат и включите HTTPS
sudo /snap/bin/certbot --nginx -d monitor.example.org --redirect

Certbot сообщил об успешной установке. Откройте HTTPS-адрес со своего компьютера: браузер не должен предупреждать о сертификате. Для закрытой панели используйте разрешённый IP. При ошибке исправьте DNS, в том числе AAAA, либо доступ к TCP 80; не повторяйте запросы выпуска подряд.

Шаг 17. Проверьте продление сертификата #

Certbot из snap создаёт службу автоматического продления. Dry-run выполняет пробное продление: настоящие сертификаты не заменяются. Затем проверьте, что таймер планирует следующий запуск. Сохраняйте доступ к TCP 80 для следующих проверок домена.

Проверьте продление сертификата
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'

Пробное продление успешно, у таймера есть следующий запуск. Если тест не прошёл, проверьте /var/log/letsencrypt/letsencrypt.log; сначала исправьте причину. После этого можно создавать учётную запись и приглашать пользователей.

Шаг 18. Добавьте тестовый узел наблюдения #

В интерфейсе создайте host с именем monitoring-container, точно совпадающим с ZBX_HOSTNAME. Назначьте подходящий Linux-шаблон активного Agent2; этот агент обращается к server сам. Дождитесь данных в Latest data.

Появляются свежие значения с правильным host. Метрики относятся контейнеру, не всей ОС физического сервера.

Шаг 19. Проверьте одно уведомление #

Подключите тестовый Media type email по данным SMTP, добавьте свой адрес пользователю и действие для выбранной тестовой проблемы. Проверяйте безопасный тестовый trigger, не выключая рабочий сервер.

В журнале видно отправку и фактическое письмо; после восстановления тестовой проблемы приходит нужное восстановительное уведомление.

Шаг 20. Проверьте журналы и закрытые порты #

Эти команды помогают отделить проблему Agent2, server, базы или HTTPS. Внутренние 8080/10051/5432 не должны слушать внешний интерфейс в выбранной схеме.

Проверьте журналы и закрытые порты
cd /opt/zabbix
docker compose logs --tail=100 zabbix-agent2 zabbix-server postgres-server
sudo ss -ltnp | grep -E ':(8080|10051|5432|10050)\b'
sudo journalctl -u nginx --since '30 minutes ago'

Нет повторных ошибок подключения; внутренние порты локальные.

Шаг 21. Создайте согласованную копию #

Скрипт временно останавливает запись, выгружает базу, сохраняет конфигурацию и возвращает сервисы через trap. Рабочие файлы PostgreSQL в архив не копируются: вместо них используется pg_dump. Перенесите результат в закрытое внешнее хранилище.

Создайте согласованную копию
cd /opt/zabbix
(
  set -eu
  BACKUP="/opt/zabbix-backups/$(date +%Y%m%d-%H%M%S)"
  install -d -m 700 "$BACKUP"
  trap 'docker compose start zabbix-server zabbix-web-nginx-pgsql zabbix-agent2' EXIT
  docker compose stop zabbix-server zabbix-web-nginx-pgsql zabbix-agent2
  docker compose exec -T postgres-server sh -c \
    'pg_dump -U "$(cat /run/secrets/POSTGRES_USER)" -Fc zabbix' > "$BACKUP/zabbix.dump"
  sudo tar --exclude=zbx_env/var/lib/postgresql/data \
    -czf "$BACKUP/files.tar.gz" .env env_vars zbx_env compose*.yaml
  sudo tar -czf "$BACKUP/nginx-tls.tar.gz" /etc/nginx/sites-available/zabbix /etc/letsencrypt
  sudo chmod 600 "$BACKUP"/*
)

В каталоге /opt/zabbix-backups есть дамп, архив и nginx-tls.tar.gz без ошибок.

Шаг 22. Подготовьте файлы на тестовой машине #

Далее работайте только на отдельной машине той же версии с пустой базой. Замените /path/to/restored-backup реальным каталогом копии и восстановите архив. Права env_vars должны позволять контейнеру читать секреты.

Подготовьте файлы на тестовой машине
cd /opt/zabbix
BACKUP=/path/to/restored-backup
sudo tar -xzf "$BACKUP/files.tar.gz" -C /opt/zabbix
sudo chown -R "$USER":"$(id -gn)" env_vars
sudo chown "$USER":"$(id -gn)" .env
chmod 700 env_vars

Файлы и владельцы восстановлены на тестовом сервере.

Шаг 23. Верните дамп базы #

На тестовом сервере запустите PostgreSQL и импортируйте дамп. Не выполняйте pg_restore поверх действующей рабочей базы мониторинга.

Верните дамп базы
docker compose up -d postgres-server
# Дождитесь healthy у postgres-server в docker compose ps
docker compose exec -T postgres-server sh -c \
  'pg_restore -U "$(cat /run/secrets/POSTGRES_USER)" -d zabbix --no-owner --exit-on-error' \
  < "$BACKUP/zabbix.dump"

pg_restore завершился без ошибки.

Шаг 24. Проверьте восстановленный мониторинг #

Запустите комплект на тестовой машине, откройте панель и проверьте host, настройки и исторические значения. Реальную отправку уведомлений в тестовой среде ограничьте.

Настройки внешнего доступа храните вместе с копией приложения: /etc/nginx/sites-available/zabbix и /etc/letsencrypt содержат сайт и сертификаты с закрытыми ключами. Архивируйте их с sudo в закрытое хранилище. После восстановления подключите сайт через sites-enabled, выполните sudo nginx -t, затем перечитайте Nginx. Для ошибки 502 сначала проверьте локальное приложение и /var/log/nginx/error.log; для сертификата — /var/log/letsencrypt/letsencrypt.log и таймер продления.

Проверьте восстановленный мониторинг
docker compose up -d
docker compose ps -a

Настройки и данные вернулись; комплект работает без ошибок.

Обсудить установку и настройку

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаZabbix

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.