本教程适用于以下操作系统版本
- 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 软件源。

配置 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 ...(防火墙已激活……)。

安装 Salt Master
完成上述步骤后,你就可以开始安装 SaltStack 了。你将在 master 服务器上安装并配置 Salt Master。
在 master 服务器上,运行以下命令安装 salt-master 软件包。输入 Y 确认安装。
sudo apt install salt-master

安装完成后,使用以下 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)(运行中)的输出。

接下来,运行以下命令开放 Salt Master 将要使用的 TCP 端口 4505 和 4506。
sudo ufw allow 4505,4506/tcp
最后,使用以下命令检查 master 服务器上的端口列表。请确保端口 4505 和 4506 的访问已被允许。
sudo ufw status

安装 Salt Minion
既然你已经配置好 Salt Master,接下来请在 minion1 服务器上配置 Salt Minion。你将安装 salt-minion 并将其配置为连接到 Salt Master 服务器。
使用以下命令将 salt-minion 软件包安装到 minion1 服务器。输入 Y 确认安装。
sudo apt install salt-minion

安装完成后,使用 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 服务正在运行,如下所示:

将 Salt Minion 添加到 Salt Master
配置好 Salt Minion 后,你仍需接受来自 Minion 服务器的注册密钥。
首先,运行以下命令查看 master 服务器上的密钥列表。
salt-key --finger-all
如果一切正常,你将看到 minion1 服务器(即 Salt Minion 服务器)的密钥。

现在运行以下命令接受 minion1 服务器的密钥。输入 Y 确认并接受该密钥。
salt-key -a minion1
接下来,再次查看 minion1 服务器上的密钥列表。你将看到 minion1 服务器的密钥列在 Accepted Keys(已接受密钥)部分中。
salt-key --finger-all

现在你可以使用命令测试与 Salt Minion 服务器的连接。你可以通过主机名指定目标服务器,也可以使用 '*' 字符来面向所有可用的 Salt Minion 服务器。
salt minion1 test.ping
salt * test.ping
如果与 Salt Minion 的连接成功,你将看到输出 True(真)。
最后,使用以下命令验证 Salt 版本。
salt minion1 test.version
本示例中安装的是 Salt Minion 3007.0。

通过 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

接下来,运行以下命令将 Salt state 'lamp' 应用到 minion1 服务器。
sudo salt minion1 state.apply lamp
当过程完成时,你将获得如下输出:

最后,运行以下命令验证 minion1 服务器上的 Apache 和 MariaDB 服务。
salt '*' service.get_running
请确保 apache2 与 mariadb 两个服务都在运行。

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