导言{ #getting_started_linux_automated_install }¶
DHIS2 是一个可免费访问、开源和适应性强的软件平台。它的目的是收集、管理、可视化和分析来自不同来源和程序的健康数据。DHIS2 的组件包括代理(Nginx/Apache2)、Tomcat 服务器、PostgreSQL 数据库以及可选的 APM 和服务器监控工具。本快速入门向您展示如何使用 dhis2-server 工具将 dhis2 及其组件安装到单个服务器上。
先决条件{#getting_started_prerequisites }¶
- 运行 Ubuntu 22.04 或 24.04 的服务器
- 使用具有 "sudo "权限的 "非 root "用户进行 SSH 访问
安装 DHIS2{ #installing-dhis2 }¶
- 确保服务器防火墙处于激活状态,且允许使用 SSH 端口。将
{ssh_port}替换为实际 SSH 端口号。sudo ufw limit {ssh_port}/tcp sudo ufw enable - 通过 SSH 连接到服务器,然后从 "https://github.com/dhis2/dhis2-server-tools "克隆版本库。
git clone https://github.com/dhis2/dhis2-server-tools.git - 运行安装
cd dhis2-server-tools/deploy cp inventory/hosts.template inventory/hosts sudo ./deploy.sh - 打开 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_host172.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.crt和customssl.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 按以下顺序处理配置文件:
- postgresql.conf
- → 包括
dhispg.conf(由 Ansible 管理) - → 包括
自定义(用户管理)
任何参数均以最后定义的值为准。 自定义 "中的任何设置都将覆盖 "dhispg.conf "和 "postgresql.conf "中的值。
安全覆盖设置的步骤{ #steps-to-safely-override-settings }¶
- 打开或创建自定义配置文件:
sudo nano /etc/postgresql/16/main/conf.d/custom
- 添加或覆盖参数。例如
work_mem = '32MB'
max_connections = 200
-
保存并退出文件。
-
重新加载 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`。 | 用户(您) | 是 | 安全用于手动覆盖 |