🚀 Запуск Zabbix 7.0 с использованием Docker Compose и Traefik

Эта инструкция поможет запустить систему мониторинга Zabbix с базой данных PostgreSQL и веб-интерфейсом на базе Nginx. Конфигурация описана в docker-compose и предполагает интеграцию с прокси-сервером Traefik.


Создайте файл docker-compose.yml с содержимым, представленным ниже:

version: '3.3'
services:

  # Контейнер с базой данных PostgreSQL для Zabbix
  zabbix-postgres:
    container_name: zabbix-postgres
    image: postgres:14
    expose:
      - "5432"
    volumes:
      - postgres-zabbix:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -h 127.0.0.1"]
      interval: 10s
      timeout: 5s
      retries: 3
    restart: unless-stopped

  # Контейнер с сервером Zabbix
  zabbix-server:
    container_name: zabbix-server
    image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
    environment:
      DB_SERVER_HOST: zabbix-postgres
      DB_SERVER_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      ZBX_VALUECACHESIZE: 64M
      ZBX_CACHESIZE: 128M
      ZBX_TRENDCACHESIZE: 128M
    ports:
      - "10051:10051"
    restart: unless-stopped
    depends_on:
      - zabbix-postgres

  # Веб-интерфейс Zabbix на базе Nginx
  zabbix-web:
    container_name: zabbix-web
    image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
    environment:
      DB_SERVER_HOST: zabbix-postgres
      DB_SERVER_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      ZBX_SERVER_HOST: zabbix-server
      ZBX_SERVER_PORT: 10051
      PHP_TZ: Europe/Samara
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/"]
      interval: 10s
      timeout: 5s
      retries: 3
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.zabbix-web_https.redirectscheme.scheme=https
      - traefik.http.routers.zabbix-web.entrypoints=web
      - traefik.http.routers.zabbix-web.middlewares=zabbix-web_https@docker
      - traefik.http.routers.zabbix-web.rule=Host(`zabbix.${DOMAIN}`)
      - traefik.http.routers.zabbix-web_https.entrypoints=websecure
      - traefik.http.routers.zabbix-web_https.rule=Host(`zabbix.${DOMAIN}`)
      - traefik.http.routers.zabbix-web_https.tls=true
      - traefik.http.routers.zabbix-web_https.tls.certresolver=le
      - traefik.http.services.zabbix-web.loadbalancer.server.port=8080
    restart: unless-stopped
    depends_on:
      - zabbix-postgres

volumes:
  postgres-zabbix: 

networks:
  default:
    external:
      name: traefik_network

Описание контейнеров и их ролей

  1. zabbix-postgres — Контейнер с базой данных PostgreSQL для хранения данных Zabbix.

    • Image: postgres:14
    • Переменные среды:
      • POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD: Название базы данных, пользователь и пароль, определённые в .env файле.
    • Healthcheck: Проверяет доступность базы данных каждые 10 секунд, с тремя попытками повторного запроса.
  2. zabbix-server — Контейнер с сервером Zabbix, который связывается с базой данных.

    • Image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
    • Переменные среды:
      • DB_SERVER_HOST, DB_SERVER_PORT: Адрес и порт для подключения к базе данных PostgreSQL.
      • ZBX_VALUECACHESIZE, ZBX_CACHESIZE, ZBX_TRENDCACHESIZE: Настройки кэша для Zabbix.
    • Порты: Порт 10051 для внешнего доступа к Zabbix Server.
  3. zabbix-web — Веб-интерфейс Zabbix с использованием Nginx.

    • Image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
    • Переменные среды:
      • ZBX_SERVER_HOST, ZBX_SERVER_PORT: Адрес и порт для подключения к серверу Zabbix.
      • PHP_TZ: Задаёт временную зону для веб-интерфейса.
    • Healthcheck: Проверяет доступность веб-интерфейса по адресу http://localhost:8080/.
    • Traefik Labels: Настройки маршрутизации для прокси-сервера Traefik. Переадресовывает HTTP-запросы на HTTPS и использует сертификацию Let’s Encrypt (le).

Для удобства настройки создайте файл .env и определите в нём значения для переменных, таких как:

POSTGRES_DB=zabbix
POSTGRES_USER=zabbix
POSTGRES_PASSWORD=your-secure-password
DOMAIN=your-domain.com

Запуск и управление контейнерами

Запустите контейнеры командой:

docker-compose -p zabbix up -d

Чтобы проверить статус всех контейнеров, используйте:

docker-compose ps

✨ Система мониторинга Zabbix готова к использованию! Теперь у вас есть веб-интерфейс, доступный по домену zabbix.your-domain.com.