本教程适用于以下操作系统版本

  • Debian 12(Bookworm)
  • Debian 11(Bullseye)

本页内容

  • 准备工作
  • 配置 /etc/hosts 文件
  • 添加 SaltStack 软件源
  • 配置 UFW 防火墙
  • 安装 Salt Master
  • 安装 Salt Minion
  • 将 Salt Minion 添加到 Salt Master
  • 通过 SaltStack 执行任意命令
  • 创建用于安装 LAMP 栈的 Salt State
  • 结语

Salt(或称 SaltStack)是一个用 Python 编写的开源 IT 自动化框架。它允许管理员向多台机器远程直接执行命令。

Salt 采用 Master 与 Minion 的架构设计。Salt Master 是 Salt 配置管理的中心控制器,而 Minion 则是受 Salt Master 管理的服务器,你也可以将 Minion 称为目标服务器。

本指南将向你展示如何在 Debian 12 服务器上安装 SaltStack。我们将演示如何安装 Salt Master 和 Minion、如何通过 Salt 执行任意命令,并创建第一个用于安装 LAMP 栈的 Salt state。

准备工作

在开始之前,请确保你已具备以下条件:

  • 两台或三台 Debian 12 服务器——本示例中,我们使用 IP 为 192.168.5.15 的 master 服务器,以及 IP 为 192.168.5.21 的 minion1 服务器。
  • 一个具有管理员权限的非 root 用户。

配置 /etc/hosts 文件

在本节中,你将配置 /etc/hosts 文件,使每台服务器都能通过主机名相互连接,这比使用 IP 地址更为便捷。

使用以下 nano 编辑器打开 /etc/hosts 文件。

sudo nano /etc/hosts

将主机名与对应的 IP 地址写入文件。请务必将 IP 地址和主机名替换为你自己的信息。

192.168.5.15 master
192.168.5.21 minion1

完成后保存并退出文件。

添加 SaltStack 软件源

配置完 /etc/hosts 文件后,你必须将 SaltStack 软件源添加到所有的 Debian 服务器上。SaltStack 为大多数 Linux 发行版(包括最新的 Debian 12)提供了官方软件源。

首先,使用以下命令新建目录 /etc/apt/keyrings。

mkdir /etc/apt/keyrings

使用以下命令下载 SaltStack 软件源的 GPG 密钥。

sudo curl -fsSL -o /etc/apt/keyrings/salt-archive-keyring-2023.gpg https://repo.saltproject.io/salt/py3/debian/12/amd64/SALT-PROJECT-GPG-PUBKEY-2023.gpg

下载 GPG 密钥后,使用以下命令添加 SaltStack 软件源。

echo "deb [signed-by=/etc/apt/keyrings/salt-archive-keyring-2023.gpg arch=amd64] https://repo.saltproject.io/salt/py3/debian/12/amd64/latest bookworm main" | sudo tee /etc/apt/sources.list.d/salt.list

现在更新并刷新你的 Debian 软件包索引。

sudo apt update

你可以从下方看到已添加到 Debian 服务器的 SaltStack 软件源。

在 Debian 12 上安装 SaltStack 自动化运维框架

配置 UFW 防火墙

在本示例中,你将在所有 Debian 服务器上配置并启用 UFW(Uncomplicated Firewall,简易防火墙)。因此你将安装 UFW、开放 SSH 端口,然后启动并启用 UFW。

使用以下命令在你的 Debian 系统上安装 UFW。

sudo apt install ufw -y

UFW 安装完成后,执行以下命令以启用 OpenSSH 应用配置文件。你将看到输出 Rules added(已添加规则)。

sudo ufw allow OpenSSH

现在使用以下命令启用 UFW。输入 y 进行确认,启动并启用 UFW。

sudo ufw enable

UFW 启动并启用后,你将看到输出 Firewall is active ...(防火墙已激活……)。

在 Debian 12 上安装 SaltStack 自动化运维框架

安装 Salt Master

完成上述步骤后,你就可以开始安装 SaltStack 了。你将在 master 服务器上安装并配置 Salt Master。

在 master 服务器上,运行以下命令安装 salt-master 软件包。输入 Y 确认安装。

sudo apt install salt-master

在 Debian 12 上安装 SaltStack 自动化运维框架

安装完成后,使用以下 nano 编辑器命令打开 Salt Master 的默认配置文件 /etc/salt/master。

sudo nano /etc/salt/master

将默认的 interface 替换为你本地的 IP 地址。在本示例中,master 服务器的 IP 地址为 192.168.5.15。

interface: 192.168.5.15

保存文件并在完成后退出。

现在运行以下命令重启 salt-master 服务并应用你的更改。

sudo systemctl restart salt-master

然后验证 salt-master 服务,确保该服务正在运行。

sudo systemctl status salt-master

如果正在运行,你将看到类似 active (running)(运行中)的输出。

在 Debian 12 上安装 SaltStack 自动化运维框架

接下来,运行以下命令开放 Salt Master 将要使用的 TCP 端口 4505 和 4506。

sudo ufw allow 4505,4506/tcp

最后,使用以下命令检查 master 服务器上的端口列表。请确保端口 4505 和 4506 的访问已被允许。

sudo ufw status

在 Debian 12 上安装 SaltStack 自动化运维框架

安装 Salt Minion

既然你已经配置好 Salt Master,接下来请在 minion1 服务器上配置 Salt Minion。你将安装 salt-minion 并将其配置为连接到 Salt Master 服务器。

使用以下命令将 salt-minion 软件包安装到 minion1 服务器。输入 Y 确认安装。

sudo apt install salt-minion

在 Debian 12 上安装 SaltStack 自动化运维框架

安装完成后,使用 nano 编辑器命令打开 Salt Minion 的配置文件 /etc/salt/minion。

sudo nano /etc/salt/minion

将 Salt Master 的 IP 地址填入 master 参数,如下所示:

master: 192.168.5.15

保存文件并退出编辑器。

接下来,运行以下命令重启 salt-minion 服务并应用你的更改。

sudo systemctl restart salt-minion

最后,验证 salt-minion 服务,确保该服务正在运行。Salt Minion 会自动注册到 Salt Master 服务器。

sudo systemctl status salt-minion

请确保 salt-minion 服务正在运行,如下所示:

在 Debian 12 上安装 SaltStack 自动化运维框架

将 Salt Minion 添加到 Salt Master

配置好 Salt Minion 后,你仍需接受来自 Minion 服务器的注册密钥。

首先,运行以下命令查看 master 服务器上的密钥列表。

salt-key --finger-all

如果一切正常,你将看到 minion1 服务器(即 Salt Minion 服务器)的密钥。

在 Debian 12 上安装 SaltStack 自动化运维框架

现在运行以下命令接受 minion1 服务器的密钥。输入 Y 确认并接受该密钥。

salt-key -a minion1

接下来,再次查看 minion1 服务器上的密钥列表。你将看到 minion1 服务器的密钥列在 Accepted Keys(已接受密钥)部分中。

salt-key --finger-all

在 Debian 12 上安装 SaltStack 自动化运维框架

现在你可以使用命令测试与 Salt Minion 服务器的连接。你可以通过主机名指定目标服务器,也可以使用 '*' 字符来面向所有可用的 Salt Minion 服务器。

salt minion1 test.ping
salt * test.ping

如果与 Salt Minion 的连接成功,你将看到输出 True(真)。

最后,使用以下命令验证 Salt 版本。

salt minion1 test.version

本示例中安装的是 Salt Minion 3007.0。

在 Debian 12 上安装 SaltStack 自动化运维框架

通过 SaltStack 执行任意命令

完成所有配置后,你将通过在 master 服务器上对 minion1 服务器执行任意命令来测试你的 SaltStack 安装。

运行以下命令更新 Minion 服务器的软件包索引仓库。

salt '*' pkg.refresh_db

现在运行以下命令查询目标服务器上的可升级软件包。

salt '*' pkg.list_upgrades

接下来,运行以下命令显示 apache2 软件包的信息。

salt '*' pkg.show apache2

要检查 Minion 服务器上正在运行的服务,运行以下命令。

salt '*' service.get_running
salt '*' service.execs

创建用于安装 LAMP 栈的 Salt State

在本节中,你将学习如何创建第一个 Salt State,用于将 LAMP 栈(Apache、MariaDB 和 PHP)安装到 minion1 服务器。

首先,使用以下命令新建目录 /srv/salt/lamp。

mkdir -p /srv/salt/lamp

现在使用以下 nano 编辑器创建新的 Salt state 初始化文件 /srv/salt/lamp/init.sls。

nano /srv/salt/lamp/init.sls

将以下配置添加到文件中。通过它,你将在目标服务器上安装 LAMP 栈(Apache、MariaDB 和 PHP)。

lamp_stack:
 pkg.installed:
 - pkgs:
 - apache2
 - mariadb-server
 - php
 - libapache2-mod-php
apache2:
 service.running:
 - enable: True
 - reload: True
mariadb:
 service.running:
 - enable: True
 - reload: True

保存文件并退出。

现在运行以下命令,针对 Salt Minion 检查你的 Salt state 配置。请确保没有任何错误。

sudo salt * state.show_sls lamp

在 Debian 12 上安装 SaltStack 自动化运维框架

接下来,运行以下命令将 Salt state 'lamp' 应用到 minion1 服务器。

sudo salt minion1 state.apply lamp

当过程完成时,你将获得如下输出:

在 Debian 12 上安装 SaltStack 自动化运维框架

最后,运行以下命令验证 minion1 服务器上的 Apache 和 MariaDB 服务。

salt '*' service.get_running

请确保 apache2 与 mariadb 两个服务都在运行。

在 Debian 12 上安装 SaltStack 自动化运维框架

结语

恭喜!你已成功在 Debian 12 服务器上完成了 SaltStack(Salt Master 与 Minion)的安装。你还学习了如何对 Minion 服务器执行任意命令,并创建了第一个用于安装 LAMP 栈(Apache2、MariaDB 和 PHP)的 Salt state。