1. Tổng quan.
Docker Compose là một công cụ để quản lý và chạy các ứng dụng được xây dựng dựa trên Docker. Nó cho phép bạn định nghĩa và chạy các dịch vụ của ứng dụng trong một tập tin cấu hình duy nhất, giúp tối ưu hóa quá trình triển khai và quản lý các dịch vụ.
Zabbix là một giải pháp quản lý theo dõi hệ thống mã nguồn mở. Nó cung cấp một cách dễ dàng để theo dõi tình trạng và hiệu suất của hệ thống mạng, máy chủ và các dịch vụ. Zabbix cung cấp một giao diện web cho phép bạn quản lý và theo dõi các mục tiêu của hệ thống một cách dễ dàng.
Có một số lý do tại sao bạn nên cài đặt Zabbix sử dụng Docker:
- Tiện dụng: Cài đặt và sử dụng Zabbix trong Docker cung cấp một cách đơn giản và nhanh chóng để cài đặt và sử dụng Zabbix trên máy chủ của bạn.
- Tái sử dụng: Bạn có thể dễ dàng chia sẻ và tái sử dụng cấu hình Zabbix trên nhiều môi trường khác nhau.
- Độc lập với hệ thống: Cài đặt Zabbix trong Docker tách rời Zabbix từ hệ thống của bạn và giúp bạn tránh các vấn đề liên quan đến phụ thuộc vào phần mềm hệ điều hành hoặc cấu hình hệ thống.
- Dễ dàng quản lý: Bạn có thể dễ dàng quản lý và theo dõi các dịch vụ của Zabbix sử dụng Docker Compose.
- An toàn: Cài đặt Zabbix trong Docker giúp bảo vệ hệ thống của bạn khỏi các tấn công và các lỗ hổng bảo mật.
2. Triển khai Zabbix bằng Docker Run.
Trong hướng dẫn này, chúng ta sẽ chạy Zabbix với cơ sở dữ liệu MariaDB, mặc dù người ta vẫn có thể chạy với PostgreSQL hoặc MySQL.
Ta sẽ có các container sau:
- MySQL server
- Zabbix server
- Zabbix web interface
- Zabbix proxy
- Zabbix Java Gateway
Sử dụng docker, bạn chỉ có thể chạy các container như sau:
Bắt đầu bằng cách tạo một network cho tất cả các thành phần Zabbix:
docker network create --subnet 172.1.101.0/24 --ip-range 172.1.101.0/27 zabbix-net
Xác nhận network đã khởi tạo thành công.
$ docker network list
NETWORK ID NAME DRIVER SCOPE
beb7890cd7b1 bridge bridge local
b1b1d5457974 host host local
0e0aa6e63a87 none null local
e40397127b8a zabbix-net bridge local
Bây giờ hãy tạo container MySQL cho Zabbix:
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbixdb" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="Passw0rd" \
-e MYSQL_ROOT_PASSWORD="StrongPassword" \
--network=zabbix-net \
-d mariadb \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
Container tiếp theo sẽ được triển khai là Zabbix Java gateway.
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-6.0-latest
Triển khai Zabbix server với MySQL và liên kết nó với phiên bản MySQL đã tạo. Hãy nhớ thay thế các chi tiết chính xác:
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbixdb" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="Passw0rd" \
-e MYSQL_ROOT_PASSWORD="StrongPassword" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-6.0-latest
Tạo Zabbix web interface và liên kết nó với máy chủ Zabbix đã tạo và MySQL.
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbixdb" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="Passw0rd" \
-e MYSQL_ROOT_PASSWORD="StrongPassword" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
Xác minh xem các container có đang chạy không:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb64af99746d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest "docker-entrypoint.sh" 8 minutes ago Up 8 minutes 8443/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp zabbix-web-nginx-mysql
d04464af7fa8 zabbix/zabbix-server-mysql:alpine-6.0-latest "/sbin/tini -- /usr/…" 9 minutes ago Up 9 minutes 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-server-mysql
a1a78709eaaa zabbix/zabbix-java-gateway:alpine-6.0-latest "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 10052/tcp zabbix-java-gateway
ae717f35b698 mariadb "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 3306/tcp mysql-server
3. Triển khai Zabbix bằng Docker Compose.
Dưới đây là một tập tin docker-compose.yml mẫu bạn có thể sử dụng để cài đặt Zabbix:
cat > docker-compose.yml << 'OEF'
version: '3.8'
services:
db:
image: mariadb:10.7.8
container_name: zabbix-mysql
restart: always
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: zabbix
networks:
- zabbix_network
server:
image: zabbix/zabbix-server-mysql
container_name: zabbix-server
restart: always
environment:
DB_SERVER_HOST: db
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_DATABASE: zabbix
depends_on:
- db
ports:
- "10051:10051"
networks:
- zabbix_network
web:
image: zabbix/zabbix-web-nginx-mysql
container_name: zabbix-web
restart: always
environment:
DB_SERVER_HOST: db
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_DATABASE: zabbix
ZBX_SERVER_HOST: server
PHP_TZ: "Asia/Ho_Chi_Minh"
depends_on:
- server
ports:
- "80:80"
- "8080:8080"
networks:
- zabbix_network
networks:
zabbix_network:
driver: bridge
OEF
Lưu ý: Thay thế “your_password” bằng mật khẩu mong muốn của bạn trong các biến môi trường.
Với tập tin này, bạn có thể bắt đầu quá trình cài đặt Zabbix bằng cách chạy lệnh docker-compose up -d trong cùng một thư mục với tập tin docker-compose.yml.
Hãy xóa các container đã tạo ở phần trước bằng lệnh dưới.
for i in mysql-server zabbix-java-gateway zabbix-server-mysql zabbix-web-nginx-mysql; do
docker rm -f $i
done
Khởi chạy Docker Compose.
$ docker-compose up -d
[+] Running 1/1
⠿ zabbix-server-mysql Pulled 2.7s
[+] Running 5/5
⠿ Network root_zbx_net Created 0.1s
⠿ Container root-mysql-server-1 Started 2.3s
⠿ Container root-zabbix-java-gateway-1 Started 1.3s
⠿ Container root-zabbix-server-mysql-1 Started 3.1s
⠿ Container root-zabbix-web-nginx-mysql-1 Started
Xác nhận các container đã chạy.
$ docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
root-mysql-server-1 "docker-entrypoint.s…" mysql-server running 3306/tcp
root-zabbix-java-gateway-1 "docker-entrypoint.s…" zabbix-java-gateway running 0.0.0.0:10052->10052/tcp, :::10052->10052/tcp
root-zabbix-server-mysql-1 "/sbin/tini -- /usr/…" zabbix-server-mysql running 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp
root-zabbix-web-nginx-mysql-1 "docker-entrypoint.sh" zabbix-web-nginx-mysql running 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp, :::80->8080/tcp, :::443->8443/tcp
4. Bạn cần cho phép các dịch vụ thông qua tường lửa.
##For firewalld
sudo firewall-cmd --permanent --add-port=10051/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
##For UFW
sudo ufw allow 80/tcp
sudo ufw allow 10051/tcp
5. Truy cập Zabbix 6.0 LTS web UI.
Zabbix 6.0 LTS web UI được hiển thị trên cổng 80 và có thể được truy cập bằng URL http://IP_address hoặc http://domain_name
Đăng nhập bằng thông tin đăng nhập mặc định:
Username: Admin
Password: zabbix
Khi đăng nhập thành công, bạn sẽ có thể xem bảng điều khiển bên dưới:
Chúc các bạn thành công.