Docker——7.Dokcer容器部署lnmp+zabbix
·
介绍
使用 Docker Compose 快速部署一个完整的 LNMP(Linux + Nginx + MySQL + PHP)环境,并在此基础上部署 Zabbix 监控系统。通过分阶段部署,可以先验证基础 Web 服务环境,再搭建功能强大的监控平台。整个过程基于容器化技术,确保环境隔离与部署可重复性。
环境规划
在开始部署前,请确保您已准备好以下环境与资源:
-
服务器要求
- 操作系统:建议使用 CentOS 7/8、Ubuntu 20.04/22.04 或其它主流 Linux 发行版。
- Docker 与 Docker Compose:已安装并配置完成。这是运行所有服务的基础。
- 资源:建议至少 2 核 CPU,4GB 内存,20GB 可用磁盘空间。Zabbix 服务对内存有一定要求。
-
网络与端口规划
- LNMP 阶段:将临时占用
80(HTTP) 和3306(MySQL) 端口用于测试。 - Zabbix 阶段:将永久使用
8080(Web 界面)、10051(Server) 和10050(Agent) 端口。3306端口同样被 Zabbix 的 MySQL 容器使用,因此两个阶段不能同时运行。 - 重要提醒:请确保服务器的防火墙或安全组已放行上述端口。
- LNMP 阶段:将临时占用
-
目录结构规划
为保持清晰,我们将创建两个独立的项目目录:/opt/lnmp:存放 LNMP 环境的所有配置、数据和代码。/opt/zabbix:存放 Zabbix 监控系统的所有配置、数据和脚本。
-
部署流程概述
本文将分为两个清晰的阶段进行:- 第一阶段:部署并测试 LNMP 基础环境,完成后将其停止以释放端口。
- 第二阶段:在同一个服务器上部署完整的 Zabbix 监控套件(包含 MySQL、Server、Web 和 Agent)。
第一阶段:部署 LNMP 环境 (Nginx + PHP + MySQL)
一阶段搭建一个基础的 Web 服务环境,并测试 PHP 是否能正常解析。
1. 创建目录并编写配置文件
首先,需要创建项目目录结构,并写入 docker-compose.yml 以及 Nginx、PHP 的相关配置。
请在终端中依次执行以下命令:
# 1. 创建目录结构
mkdir -pv /opt/lnmp/{nginx/conf.d,php,mysql/data,www}
cd /opt/lnmp
# 2. 创建 Docker Compose 主配置文件
cat > docker-compose.yml <<'EOF'
services:
nginx:
image: nginx:1.24-alpine
container_name: lnmp_nginx
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./www:/usr/share/nginx/html
- ./nginx/logs:/var/log/nginx
depends_on:
- php
networks:
- lnmp_net
restart: always
php:
image: php:8.1-fpm-alpine
container_name: lnmp_php
volumes:
- ./www:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
networks:
- lnmp_net
restart: always
mysql:
image: mysql:8.0
container_name: lnmp_mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: RootPass!123
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: AppPass!123
volumes:
- ./mysql/data:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- lnmp_net
restart: always
networks:
lnmp_net:
driver: bridge
EOF
# 3. 创建 Nginx 虚拟主机配置 (default.conf)
cat > ./nginx/conf.d/default.conf <<'EOF'
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
# 4. 创建 PHP 配置文件 (php.ini)
mkdir -p ./php
cat > ./php/php.ini <<'EOF'
upload_max_filesize = 64M
post_max_size = 64M
date.timezone = Asia/Shanghai
EOF
# 5. 创建测试页面 (index.php)
cat > ./www/index.php <<'EOF'
<?php
phpinfo();
?>
EOF
2. 启动并测试 LNMP
配置完成后,启动容器并验证服务是否正常。
# 启动服务 (在 /opt/lnmp 目录下执行)
docker compose up -d
# 查看运行状态,确保三个容器状态均为 Up
docker compose ps
# 测试 PHP 解析 (如果返回 PHP 信息页面代码,说明成功)
curl http://localhost
3. 停止 LNMP (为 Zabbix 腾出端口)
因为 Zabbix 也需要使用 80 和 3306 端口,测试完 LNMP 后,请务必执行关闭操作。
docker compose down
第二阶段:部署 Zabbix 监控系统
这一阶段我们将部署包含 MySQL、Zabbix Server、Web 前端和 Agent 的完整监控套件。
1. 创建目录并编写配置文件
切换到 Zabbix 目录,并写入包含所有组件的 docker-compose.yml。
# 1. 创建目录并进入
mkdir -pv /opt/zabbix/{mysql-data,alertscripts,externalscripts,zbx_env}
cd /opt/zabbix
# 2. 创建 Zabbix 的 Docker Compose 配置文件
cat > docker-compose.yml <<'EOF'
services:
mysql:
image: mysql:8.0
container_name: zabbix-mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --default-authentication-plugin=mysql_native_password
- --log_bin_trust_function_creators=1
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: ZabbixPass!123
MYSQL_ROOT_PASSWORD: RootPass!123
volumes:
- ./mysql-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- zabbix-net
restart: always
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pRootPass!123"]
interval: 10s
timeout: 5s
retries: 5
zabbix-server:
image: zabbix/zabbix-server-mysql:6.0-centos-latest
container_name: zabbix-server
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: ZabbixPass!123
MYSQL_ROOT_PASSWORD: RootPass!123
ports:
- "10051:10051"
volumes:
- ./alertscripts:/usr/lib/zabbix/alertscripts
- ./externalscripts:/usr/lib/zabbix/externalscripts
- ./zbx_env:/var/lib/zabbix
depends_on:
mysql:
condition: service_healthy
networks:
- zabbix-net
restart: always
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:6.0-centos-latest
container_name: zabbix-web
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: ZabbixPass!123
MYSQL_ROOT_PASSWORD: RootPass!123
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: Asia/Shanghai
ports:
- "8080:8080"
depends_on:
- mysql
- zabbix-server
networks:
- zabbix-net
restart: always
zabbix-agent:
image: zabbix/zabbix-agent:6.0-centos-latest
container_name: zabbix-agent
environment:
ZBX_HOSTNAME: Zabbix server
ZBX_SERVER_HOST: zabbix-server
ZBX_SERVER_PORT: 10051
ports:
- "10050:10050"
depends_on:
- zabbix-server
networks:
- zabbix-net
restart: always
networks:
zabbix-net:
driver: bridge
EOF
2. 启动 Zabbix
执行启动命令,由于 Zabbix 初始化数据库需要一点时间,启动过程可能稍慢。
# 启动 Zabbix 全家桶
docker compose up -d
3. 访问与登录
服务启动后(建议等待 1-2 分钟让数据库初始化完成),即可通过浏览器访问。
- 访问地址:
http://<你的服务器IP>:8080 - 登录账号:
Admin(注意首字母大写) - 登录密码:
zabbix
更多推荐
所有评论(0)