本教程适用于以下操作系统版本
- Debian 12 (Bookworm)
- Debian 11 (Bullseye)
本页内容
- 先决条件
- 安装依赖项
- 配置 PostgreSQL 数据库
- 安装 Ansible Semaphore
- 配置 Ansible Semaphore
- 通过 Systemd 运行 Ansible Semaphore
- 通过 Nginx 反向代理运行 Ansible Semaphore
- 配置 UFW 防火墙
- 使用 Letsencrypt 加固 Ansible Semaphore
- 结语
Ansible Semaphore 是 Ansible playbook 的一款开源 Web UI。它通过 Web 浏览器利用 Ansible 自动化实现部署。Ansible Semaphore 完全使用 Go 语言编写,可运行在 Linux、Windows 和 macOS 上。Ansible Semaphore 允许你通过一个直观且响应迅速的 Web 管理面板,借助 Ansible 进行部署。你可以随时回滚、恢复配置,并管理环境、密钥、清单(inventories)和访问密钥。它还允许你按计划运行 playbook,并提供详细的日志和通知。
Ansible Semaphore 可实现安全的部署与配置管理。它提供访问控制功能,可用于管理用户并允许运行特定的 playbook。
在本教程中,你将在 Debian 11 服务器上安装 Ansible Semaphore。你将使用最新版本的 Ansible 搭建 Ansible Semaphore,使用 PostgreSQL 服务器存储用户数据,并使用 Nginx Web 服务器作为 Ansible Semaphore Web 应用的反向代理。
先决条件
要完成本教程,你必须满足以下要求:
- 一台运行 Debian 11 的 Linux 服务器 —— 本例使用主机名为 'semaphore' 的 Debian 服务器。
- 一个拥有 sudo/root 权限的非 root 用户 —— 本例使用名为 'bob' 的非 root 用户。
- 一个指向服务器 IP 地址的域名 —— 本例使用的域名为 'ansible.howtoforge.local'。
安装依赖项
首先,你将安装一些用于安装 Ansible Semaphore 所需的软件包依赖。你将安装最新版本的 Ansible、PostgreSQL 数据库服务器以及 Nginx Web 服务器。这些软件包在 Debian 软件源中默认都可直接获取。
首先,执行以下命令以更新并刷新你的 Debian 软件包索引。
sudo apt update
软件包索引更新完成后,运行以下 apt 命令为系统安装一些基础依赖。出现提示时输入 y 并按 ENTER 继续。
sudo apt install git curl wget software-properties-common

接下来,你还需要安装一些用于运行 Ansible Semaphore 的软件包依赖。这包括最新版本的 Ansible、PostgreSQL 服务器以及 Nginx Web 服务器。这些软件包在 Debian 软件源中默认都可直接获取。
输入以下命令以安装 Ansible、PostgreSQL 和 Nginx。出现提示时输入 y 并按 ENTER。
sudo apt install ansible postgresql nginx

在 Ansible、PostgreSQL 和 Nginx 安装完成后,执行以下命令来验证 PostgreSQL 与 Nginx 服务的状态。
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
下方输出确认 PostgreSQL 服务器已设置为开机自启,并在系统启动时自动运行。此外,安装完成后它默认已在运行。

以下是用于检查 Nginx 服务的命令。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
下方输出确认 Nginx Web 服务器已设置为开机自启,并在系统启动时自动运行。此外,安装完成后它默认已在运行。

至此,你已为 Ansible Semaphore 安装好软件包依赖,包括最新版本的 Ansible、PostgreSQL 数据库服务器以及 Nginx Web 服务器。
配置 PostgreSQL 数据库
默认情况下,Ansible Semaphore 支持多种数据库,例如 MySQL/MariaDB、BoldDB 以及 PostgreSQL 服务器。安装 PostgreSQL 服务器后,你现在将创建供 Ansible Semaphore 使用的 PostgreSQL 数据库和用户。
通过执行以下命令登录 PostgreSQL shell。登录后,PostgreSQL 提示符将变为 'postgres=#' 的形式。
sudo -u postgres psql
现在输入以下查询语句,创建供 Ansible Semaphore 使用的新的 PostgreSQL 数据库和用户。本例中,你将创建一个名为 'semaphore' 的新用户以及名为 'semaphoredb' 的数据库。另外,请务必修改该查询中的密码。
CREATE USER semaphore WITH PASSWORD 'p4ssw0rdSemaphore';
CREATE DATABASE semaphoredb OWNER semaphore;

接下来,输入以下查询语句,验证 PostgreSQL 服务器上的用户和数据库列表。如果数据库创建成功,你应在数据库列表中看到名为 'semaphoredb' 的数据库;对于 PostgreSQL 用户,你应在用户列表中看到用户 'semaphore'。
\du
\l
PostgreSQL 服务器上的用户列表。

PostgreSQL 服务器上的数据库列表。

现在你已为 Ansible Semaphore 创建了数据库和用户。接下来进入下方章节,开始安装 Ansible Semaphore。
安装 Ansible Semaphore
在软件包依赖安装完成、PostgreSQL 数据库和用户创建完毕后,你接下来将安装 Ansible Semaphore 软件包。针对不同 Linux 发行版提供了多种软件包,可访问 Ansible Semaphore 官方 GitHub 页面获取具体版本信息。
执行以下命令下载 Ansible Semaphore 的 Debian 软件包文件。本例中,你将通过 Ansible Semaphore 官方 GitHub 页面下载最新版本。
VER=$(curl -s https://api.github.com/repos/ansible-semaphore/semaphore/releases/latest|grep tag_name | cut -d '"' -f 4|sed 's/v//g')
wget -q https://github.com/ansible-semaphore/semaphore/releases/download/v${VER}/semaphore_${VER}_linux_amd64.deb
Debian 软件包文件下载完成后,你应在当前工作目录中看到文件 'semaphore_2.8.77_linux_amd64.deb'。另外,本文撰写时,Ansible Semaphore 的最新版本为 2.8.77。
现在执行以下 dpkg 命令,安装 Ansible Semaphore 的 Debian 软件包文件 'semaphore_${VER}_linux_amd64.deb'。
sudo dpkg -i semaphore_${VER}_linux_amd64.deb

Ansible Semaphore 安装完成后,名为 'semaphore' 的可执行文件将位于 '/usr/bin' 目录下。
运行以下命令验证 'semaphore' 可执行文件的完整路径。
which semaphore
然后,运行以下 'semaphore' 命令,验证系统上已安装的 Ansible Semaphore 当前版本,并查看 'semaphore' 命令的帮助页面。
semaphore version
semaphore help

至此,Ansible Semaphore 已安装完成。如需进一步便利,你还可以为 'semaphore' 命令工具配置 bash 自动补全。
为此,首先通过以下 apt 命令在你的 Debian 系统上安装 'bash-completion' 软件包。
sudo apt install bash-completion
'bash-completion' 安装完成后,使用以下 nano 编辑器命令打开 bash 配置文件 '~/.bashrc'。
sudo nano ~/.bashrc
在文件末尾添加以下配置。
if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi source <(semaphore completion bash)
完成后保存并关闭文件。
接下来,重新加载 '~/.bashrc' 配置文件,然后输入 'semaphore' 命令并按 TAB 键,即可列出 Ansible Semaphore 命令工具的可用选项和参数。
source ~/.bashrc
semaphore TAB
配置好 Ansible Semaphore 自动补全后,你应该能看到类似这样的命令可用参数列表。

在本节中,你已从 Debian 软件包文件安装 Ansible Semaphore,并为 'semaphore' 命令工具配置了自动补全。接下来,你将对 Ansible Semaphore 进行安装配置。
配置 Ansible Semaphore
安装 Ansible Semaphore 后,你现在将使用默认的 PostgreSQL 作为数据库服务器来配置你的安装。同时,你将生成 Ansible Semaphore 的配置文件,该文件将保存在 '/etc/semaphore' 目录中。
首先,创建一个新配置目录 '/etc/semaphore',并将当前工作目录切换到其中。该目录将用于存储 Ansible Semaphore 的配置。
mkdir -p /etc/semaphore; cd /etc/semaphore
现在执行以下 'semaphore' 命令,对 Ansible Semaphore 安装进行设置与配置。
semaphore setup
命令执行后,你将被要求输入一些 Ansible Semaphore 的配置项。
- 首先,选择数字 3,以使用 PostgreSQL 数据库服务器配置 Ansible Semaphore。然后,输入 PostgreSQL 数据库的名称、用户名和密码。
- 对于 Playbook 路径,输入新的目录,例如 '/opt/playbook'。
- 其余配置直接按 ENTER 使用默认设置即可,你可以在安装完成后再进行设置。
图片
接下来,你还需要创建一个 Ansible Semaphore 的新管理员用户。输入你的用户名、电子邮件地址和密码。配置完成后,你将收到类似下方的输出。同时,你还会看到生成的 Ansible Semaphore 配置文件 '/etc/semaphore/config.json'。

至此,你已使用 PostgreSQL 数据库服务器完成 Ansible Semaphore 的安装配置,并设置了 Ansible Semaphore 的管理员用户和密码。此外,你还将默认 Playbook 路径目录配置为 '/opt/semaphore'。
现在你已准备好启动 Ansible Semaphore。接下来,你将通过 Systemd 设置并运行 Ansible Semaphore。
通过 Systemd 运行 Ansible Semaphore
在本节中,你将创建一个新的 systemd unit 文件,用于管理 Ansible Semaphore 进程。这样你就可以方便地通过 systemctl 命令工具来管理 Ansible Semaphore。
使用以下 nano 编辑器命令创建新的 systemd unit 文件 '/etc/systemd/system/semaphore.service'。
sudo nano /etc/systemd/system/semaphore.service
在文件中添加以下内容。
[Unit] Description=Semaphore Ansible Documentation=https://github.com/ansible-semaphore/semaphore Wants=network-online.target After=network-online.target [Service] Type=simple ExecReload=/bin/kill -HUP $MAINPID ExecStart=/usr/bin/semaphore service --config=/etc/semaphore/config.json SyslogIdentifier=semaphore Restart=always [Install] WantedBy=multi-user.target
完成后保存文件并退出编辑器。
现在执行以下命令,重新加载 systemd 管理器并应用新的 systemd unit 文件。此后,你就可以通过 systemctl 命令启动 Ansible Semaphore 服务了。
sudo systemctl daemon-reload
执行以下 'systemctl' 命令,启动并设置 'semaphore' 服务开机自启。该服务默认运行在 TCP 端口 '3000' 上。
sudo systemctl start semaphore
sudo systemctl enable semaphore

然后,验证 'semaphore' 服务,确保该服务正在运行且已设置为开机自启。
sudo systemctl status semaphore
输出 'enabled' 表示 Ansible Semaphore 将在系统启动时自动运行,且其当前状态为运行中。

最后,你也可以通过 Web 浏览器访问 Ansible Semaphore。打开浏览器并访问服务器 IP 地址加上默认端口 3000(例如:http://192.168.5.10:3000/)。Ansible Semaphore 运行后,你应能看到 Ansible Semaphore Web 应用的登录页面。

现在,Ansible Semaphore 已作为 systemd 服务在后台运行,并使用默认端口 3000。接下来,你将把 Nginx 配置为 Ansible Semaphore 的反向代理。
通过 Nginx 反向代理运行 Ansible Semaphore
至此,你已完成 Ansible Semaphore 的安装,它当前运行在默认端口 3000 上。在本节中,你将把 Nginx 配置为 Ansible Semaphore 的反向代理。所以在开始之前,请确保你已为本次安装准备好域名。
使用以下 nano 编辑器命令创建新的 Nginx server block 文件 '/etc/nginx/sites-available/semaphore.conf'。
sudo nano /etc/nginx/sites-available/semaphore.conf
在文件中添加以下内容,并务必将 'server_name' 参数改为你的域名。
upstream semaphore {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name ansible.howtoforge.local;
client_max_body_size 0;
chunked_transfer_encoding on;
location / {
proxy_pass http://semaphore/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
}
location /api/ws {
proxy_pass http://semaphore/api/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
}
}
完成后保存并关闭文件。
接下来,执行以下命令启用 server block 配置 'semaphore.conf'。然后,验证 Nginx 配置,确保配置文件正确无误。操作成功后,你应看到类似 'syntax is ok - test is successful' 的输出。
sudo ln -s /etc/nginx/sites-available/semaphore.conf /etc/nginx/sites-enabled
sudo nginx -t
最后,重启 Nginx 服务以使更改生效。现在你可以通过域名访问 Ansible Semaphore 安装。
sudo systemctl restart nginx

配置 UFW 防火墙
在本例中,你将通过 UFW 在 Debian 系统上安装并启用防火墙。你将使用 UFW 开放 SSH、HTTP 和 HTTPS 服务。
首先,通过以下 apt 命令安装 UFW 软件包。输入 y 并按 ENTER 继续。
sudo apt install ufw

接下来,运行以下命令将 OpenSSH 和 'Nginx Full' 应用添加到 UFW。OpenSSH 应用将开放默认的 SSH 端口 22,而 'Nginx Full' 应用将同时开放 HTTP 和 HTTPS 端口。
sudo ufw allow OpenSSH
sudo ufw allow "Nginx Full"
现在运行以下命令启动并启用 UFW。输入 y 并按 ENTER 确认。
sudo ufw enable

最后,使用以下命令验证 UFW 的状态。你应看到 UFW 显示 'Status: Active',且 OpenSSH 和 'Nginx Full' 应用均已添加并显示在规则列表中。
sudo ufw status

使用 Letsencrypt 加固 Ansible Semaphore
配置好 UFW 后,你现在将通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书来加固 Ansible Semaphore。你将安装带有 Certbot-Nginx 插件的 Certbot,然后从 Letsencrypt 生成 SSL/TLS 证书。
执行以下命令安装 Certbot 和 Certbot-Nginx 插件。出现提示时,输入 y 确认并按 ENTER 继续。
sudo apt install certbot python3-certbot-nginx

Certbot 安装完成后,运行以下命令为你的域名生成 SSL 证书并加固 Ansible Semaphore 安装。请务必修改该命令中的电子邮件地址和域名。
sudo certbot --nginx --agree-tos --no-eff-email --redirect --email
[email protected]
-d ansible.howtoforge.local
流程完成后,你的 SSL/TLS 证书将生成在 '/etc/letsencrypt/live/yourdomain.com/' 目录中。此外,Ansible Semaphore 现在可通过安全的 HTTPS 连接访问,并会自动将所有 HTTP 请求重定向到安全的 HTTPS 连接。
现在打开 Web 浏览器,访问你 Ansible Semaphore 安装的域名(例如:https://ansible.howtoforge.local/auth/login)。当你的 Nginx 配置正确且 SSL Letsencrypt 正常工作时,你应能看到 Ansible Semaphore 的登录页面。
输入你的 Ansible Semaphore 管理员用户名和密码,然后点击 SIGN IN(登录)进行确认。

成功后,系统会要求你为本次安装创建第一个项目。输入项目名称,然后点击 CREATE(创建)。

创建第一个项目后,你应能看到 Ansible Semaphore 的管理仪表盘。

结语
在本教程中,你已在 Debian 11 服务器上安装并配置了 Ansible Semaphore,使用 PostgreSQL 作为数据库服务器,并使用 Nginx 作为 Ansible Semaphore 的反向代理。你学习了 PostgreSQL 创建数据库和用户的基本用法,以及用于反向代理的 Nginx server block 的基本配置。
此外,你还通过 UFW 以及由 Letsencrypt 生成的 SSL/TLS 证书加固了 Ansible Semaphore 安装。
有了这些基础,你现在可以通过 Web 管理面板将你的 Ansible playbook 集成到 Ansible Semaphore 中。你还可以通过 Email、Slack 等多种方式配置通知系统。如需详细信息,请访问 Ansible Semaphore 应用的官方文档。