zabbix6.0安装教程:从容器中安装
Posted 正月十六工作室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix6.0安装教程:从容器中安装相关的知识,希望对你有一定的参考价值。
zabbix6.0安装教程(六):从容器中安装Docker
目录
一、Docker
Zabbix6.0 为每个 Zabbix 组件提供 Docker image 作为可移植和自给自足的容器,以加快部署和更新过程。
Zabbix 组件支持 mysql 和 PostgreSQL 数据库、Apache2 和 nginx Web 服务器。这些 image 被分成多个不同的 image。
1. Docker 基础 images
Zabbix 组件在 Ubuntu、Alpine Linux 和 CentOS 基础 image 上提供:
Image | Version |
---|---|
alpine | 3.12 |
ubuntu | 20.04 (focal) |
centos | 8 |
所有 Zabbix image 已设置为 在基础 image 更新时,重新生成最新的 Zabbix image。
2. Docker file 源
任何人都可以使用位于 github.com上的 官方仓库 来追踪 Docker file 的变化。 您可以 fork 项目,或根据官方 Docker file 制作自己的 image。
3. 结构
所有 Zabbix 组件在以下 Docker 存储库中可用:
- Zabbix agent - zabbix/zabbix-agent
- Zabbix server
- 支持 MySQL 数据库的 Zabbix server - zabbix/zabbix-server-mysql
- 支持 PostgreSQL 数据库的 Zabbix server - zabbix/zabbix-server-pgsql
- Zabbix web界面
- 基于Apache2 Web服务器 的 Zabbix web 界面,支持 MySQL 数据库 - zabbix/zabbix-web-apache-mysql
- 基于Apache2 Web服务器 的 Zabbix web 界面,支持 PostgreSQL 数据库 - zabbix/zabbix-web-apache-pgsql
- 基于Nginx Web服务器 的 Zabbix web 界面,支持 MySQL 数据库 - zabbix/zabbix-web-nginx-mysql
- 基于Nginx Web服务器 的 Zabbix web 界面,支持 PostgreSQL 数据库 - zabbix/zabbix-web-nginx-pgsql
- Zabbix proxy
- Zabbix proxy ,支持 SQLite3 数据库 - zabbix/zabbix-proxy-sqlite3
- Zabbix proxy, 支持 MySQL 数据库 - zabbix/zabbix-proxy-mysql
- Zabbix Java 网关 - zabbix/zabbix-java-gateway
此外,还有 SNMP trap 支持。它仅作为基于 Ubuntu Trusty 的附加存储库 (zabbix/zabbix-snmptraps) 提供。它可以与 Zabbix server 和 Zabbix proxy 链接。
4. 版本
Zabbix 组件的每个镜像仓库都包含了下列标签:
- latest - 基于 Alpine Linux 镜像的最新稳定版的 Zabbix 组件
- alpine-latest - 基于 Alpine Linux 镜像的最新稳定版的 Zabbix 组件
- ubuntu-latest - 基于 Ubuntu 镜像的最新稳定版的 Zabbix 组件
- alpine-5.4-latest - 基于 Alpine Linux 镜像的最新次要版本的 Zabbix 5.4 组件
- ubuntu-5.4-latest - 基于 Unbuntu 镜像的最新次要版本的 Zabbix 5.4 组件
- alpine-5.4.* - 基于 Alpine Linux 镜像的不同次要版本的 Zabbix 5.4 组件,其中 * 代表 Zabbix 组件的次要版本
- ubuntu-5.4.* - 基于 Ubuntu 镜像的不同次要版本的 Zabbix 5.4 组件,其中 * 代表 Zabbix 组件的次要版本
5. 使用方法
环境变量
所有 Zabbix 组件 image 都提供环境变量来控制配置。 这些环境变量在每个组件 image 仓库中列出。这些环境变量是 Zabbix 配置文件中的选项,但具有不同的命名方法。 例如,ZBX_LOGSLOWQUERIES 等于来自 Zabbix server 和 Zabbix proxy 配置文件的 LogSlowQueries。
一些配置选项是不允许更改的。例如,PIDFile和 LogType。
其中,一些组件有特定的环境变量,而这些环境变量在官方 Zabbix 配置文件并不存在:
变量 | 组件 | 描述 |
---|---|---|
DB_SERVER_HOST | Server Proxy Web 界面 | 这个变量指的是 MySQL 或 PostgreSQL 的 IP 或 DNS。 默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为mysql-server 或 postgres-server |
DB_SERVER_PORT | Server Proxy Web 界面 | 这个变量指的是 MySQL 或 PostgreSQL 的端口。 默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为 ‘3306’ 或 ‘5432’ 。 |
MYSQL_USER | Server Proxy Web 界面 | MySQL 数据库用户。 默认情况下,这个值为 ‘zabbix’。 |
MYSQL_PASSWORD | Server Proxy Web 界面 | MySQL 数据库密码。 默认情况下,这个值为 ‘zabbix’。 |
MYSQL_DATABASE Server Proxy | Web 界面 | Zabbix 数据库库名。 默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 ‘zabbix’ 和 ‘zabbix_proxy’ 。 |
POSTGRES_USER | Server Web 界面 | PostgreSQL 数据库用户。 默认情况下,这个值为 ‘zabbix’。 |
POSTGRES_PASSWORD | Server Web 界面 | PostgreSQL 数据库密码。 默认情况下,这个值为 ‘zabbix’。 |
POSTGRES_DB Server | Web 界面 | Zabbix 数据库库名。 默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 ‘zabbix’ 和 ‘zabbix_proxy’ 。 |
php_TZ | Web 界面 | PHP 时区格式。支持时区的完整列表参照 php.net。 默认情况下,这个值为 ‘Europe/Riga’ 。 |
ZBX_SERVER_NAME | Web 界面 | Web 界面右上角显示的安装名称。 默认情况下,这个值为 ‘Zabbix Docker’ 。 |
ZBX_JAVAGATEWAY_ENABLE | Server Proxy | 是否启用 Zabbix Java 网关 以采集与 Java 相关的检查数据。 默认情况下,这个值为 “false” 。 |
ZBX_ENABLE_SNMP_TRAPS Server Proxy 是否启用 SNMP trap 功能。 这需要存在 zabbix-snmptraps 容器实例,并共享 /var/lib/zabbix/snmptraps volume 到 Zabbix server 或 proxy。 |
Volumes
Image 中允许使用一些挂载点。根据 Zabbix 组件类型,这些挂载点各不相同:
Volume | 描述 |
---|---|
Zabbix agent | |
/etc/zabbix/zabbix_agentd.d | 这个 volume 允许包含 *.conf 文件并使用 UserParameter 扩展 Zabbix agent。 |
/var/lib/zabbix/modules | 这个 volume 允许加载其它 module 并使用 LoadModule 功能扩展 Zabbix agent。 |
/var/lib/zabbix/enc | 这个 volume 用于存放 TLS 相关的文件。这些文件名使用 ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE ,ZBX_TLSPSKFILE 等环境变量指定。 |
Zabbix server | |
/usr/lib/zabbix/alertscripts | 这个 volume 用于自定义告警脚本。即 zabbix_server.conf 中的 AlertScriptsPath 参数。 |
/usr/lib/zabbix/externalscripts | 这个 volume 用于 外部检查。即 zabbix_server.conf 中的 ExternalScripts 参数。 |
/var/lib/zabbix/modules | 这个 volume 允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix server。 |
/var/lib/zabbix/enc | 这个 volume 用于存放 TLS 相关的文件。这些文件名使用 ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE ,ZBX_TLSPSKFILE 等环境变量指定。 |
/var/lib/zabbix/ssl/certs | 这个 volume 用于存放客户端认证的 SSL 客户端认证文件。即 [zabbix_server.conf] 中的 SSLCertLocation 参数。 |
/var/lib/zabbix/ssl/keys | 这个 volume 用于存放客户端认证的 SSL 私钥文件。即 zabbix_server.conf 中的 SSLKeyLocation 参数。 |
/var/lib/zabbix/ssl/ssl_ca | 这个 volume 用于存放 SSL 服务器证书认证的证书颁发机构(CA)文件。即 zabbix_server.conf 中的 SSLCALocation 参数。 |
/var/lib/zabbix/snmptraps | 这个 volume 用于存放 snmptraps.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker 的 --volumes-from 选项继承。可以通过共享 volume ,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 ‘true’ 以启用 SNMP trap 处理功能。 |
/var/lib/zabbix/mibs | 这个 volume 允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。 |
Zabbix proxy | |
/usr/lib/zabbix/externalscripts | 这个 volume 用于 外部检查。即 zabbix_proxy.conf 中的 ExternalScripts 参数。 |
/var/lib/zabbix/modules | 这个 volume 允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix server。 |
/var/lib/zabbix/enc | 这个 volume 用于存放 TLS 相关的文件。这些文件名使用 ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE ,ZBX_TLSPSKFILE 等环境变量指定。 |
/var/lib/zabbix/ssl/certs | 这个 volume 用于存放客户端认证的 SSL 客户端认证文件。即 zabbix_proxy.conf 中的 SSLCertLocation 参数。 |
/var/lib/zabbix/ssl/keys | 这个 volume 用于存放客户端认证的 SSL 私钥文件。即 zabbix_proxy.conf 中的 SSLKeyLocation 参数。 |
/var/lib/zabbix/ssl/ssl_ca | 这个 volume 用于存放 SSL 服务器证书认证的证书颁发机构(CA)文件。即zabbix_proxy.conf 中的 SSLCALocation 参数。 |
/var/lib/zabbix/snmptraps | 这个 volume 用于存放 snmptraps.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker 的 --volumes-from 选项继承。可以通过共享 volume ,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 ‘true’ 以启用 SNMP trap 处理功能。 |
/var/lib/zabbix/mibs | 这个 volume 允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。 |
基于 Apache2 web 服务器的 Zabbix web 界面 | |
/etc/ssl/apache2 | 这个 volume 允许为 Zabbix Web 界面启用 HTTPS。这个 volume 必须包含为 Apache2 SSL 连接准备的 ssl.crt 和 ssl.key 两个文件。 |
基于 Nginx web 服务器的 Zabbix web 界面 | |
/etc/ssl/nginx | 这个 volume 允许为 Zabbix Web 接口启用 HTTPS。这个 volume 必须包含为 Nginx SSL 连接装备的 ssl.crt 和 ssl.key 两个文件。 |
Zabbix snmptraps | |
/var/lib/zabbix/snmptraps | 这个 volume 包含了已接收到的 SNMP traps 命名的 snmptraps.log日志文件。 |
/var/lib/zabbix/mibs | 这个 volume 允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。 |
关于更多的信息请在 Docker Hub 的 Zabbix 官方仓库查看。
6. 使用示例
示例 1
该示例示范了如何运行 MySQL 数据库支持的 Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关。
- 创建专用于 Zabbix 组件容器的网络:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
- 启动空的 MySQL 服务器实例:
docker run --name mysql-server -t \\
-e MYSQL_DATABASE="zabbix" \\
-e MYSQL_USER="zabbix" \\
-e MYSQL_PASSWORD="zabbix_pwd" \\
-e MYSQL_ROOT_PASSWORD="root_pwd" \\
--network=zabbix-net \\
-d mysql:8.0 \\
--restart unless-stopped \\
--character-set-server=utf8 --collation-server=utf8_bin \\
--default-authentication-plugin=mysql_native_password
- 启动 Zabbix Java 网关实例:
docker run --name zabbix-java-gateway -t \\
--network=zabbix-net \\
--restart unless-stopped \\
-d zabbix/zabbix-java-gateway:alpine-5.4-latest
- 启动 Zabbix server 实例,并将其关联到已创建的 MySQL server 实例:
docker run --name zabbix-server-mysql -t \\
-e DB_SERVER_HOST="mysql-server" \\
-e MYSQL_DATABASE="zabbix" \\
-e MYSQL_USER="zabbix" \\
-e MYSQL_PASSWORD="zabbix_pwd" \\
-e MYSQL_ROOT_PASSWORD="root_pwd" \\
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \\
--network=zabbix-net \\
-p 10051:10051 \\
--restart unless-stopped \\
-d zabbix/zabbix-server-mysql:alpine-5.4-latest
Zabbix server 实例将 10051/TCP 端口(Zabbix trapper)暴露给主机。
- 启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 Zabbix server 实例:
docker run --name zabbix-web-nginx-mysql -t \\
-e ZBX_SERVER_HOST="zabbix-server-mysql" \\
-e DB_SERVER_HOST="mysql-server" \\
-e MYSQL_DATABASE="zabbix" \\
-e MYSQL_USER="zabbix" \\
-e MYSQL_PASSWORD="zabbix_pwd" \\
-e MYSQL_ROOT_PASSWORD="root_pwd" \\
--network=zabbix-net \\
-p 80:8080 \\
--restart unless-stopped \\
-d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
Zabbix web 界面实例将 80/TCP 端口(HTTP)暴露给主机。
示例 2
该示例示范了如何运行 PostgreSQL 数据库支持的 Zabbix server、基于 Nginx Web 服务器的 Zabbix Web 界面和 SNMP trap功能。
1 . 创建专用于 Zabbix 组件容器的网络:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2 . 启动空的 PostgreSQL server 实例:
docker run --name postgres-server -t \\
-e POSTGRES_USER="zabbix" \\
-e POSTGRES_PASSWORD="zabbix_pwd" \\
-e POSTGRES_DB="zabbix" \\
--network=zabbix-net \\
--restart unless-stopped \\
-d postgres:latest
3 .启动 Zabbix snmptraps 实例:
docker run --name zabbix-snmptraps -t \\
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \\
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \\
--network=zabbix-net \\
-p 162:1162/udp \\
--restart unless-stopped \\
-d zabbix/zabbix-snmptraps:alpine-5.4-latest
Zabbix snmptrap 实例将 162/UDP 端口(SNMP traps)暴露给主机。
4 .启动 Zabbix server 实例,并将其关联到已创建的 PostgreSQL server 实例:
docker run --name zabbix-server-pgsql -t \\
-e DB_SERVER_HOST="postgres-server" \\
-e POSTGRES_USER="zabbix" \\
-e POSTGRES_PASSWORD="zabbix_pwd" \\
-e POSTGRES_DB="zabbix" \\
-e ZBX_ENABLE_SNMP_TRAPS="true" \\
--network=zabbix-net \\
-p 10051:10051 \\
--volumes-from zabbix-snmptraps \\
--restart unless-stopped \\
-d zabbix/zabbix-server-pgsql:alpine-5.4-latest
Zabbix server 实例将 10051/TCP 端口(Zabbix trapper)暴露给主机。
5 . 启动 Zabbix Web 界面,并将其关联到已创建的 PostgreSQL server 和 Zabbix server 实例:
docker run --name zabbix-web-nginx-pgsql -t \\
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \\
-e DB_SERVER_HOST="postgres-server" \\
-e POSTGRES_USER="zabbix" \\
-e POSTGRES_PASSWORD="zabbix_pwd" \\
-e POSTGRES_DB="zabbix" \\
--network=zabbix-net \\
-p 443:8443 \\
-p 80:8080 \\
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \\
--restart unless-stopped \\
-d zabbix/zabbix-web-nginx-pgsql:alpine-5.4-latest
Zabbix web 界面实例将 443/TCP 端口(HTTPS)暴露给主机。
/etc/ssl/nginx 目录必须包含具有所需名称的证书。
示例 3
该示例示范了如何在Red Hat 8上使用 podman 运行 MySQL 数据库支持的 Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关。
- 创建一个名为 zabbix 的 pod 并暴露端口 (web 界面、Zabbix server trapper):
podman pod create --name zabbix -p 80:8080 -p 10051:10051
- (可选)在 zabbix pod 中启动 Zabbix agent 容器:
podman run --name zabbix-agent \\
-eZBX_SERVER_HOST="127.0.0.1,localhost" \\
--restart=always \\
--pod=zabbix \\
-d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest
- 在主机上创建./mysql/ 目录并启动 Oracle MySQL server 8.0:
podman run --name mysql-server -t \\
-e MYSQL_DATABASE="zabbix" \\
-e MYSQL_USER="zabbix" \\
-e MYSQL_PASSWORD="zabbix_pwd" \\
-e MYSQL_ROOT_PASSWORD="root_pwd" \\
-v ./mysql/:/var/lib/mysql/:Z \\
--restart=always \\
--pod=zabbix \\
-d mysql:8.0 \\
--character-set-server=utf8 --collation-server=utf8_bin \\
--default-authentication-plugin=mysql_native_password
- 启动 Zabbix server 容器:
podman run --name zabbix-server-mysql -t \\
-e DB_SERVER_HOST="127.0.0.1" \\
-e MYSQL_DATABASE="zabbix" \\
-e MYSQL_USER="zabbix" \\
-e MYSQL_PASSWORD="zabbix_pwd" \\
-e MYSQL_ROOT_PASSWORD="root_pwd" \\
-e ZBX_JAVAGATEWAY="127.0.0.1" \\
--restart=always \\
--pod=zabbix \\
-d registry.connect.redhat.com/zabbix/zabbix-server-mysql-50
- 启动 Zabbix Java 网关容器:
podman run --name zabbix-java-gateway -t \\
--restart=always \\
--pod=zabbix \\
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50
- 启动 Zabbix web 界面 容器:
podman run --name zabbix-web-mysql -t \\
-e ZBX_SERVER_HOST="127.0.0.1" \\
-e DB_SERVER_HOST="127.0.0.1" \\
-e MYSQL_DATABASE="zabbix" \\
-e MYSQL_USER="zabbix" \\
-e MYSQL_PASSWORD="zabbix_pwd" \\
-e MYSQL_ROOT_PASSWORD="root_pwd" \\
--restart=always \\
--pod=zabbix \\
-d registry.connect.redhat.com/zabbix/zabbix-web-mysql-50
zabbix pod 从 zabbix-web-mysql 容器的 8080/TCP 向 主机的 80/TCP port (HTTP) 暴露端口。
二、Docker Compose
Zabbix 还提供了用于在 Docker 中定义和运行多容器 Zabbix 组件的 compose 文件。 这些 compose 文件可以在
github.com上的 Zabbix docker 官方仓库中找到。这些 compose 文件作为示例添加,并支持广泛。例如,Zabbix proxy 支持 MySQL和 SQLite3。
以下为几个不同版本的 compose 文件:
文件名 | 描述 |
---|---|
docker-compose_v3_alpine_mysql_latest.yaml | 该 compose 文件运行基于 Alpine Linux 的 Zabbix 5.4 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_alpine_mysql_local.yaml | 该 compose 文件本地构建和运行基于 Alpine Linux 的 Zabbix 5.4 最新版本的组件,支持 MySQL数据库。 |
docker-compose_v3_alpine_pgsql_latest.yaml | 该 compose 文件运行基于 Alpine Linux 的 Zabbix 5.4 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_alpine_pgsql_local.yaml | 该 compose 文件本地构建和运行基于 Apline Linux 的 Zabbix 5.4 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_centos_mysql_latest.yaml | 该 compose 文件运行基于 CentOS 8 的 Zabbix 5.4 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_centos_mysql_local.yaml | 该 compose 文件本地构建和运行基于 CentOS 8 的 Zabbix 5.4 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_centos_pgsql_latest.yaml | 该 compose 文件运行基于 CentOS 8 的 Zabbix 5.4 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_centos_pgsql_local.yaml | 该 compose 文件本地构建和运行基于 CentOS 8 的 Zabbix 5.4 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_ubuntu_mysql_latest.yaml | 该 compose 文件运行基于 Ubuntu 20.04 的 Zabbix 5.4 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_ubuntu_mysql_local.yaml | 该 compose 文件本地构建和运行基于 Ubuntu 20.04 的 Zabbix 5.4 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_ubuntu_pgsql_latest.yaml | 该 compose 文件运行基于 Ubuntu 20.04 的 Zabbix 5.4 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_ubuntu_pgsql_local.yaml | 该 compose 文件本地构建和运行基于 Ubuntu 20.04 的 Zabbix 5.4 最新版本的组件,支持 PosegreSQL 数据库。 |
Docker compose 文件支持 Docker Compose 3 版本。
1. 存储
Compose 文件已经配置为支持主机上的存储。当你使用 Compose 文件运行 Zabbix 组件时,Docker Compose 将在其所在文件夹中创建一个 zbx_env 目录,该目录将包含于 Volumes章节所述相同的结构,以用于数据库存储。
此外,volume 下的文件 /etc/localtime 和 /etc/timezone 为只读模式。
2. 环境变量文件
在 github.com 上与存放 compose 文件的同一目录中,您可以在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件的命令与 .env_<type of component> 类似。
3. 示例
示例 1
git checkout 5.4
docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d
这个命令将会为每个 Zabbix 组件下载最新的 Zabbix 5.4 image,并以 detach 模式运行。
不要忘记从 github.com 的 Zabbix 官方镜像仓库下载 .env_<type of component> 文件和 compose 文件。
示例 2
git checkout 5.4
docker-compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml up -d
这个命令将会下载基于 Ubuntu 20.04 的 image,并在本地构建 Zabbix 5.4 组件,以 detach 模式运行。
排版: 丘铭旭
初审: 玩具熊
复审: 二月二
本篇教程来源乐维社区|专注IT运维技术分享,经本工作室二次编辑,如有侵权,请联系我们。
参考资料:
1.zabbix6.0从容器中安装
以上是关于zabbix6.0安装教程:从容器中安装的主要内容,如果未能解决你的问题,请参考以下文章