Как установить Zabbix через Docker Compose
В данной статье мы будем с вами поднимать последнюю версию 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
Давайте разберемся, что же здесь написано.
- Используем 3 сервиса:
- mysql версии 5.7
- zabbix-server-mysql на базе alpine последней версии
zabbix-web-nginx-mysql на базе alpine последней версии P.S. Нужные репозитории вы можете найти в Docker Hub’e заббикса
Говорим mysql:
Создать БД zabbix с пользователем и паролем zabbix (по правильному нужно задавать эти пароли при запуска контейнера, а не в самом конфигурируемом файле. Но мне лень, я хочу просто сказать «Запустить это» и без всяких доп настроек :) )
Открыть порт — 3306
Если какие-то проблемы — сразу перезагружайся
ВАЖНО Указываю в volumes папку где будет хранится сама база данных. Т. к. контейнер после выключения уничтожается, что бы вместе с ним не уничтожались данные БД — я просто выношу БД в отдельную папку, за пределы Docker’а. Вот такой вид файлов будет:
- usr -- Zabbix --- docker-compose.yml --- src ---- mysql
Запусти команду которая установит кодировку в 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
)
ВАЖНО #1: Ждем около 2х минут, пока БД развернется. (У меня на одной машине это заняло почему-то 15 минут, но обычно 2 минуты и все). Это только для первого запуска, дальше запуск будет происходить за 10 секунд. ВАЖНО #2: Если вы все сделали правильно, то в колонке STATUS все 3 контейнера будут иметь слово UP n hours
Если НЕ UP тогда посмотрите логи контейнера, что бы понять, что с ним происходит. Делается это через команду docker logs COTAINER_ID
У вас наверное возникнет вопрос — «А как мне зайти в Zabbix? Какой у него IP?» Да все просто, у него будет тот же IP, что и у машины на которой развернут Docker. (В Linux можно глянуть IP командой — ip add)
Логин и пароль для входа будут стандартными — Admin
и zabbix
P.S. — У меня таким образом поставилась последняя 4.4.1. версия
Если вы в папку /usr/Zabbix/
сделаете ls -l
то обнаружите там папку src в которой будет myqsl со всеми данными.
Если вы захотите перенести заббикс на другой сервер (где так же будет установлен доккер), вам понадобятся все файлы и папки, что лежат в папке /usr/Zabbix
. Просто скопируете и вставите. А дальше командой docker-compose up -d соберете и все автоматически запустится и будет работать. И не важно, Windows у вас, Centos или Ubuntu. Все максимально легко и просто.