跳转至
For the complete DHIS2 documentation index, see llms.txt.

导言{ #getting_started_linux_automated_install }

DHIS2 是一个可免费访问、开源和适应性强的软件平台。它的目的是收集、管理、可视化和分析来自不同来源和程序的健康数据。DHIS2 的组件包括代理(Nginx/Apache2)、Tomcat 服务器、PostgreSQL 数据库以及可选的 APM 和服务器监控工具。本快速入门向您展示如何使用 dhis2-server 工具将 dhis2 及其组件安装到单个服务器上。

先决条件{#getting_started_prerequisites }

  1. 运行 Ubuntu 22.04 或 24.04 的服务器
  2. 使用具有 "sudo "权限的 "非 root "用户进行 SSH 访问

安装 DHIS2{ #installing-dhis2 }

  1. 确保服务器防火墙处于激活状态,且允许使用 SSH 端口。将 {ssh_port} 替换为实际 SSH 端口号。
    sudo ufw limit {ssh_port}/tcp
    sudo ufw enable
    
  2. 通过 SSH 连接到服务器,然后从 "https://github.com/dhis2/dhis2-server-tools "克隆版本库。
    git clone https://github.com/dhis2/dhis2-server-tools.git
    
  3. 运行安装
    cd dhis2-server-tools/deploy
    cp inventory/hosts.template inventory/hosts
    sudo ./deploy.sh
    
  4. 打开 DHIS2 网络界面,网址为 https://{server_ip}/dhis,用实际 IP 地址代替 {server_ip}。使用默认凭据:admin "为用户名,"district "为密码。
    https://{server_ip}/dhis
    

下一步工作{ #next-steps }

配置完全合格域名{ #configure-fully-qualified-domain-name }

  • 编辑清单主机文件并设置 fqdn 变量,请使用自己选择的编辑器。
    vim inventory/hosts
    fqdn=dhis.example.com
    
  • 保存更改并再次运行安装、
sudo ./deploy.sh

Important

To use Let's Encrypt, ensure the domain is mapped to your server's public IP address before setting fqdn. Alternatively, you can use a custom TLS certificate.

添加实例{ #adding-an-instance }

您可以在一台服务器上运行多个实例。添加一个实例将创建一个单独的 lxd 容器。

  • 编辑 "dhis2-server-tools/deploy/inventory/hosts "文件中的
    vim dhis2-server-tools/deploy/inventory/hosts
    
  • 在"[实例]"部分下添加一行新内容,如下所示、
    [instances]
    dhis    ansible_host=172.19.1.11   database_host=postgres # your first instance
    hmis    ansible_host=172.19.1.12   database_host=postgres # your second instance
    

名称 hmis 和 ansible_host 172.19.1.12 应该是唯一的。

将自定义 TLS 证书部署到反向代理{ #deploying-custom-tls-certificate-to-the-reverse-proxy }

在某些情况下,您可能拥有自己的 TLS 证书,但没有使用 LetsEncrypt。下面是您如何指示工具使用自己的 TLS 证书。

您需要准备好 TLS 证书文件和相应的密钥。

  • 将 TLS 证书和密钥复制到 dhis2-server-tools/deploy/roles/proxy/files/ 中,它们应分别命名为 customssl.crtcustomssl.key

  • 编辑 "inventory/hosts "文件,将 "SSL_TYPE "参数设置为 "customssl",配置工具以使用复制的 TLS 证书和密钥,见下文、

SSL_TYPE=customssl

DHIS2 实例变量{ #dhis2-instance-variables }

这些变量是 dhis2 实例的特定变量,就像 PostgreSQL 变量一样,可以在清单主机中定义,也可以在 dhis2-server-tools/deploy/inventory/host_vars/ 中创建的文件中定义。

cp dhis2-server-tools/deploy/inventory/host_vars/dhis.template dhis2-server-tools/deploy/inventory/host_vars/dhis

变量列表可在此处找到: 实例配置变量

Nginx 配置

Ansible 根据是否定义了**完全合格域名(FQDN)**生成 Nginx 配置文件:

条件 Ansible 生成的文件
定义了 fqdn | /etc/nginx/conf.d/{{fqdn}}.conf
未定义 fqdn | /etc/nginx/conf.d/default.conf

这些文件由 Ansible**完全管理,这意味着**任何手动更改都会在重新应用播放本时丢失**。

安全手动定制{ #safe-manual-customization }

每个 Ansible 生成的配置文件都包含一个**显式静态文件**,该文件在初始设置时创建,此后 Ansible 将不再修改。

条件 包含静态文件(可安全手动编辑)
定义了 fqdn | /etc/nginx/static/{{fqdn}}.conf
未定义 fqdn | /etc/nginx/static/default.conf文件

仅自定义动态配置中的静态文件。由于 Ansible 不会触及静态文件,因此它将**在运行播放列表时继续存在**。

重要:更改后,手动重新加载 Nginx:

sudo systemctl reload nginx

Apache2 配置{ #apache2-configuration }

Apache2 使用与 Nginx 类似的设置,但目录结构略有不同。

Ansible 管理文件{ #ansible-managed-files }

Ansible 会根据是否定义了**完全合格域名 (FQDN)** 生成主配置文件。
这些文件在每次运行 playbook 时都会被覆盖,请勿手动编辑。

条件 Ansible 生成的文件
定义了 fqdn | /etc/apache2/sites-enabled/{{fqdn}}.conf
未定义 fqdn | /etc/apache2/sites-enabled/default.conf

用于手动编辑的静态文件{ #static-files-for-manual-edits }

每个 Ansible 配置都包含一个在设置时创建的静态文件,此后不再修改。
将所有手动更改放在此处。

条件 静态文件(可安全进行手动编辑)
定义了 `fqdn etc/apache2/static/{{ fqdn }}.conf
未定义 `fqdn etc/apache2/static/default.conf

始终手动更改静态文件。这些明确包含在主 Ansible 配置中。

编辑后重新加载 Apache{ #reload-apache-after-edits }

sudo systemctl reload apache2

PostgreSQL 配置{ #postgresql-configuration }

这些工具提供了配置某些 PostgreSQL 变量的选项,以提高性能(参见 PostgreSQL 性能调优)。这些变量可以在清单文件中定义,以 "key=value "格式与主机行并列。更多详情,请参阅 Ansible host variables documentation。另外,如果主机在 hosts 文件中名为 postgres,则可以在 dhis2-server-tools/deploy/inventory/host_vars/ 目录中创建名为 postgres 的文件,并以 key: value 格式定义变量。该目录中提供了模板,可帮助您开始使用。

变量列表可在此处找到:PostgreSQL 优化变量

手动覆盖 PostgreSQL 参数

在此设置中,PostgreSQL 的部分配置由 Ansible 管理。某些配置文件是在运行 playbook 时自动生成的。本指南介绍如何安全地覆盖 PostgreSQL 设置,而不会在未来部署时丢失更改。

本示例假定您使用的是 PostgreSQL 版本 16,因此所有路径都引用了 /etc/postgresql/16/main/。 实际版本取决于 Ansible 清单或主机变量中定义的 postgresql_version 变量的值。


配置文件结构{ #configuration-file-structure }

  • Ansible 管理文件: /etc/postgresql/16/main/conf.d/dhispg.conf`。 → 由 Ansible 自动生成。 → 不要直接编辑 - 每次运行 Ansible 时都会覆盖更改。

  • 用户管理覆盖文件: /etc/postgresql/16/main/conf.d/custom。 → **可安全手动编辑**。 → 包含在dhispg.conf` 的末尾,因此优先。


包含顺序和覆盖行为{ #inclusion-order-and-override-behavior }

PostgreSQL 按以下顺序处理配置文件:

  1. postgresql.conf
  2. → 包括 dhispg.conf (由 Ansible 管理)
  3. → 包括自定义(用户管理)

任何参数均以最后定义的值为准。 自定义 "中的任何设置都将覆盖 "dhispg.conf "和 "postgresql.conf "中的值。


安全覆盖设置的步骤{ #steps-to-safely-override-settings }

  1. 打开或创建自定义配置文件:
sudo nano /etc/postgresql/16/main/conf.d/custom
  1. 添加或覆盖参数。例如
work_mem = '32MB'
max_connections = 200
  1. 保存并退出文件。

  2. 重新加载 PostgreSQL,使更改生效:

sudo systemctl reload postgresql

简表{ #summary-table }

文件路径 管理人 可编辑? 笔记
/etc/postgresql/16/main/postgresql.conf`。 PostgreSQL 没有 包括 Ansible 管理的配置
/etc/postgresql/16/main/conf.d/dhispg.conf`。 Ansible 没有 每次运行剧本时自动覆盖
/etc/postgresql/16/main/conf.d/custom`。 用户(您) 安全用于手动覆盖