[comment]: # ({af2eaf2f-af2eaf2f})
# 3 从源代码安装

您可以通过从源代码编译来使用最新版本的 get version。

此处提供了从源代码安装 Zabbix 的分步教程。

[comment]: # ({/af2eaf2f-af2eaf2f})

[comment]: # ({a81f3302-0040d992})
#### 安装 Zabbix 守护进程

[comment]: # ({/a81f3302-0040d992})

[comment]: # ({2e98ce22-8cc2c1b1})
##### 1 下载源代码归档

前往 [Zabbix 下载页面](http://www.zabbix.com/download_sources#70LTS)
并下载源代码归档。下载完成后，运行以下命令解压源代码：

    tar -zxvf zabbix-7.0.0.tar.gz

::: notetip
在命令中输入正确的 Zabbix 版本。它必须与已下载归档文件的名称一致。
:::

[comment]: # ({/2e98ce22-8cc2c1b1})

[comment]: # ({65663a59-87e1101d})
##### 2 创建用户账户

所有Zabbix守护进程run在非特权系统用户下运行。
如果Zabbix守护进程由非特权用户账户启动，它将保持以该用户身份继续运行。

在默认配置中，如果守护进程以`root`身份启动，它将切换到`zabbix`用户账户，该账户必须存在。
要create一个`zabbix`系统用户和组，run以下列出的命令。

基于RedHat的系统:

    groupadd --system zabbix
    useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

基于Debian的系统:

    addgroup --system --quiet zabbix
    adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix --no-create-home zabbix

无需为Zabbix前端create单独的用户账户。

###### 安全建议

如果Zabbix [server](/manual/concepts/server)和[agent](/manual/concepts/agent) run在同一台机器上运行，建议在**不同的用户账户**下run它们。
以相同用户身份运行允许agent访问服务器的配置file，这可能会将敏感信息（如数据库密码）暴露给Zabbix中的任何管理员级别用户。

::: noteimportant
以`root`、`bin`或任何具有特殊权限的账户运行Zabbix存在安全风险。

:::

###### 主目录(可选)

Zabbix进程不需要主目录，因此通常不建议创建。
然而，如果您需要依赖主目录的功能（例如将MySQL凭据存储在$HOME/.my.cnf中），可以通过以下命令create实现。

在基于RedHat的系统上，run：

    mkdir -m u=rwx,g=rwx,o= -p /usr/lib/zabbix
    chown zabbix:zabbix /usr/lib/zabbix

在基于Debian的系统上，run：

    
mkdir -m u=rwx,g=rwx,o= -p /var/lib/zabbix
    chown zabbix:zabbix /var/lib/zabbix

[comment]: # ({/65663a59-87e1101d})

[comment]: # ({06256db0-06256db0})
##### 3 创建 Zabbix 数据库

对于 Zabbix [server](/manual/concepts/server) 和
[proxy](/manual/concepts/proxy) 守护进程，以及 Zabbix 前端，都需要使用数据库。但不需要为 run Zabbix
[agent](/manual/concepts/agent)。

创建数据库模式并插入数据集的 SQL [scripts are provided](/manual/appendix/install/db_scripts)。Zabbix proxy
数据库只需要模式，而 Zabbix server 数据库还需要在 Top 模式的基础上包含数据集。

创建完 Zabbix 数据库后，请继续进行 Zabbix 编译的后续步骤。

[comment]: # ({/06256db0-06256db0})

[comment]: # ({ecd76a0a-8ff1b41c})
##### 4 配置源代码

构建 Zabbix 服务器、Zabbix proxy 或 Zabbix agent 需要使用带 GNU 扩展的 C99。
可以通过设置 `CFLAGS="-std=gnu99"` 显式指定该版本：

    export CFLAGS="-std=gnu99"

::: noteclassic
如果是从 [Zabbix Git 仓库](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse) 安装，
则需要先运行：

`./bootstrap.sh`
:::

在为 Zabbix 服务器或 proxy 配置源代码时，必须指定要使用的数据库类型。
同一时间内，服务器或 proxy 进程只能编译一种数据库类型。

要查看所有受支持的配置选项，请在解压后的 Zabbix 源代码目录中运行：

    ./configure --help

要为 Zabbix 服务器和 agent 配置源代码，可以运行类似如下命令：

    ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ares

要为 Zabbix 服务器（使用 PostgreSQL 等）配置源代码，可以运行：

    ./configure --enable-server --with-postgresql --with-net-snmp

要为 Zabbix proxy（使用 SQLite 等）配置源代码，可以运行：

    ./configure --prefix=/usr --enable-proxy --with-net-snmp --with-sqlite3 --with-ssh2

要为 Zabbix agent 配置源代码，可以运行：

    ./configure --enable-agent

或者，对于 Zabbix agent 2：

    ./configure --enable-agent2

::: noteclassic
构建 Zabbix agent 2 必须安装[受支持的 Go 版本](/manual/installation/requirements#agent-2)。
:::

编译选项说明：

-   `--enable-agent` - 编译 Zabbix agent，以及 [Zabbix get](/manual/concepts/get) 和 [Zabbix sender](/manual/concepts/sender) 命令行工具。
-   `--with-libcurl` - 虚拟机监控、SMTP 身份验证以及 `web.page.*` [Zabbix agent 监控项](/manual/config/items/itemtypes/zabbix_agent)所必需。另请参见：[要求](/manual/installation/requirements#serverproxy)（libcurl）。
-   `--with-libxml2` - 虚拟机监控所必需。
-   `--with-libpcre[=DIR]` - Zabbix 始终使用 PCRE 库进行编译；此选项仅允许指定自定义的 PCRE 安装路径。
-   `--with-mysql=/path/to/mysql_config` - 指定特定 MySQL 客户端库配置文件的路径。当安装了多个版本的 MySQL 或 MariaDB 时很有用。
-   `--with-oracle` - 指定 Oracle Call Interface (OCI) API 的位置。
-   `--enable-static` - 静态链接库（[Solaris](https://docs.oracle.com/cd/E18659_01/html/821-1383/bkajp.html) 不支持）。如果您计划将编译后的二进制文件分发到没有所需库的系统上，请使用此选项。不建议在构建 Zabbix 服务器时使用。若要静态构建服务器，需要每个外部库的静态版本。configure 脚本不会自动检查这一点。
-   `--with-stacksize=<value>` - 设置每个线程的栈大小，单位为 KB（例如 `--with-stacksize=512`）。如果由于栈溢出导致 Zabbix 崩溃或卡死，您可以增大该值（例如在默认线程栈限制较低的系统上进行[预处理](/manual/config/items/preprocessing)时）。

::: noteimportant
如果 `./configure` 因缺少库或其他问题而失败，请查看 `config.log` 文件以获取详细错误信息。

例如，如果缺少 `libssl`，直接看到的错误信息可能会具有误导性：

    checking for main in -lmysqlclient... no
    configure: error: Not found mysqlclient library

在这种情况下，`config.log` 会显示真正的原因：

    /usr/bin/ld: cannot find -lssl
    /usr/bin/ld: cannot find -lcrypto

:::

另请参见：

-   [编译启用加密支持的 Zabbix](/manual/encryption#compiling-zabbix-with-encryption-support)
-   已知的[编译问题](/manual/installation/known_issues/compilation_issues)

[comment]: # ({/ecd76a0a-8ff1b41c})

[comment]: # ({1d0f465e-08edd3dc})
##### 5 制作并安装所有内容

::: noteclassic
如果是从 [Zabbix Git repository](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse) 安装，
需要先运行：

`$ make dbschema` 
:::

    make install

此步骤应由具有足够权限的用户执行（通常为
'root'，或使用 `sudo`）。

默认情况下，运行 `make install` 会将守护进程二进制文件
（zabbix\_server、zabbix\_agentd、zabbix\_proxy）安装到 /usr/local/sbin，并将
客户端二进制文件（zabbix\_get、zabbix\_sender）安装到 /usr/local/bin。

::: noteclassic
如需指定不同于 /usr/local 的位置，请在前一步配置源代码时使用
--prefix 参数，例如
--prefix=/home/zabbix。在这种情况下，守护进程二进制文件将安装到
<prefix>/sbin，而工具程序将安装到 <prefix>/bin。手册页将安装到
<prefix>/share。
:::

[comment]: # ({/1d0f465e-08edd3dc})

[comment]: # ({f36d53db-112b74f7})
##### 6 审查并编辑配置文件

-   编辑 Zabbix agent 配置文件 file
    **/usr/local/etc/zabbix\_agentd.conf**

您需要为每台安装了 zabbix\_agentd 的 主机 配置此 file。

必须在 file 中指定 Zabbix server 的 **IP 地址**，来自其他 主机 的连接将被拒绝。

-   编辑 Zabbix server 配置文件 file
    **/usr/local/etc/zabbix\_server.conf**

必须指定数据库名称、用户名和密码（如果使用的话）。

如果您是小型部署（监控不超过十个 主机），其余参数保持默认即可。但若想最大化 Zabbix 服务器（或 proxy）性能，则应修改默认参数。

-   如果安装了 Zabbix proxy，请编辑 proxy 配置文件
    file **/usr/local/etc/zabbix\_proxy.conf**

必须指定服务器 IP 地址和 proxy 主机名（必须为服务器所知），以及数据库名称、用户名和密码（如果使用的话）。

::: noteclassic
使用 SQLite 时必须指定数据库 file 的完整路径；无需数据库用户名和密码。
:::

[comment]: # ({/f36d53db-112b74f7})

[comment]: # ({67632a65-bbdd82ac})
##### 7 启动守护进程

在服务器端运行 zabbix\_server。

    zabbix_server

::: noteclassic
请确保您的系统允许分配 36MB（或稍多一些）的共享内存，否则服务器可能无法启动，并且您会在服务器日志文件中看到 "Cannot allocate shared memory for <type of cache>."。这可能发生在 FreeBSD、Solaris 8 上。
:::

在所有受监控的机器上运行 zabbix\_agentd。

    zabbix_agentd

::: noteclassic
请确保您的系统允许分配 2MB 的共享内存，否则 agent 可能无法启动，并且您会在 agent 日志文件中看到 "Cannot allocate shared memory for collector."。这可能发生在 Solaris 8 上。
:::

如果您已安装 Zabbix proxy，请运行 zabbix\_proxy。

    zabbix_proxy

[comment]: # ({/67632a65-bbdd82ac})

[comment]: # ({8d29e485-c9f154ca})
#### 安装 Zabbix 前端

[comment]: # ({/8d29e485-c9f154ca})

[comment]: # ({7ed89806-ed4e56ce})
##### 复制PHP文件

Zabbix前端使用PHP编写，因此要run它，需要一个支持PHP的Web服务器。  
安装只需将ui目录中的PHP文件复制到Web服务器的HTML文档目录中即可。

Apache Web服务器HTML文档目录的常见位置包括：

-   /usr/local/apache2/htdocs（从源代码安装Apache时的默认目录）
-   /srv/www/htdocs（OpenSUSE、SLES）
-   /var/www/html（Debian、Ubuntu、Fedora、RHEL）

建议使用子目录而不是HTML根目录。  
要create一个子目录并将Zabbix前端文件copy到该目录中，请execute执行以下命令，并将<htdocs>替换为实际目录：

    mkdir <htdocs>/zabbix
    cd ui
    cp -a . <htdocs>/zabbix

如果计划使用除英语之外的其他语言，请参阅[Installation of additional frontend languages](/manual/appendix/install/locales)以获取相关说明。

[comment]: # ({/7ed89806-ed4e56ce})

[comment]: # ({ae1b267f-63583cbb})
##### 安装前端

有关 Zabbix 前端安装向导的信息，请参见 [Web interface installation](/manual/installation/frontend) 页面。

[comment]: # ({/ae1b267f-63583cbb})

[comment]: # ({8751cf7f-5ea0c792})
#### 安装 Zabbix agent 2 可加载插件

只有在您希望监控内置插件未覆盖的目标时，才需要安装 Zabbix agent 2 可加载插件（例如，MongoDB 服务器或集群、PostgreSQL 及其分支等）。
请参阅 [可加载插件](/manual/extensions/plugins#loadable-plugins) 和 [内置插件](/manual/extensions/plugins#built-in-plugins) 的完整列表。

::: noteimportant
在安装插件之前，请先查看其 README 文件。
其中可能包含特定要求和安装说明。
:::

要从源代码安装，请先 [下载](https://cdn.zabbix.com/zabbix-agent2-plugins/sources/) 并解压可加载插件源代码归档文件。

要编译插件，请进入解压后的插件目录并运行 `make`：

    make

::: noteclassic
构建 Zabbix agent 2 可加载插件必须安装 [受支持的 Go 版本](/manual/installation/requirements#agent-2)。
:::

只要 Zabbix agent 2 能够加载，插件可执行文件可以放在任意位置。
请在插件配置文件中指定插件二进制文件的路径，例如 PostgreSQL 插件的 postgresql.conf 中：

    Plugins.PostgreSQL.System.Path=/path/to/executable/zabbix-agent2-plugin-postgresql

插件配置文件的路径必须在 Zabbix agent 2 配置文件的 Include 参数中指定：

    Include=/path/to/plugin/configuration/file/postgresql.conf

有关配置插件的更多详细信息，请继续查看 [设置](/manual/extensions/plugins#configuring-plugins)。

Zabbix 提供的可加载插件使用简单的 makefile，包含以下构建目标：

-   `make` - 构建插件
-   `make clean` - 删除构建插件时创建的所有文件
-   `make check` - 运行自检（需要真实的监控目标，例如 PostgreSQL 数据库）
-   `make style` - 使用 `golangci-lint` 检查 Go 代码风格
-   `make format` - 使用 `go fmt` 格式化 Go 代码
-   `make dist` - 创建包含所有依赖项的源代码归档文件

[comment]: # ({/8751cf7f-5ea0c792})

[comment]: # ({3c8ef27d-1a519c06})
#### 安装 Java 网关

只有在您希望监控 JMX 应用程序时，才需要安装 Java 网关。Java 网关是轻量级的，不需要数据库。

要从源代码安装，首先[下载](/manual/installation/install#download-the-source-archive)并解压源代码归档文件。

要编译 Java 网关，请使用 `--enable-java` 选项运行 `./configure` 脚本。建议您指定 `--prefix` 选项，以便将安装路径设置为默认 `/usr/local` 之外的位置，因为安装 Java 网关时会创建完整的目录树，而不仅仅是一个可执行文件。

    ./configure --enable-java --prefix=$PREFIX

要将 Java 网关编译并打包为 JAR 文件，请运行 `make`。请注意，执行此步骤时，您的路径中需要包含 `javac` 和 `jar` 可执行文件。

    make

现在，您会在 `src/zabbix\_java/bin` 中得到一个 `zabbix-java-gateway-$VERSION.jar` 文件。如果您可以接受直接从发行目录中的 `src/zabbix\_java` 运行 Java 网关，那么可以继续阅读有关配置和运行 [Java 网关](/manual/java/from_sources#overview-of-files)的说明。否则，请确保您拥有足够的权限，然后运行 `make install`。

    make install

有关配置和运行 Java 网关的更多详细信息，请继续查看[设置](/manual/concepts/java/from_sources)。

[comment]: # ({/3c8ef27d-1a519c06})

[comment]: # ({a056dfd8-76c01064})
#### 安装 Zabbix web service

只有在您希望使用
[计划报告](/manual/web_interface/frontend_sections/reports/scheduled)时，才需要安装 Zabbix web service。

要从源代码安装，请先
[下载](/manual/installation/install#download-the-source-archive)并
解压源代码归档文件。

要编译 Zabbix web service，请使用
`--enable-webservice` 选项运行 `./configure` 脚本。

::: noteclassic
构建 Zabbix web service 需要安装受支持的 [Go 版本](/manual/installation/requirements#agent-2)。
:::

在安装了 web service 的机器上运行 zabbix\_web\_service：

    zabbix_web_service

有关配置计划报告生成的更多详细信息，请继续查看[设置](/manual/appendix/install/web_service)。

[comment]: # ({/a056dfd8-76c01064})

