Как установить Zabbix через Docker Compose

  • Михаил
  • 12 мин. на прочтение
  • 164
  • 07 Aug 2022
  • 07 Aug 2022

В данной статье мы будем с вами поднимать последнюю версию Zabbix (а сейчас 4.4) используя для этого Docker Compose. Рассказывать о том, что такое Docker и с чем его едят — я не буду, так как информации об этом на просторах интернета хватает. Скажу только то, что скорость запуска Zabbix через docker в разы быстрее нежели используя виртуальную машину с тем же Centos или Ubuntu.

У меня был поднят Zabbix на Centos 7 который крутился на Hyper-V. Но скорость загрузки сервера мне не нравилось. Только представьте, сервер с заббиксом запускался около 2х минут. В Hyper-V я нажимал «Запустить сервер» и лишь через 2 минуты я видел окно входа в админку.

P.S. Да, я понимаю, что сервера обычно не выключаются и работают месяцами, но сам факт, если бы он упал и мне нужно было его перезапускать — мне бы понадобилось около 2х минут.

Попробовав Докер, я понял, что (не считая первого запуска), мой заббикс запускался за 10 секунд. Вот я пишу команду на запуск сервера и через 10 секунд я вижу окно входа в админку. Магия, не так ли.

Хватит слов и перейдем к делу.

И так, мы имеем сервер на котором установлен Docker + Docker Compose. У меня это Centos 7

Создаем папку Zabbix в папке usr командой:

mkdir /usr/Zabbix

Затем, создаем файл docker-compose.yml и закидываем туда код:

version: '3'

services:
  mysql-server:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root_pwd
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbix
    ports:
      - '3306:3306'
    restart: always
    volumes:
      - ./src/mysql:/var/lib/mysql
    command: ['mysqld', '--character-set-server=utf8', '--collation-server=utf8_bin']

  zabbix-server:
    image: zabbix/zabbix-server-mysql:alpine-latest
    environment:
      DB_SERVER_HOST: mysql-server
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbix
    ports:
       - '10051:10051'
    restart: always
    links: 
      - mysql-server
    depends_on:
      - mysql-server

  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:alpine-latest
    container_name: zabbix-web
    environment:
      MYSQL_ROOT_PASSWORD: root_pwd
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbix
      ZBX_SERVER_HOST: zabbix-server
      PHP_TZ: Europe/Kiev
    ports:
      - '80:80'
      - '443:443'
    restart: always
    links: 
      - zabbix-server
    depends_on:
      - zabbix-server

Давайте разберемся, что же здесь написано.

  1. Используем 3 сервиса:
  2. mysql версии 5.7
  3. zabbix-server-mysql на базе alpine последней версии

zabbix-web-nginx-mysql на базе alpine последней версии P.S. Нужные репозитории вы можете найти в Docker Hub’e заббикса

Говорим mysql:

Создать БД zabbix с пользователем и паролем zabbix (по правильному нужно задавать эти пароли при запуска контейнера, а не в самом конфигурируемом файле. Но мне лень, я хочу просто сказать «Запустить это» и без всяких доп настроек :) )

Открыть порт — 3306

Если какие-то проблемы — сразу перезагружайся

ВАЖНО Указываю в volumes папку где будет хранится сама база данных. Т. к. контейнер после выключения уничтожается, что бы вместе с ним не уничтожались данные БД — я просто выношу БД в отдельную папку, за пределы Docker’а. Вот такой вид файлов будет:

Запусти команду которая установит кодировку в utf8

Говорим zabbix-server-mysql:

Главная БД находится здесь DB_SERVER_HOST. Пользователь, Пароль, Название базы — вот.

Открыть порт — 10051

Если какие-то проблемы — сразу перезагружайся

Ссылка на базу вот — mysql-server (Указываем название сервиса)

Ты должен быть зависим от — mysql-server (Указываем название сервиса).

4.Говорим zabbix-web-nginx-mysql: - Твой сервер находится здесь ZBX_SERVER_HOST. Пользователь, Пароль, Название базы — вот. Установи PHP_TZ (регион) таким-то. - Открыть порты — 80 и 443 - Если какие-то проблемы — сразу перезагружайся - Ссылка на сервер вот — zabbix-server (Указываем название сервиса). - Ты должен быть зависим от — zabbix-server (Указываем название сервиса).

Вот и все настройки. Раз прописали в docker-compose файле и все, не нужно ничего править руками заходя на сервер. Все будет авто-мати-зиро-ванно.

Теперь. Осталось собрать и запустить.

В консоли (на сервере) заходим в папку с заббиксом в которой хранится наш чудо-файл (usr/Zabbix) и запускаем команду — docker-compose up -d

У вас начнет скачивать нужные репозитории и настраивать их. В конце концов, когда все закончится, пишем docker ps -a и смотрим что у нас запустилось 3 контейнера (zabbix-web, zabbix_zabbix-server, zabbix_mysql-server)

docker ps -a

ВАЖНО #1: Ждем около 2х минут, пока БД развернется. (У меня на одной машине это заняло почему-то 15 минут, но обычно 2 минуты и все). Это только для первого запуска, дальше запуск будет происходить за 10 секунд. ВАЖНО #2: Если вы все сделали правильно, то в колонке STATUS все 3 контейнера будут иметь слово UP n hours

Если НЕ UP тогда посмотрите логи контейнера, что бы понять, что с ним происходит. Делается это через команду docker logs COTAINER_ID


У вас наверное возникнет вопрос — «А как мне зайти в Zabbix? Какой у него IP?» Да все просто, у него будет тот же IP, что и у машины на которой развернут Docker. (В Linux можно глянуть IP командой — ip add)

Zabbix login page

Логин и пароль для входа будут стандартными — Admin и zabbix

P.S. — У меня таким образом поставилась последняя 4.4.1. версия

Если вы в папку /usr/Zabbix/ сделаете ls -l то обнаружите там папку src в которой будет myqsl со всеми данными. Если вы захотите перенести заббикс на другой сервер (где так же будет установлен доккер), вам понадобятся все файлы и папки, что лежат в папке /usr/Zabbix. Просто скопируете и вставите. А дальше командой docker-compose up -d соберете и все автоматически запустится и будет работать. И не важно, Windows у вас, Centos или Ubuntu. Все максимально легко и просто.

- usr
-- Zabbix
--- docker-compose.yml
--- src
---- mysql