在 Debian 12 上安装 Cachet 状态页系统。

本文内容

  1. 准备工作
  2. 安装 Docker 引擎
  3. 使用 Docker 和 PostgreSQL 数据库运行 Cachet
  4. 配置 Nginx 作为反向代理
  5. 配置 UFW(简易防火墙)
  6. 使用 HTTPS 保护 Cachet
  7. 安装 Cachet
  8. 总结

Cachet 是一个使用 PHP 编写的开源状态页系统。它允许你监控基础设施的停机时间和系统故障。Cachet 提供 JSON API、事件报告、指标、多种通知方式以及双因素认证(Two-Factor Authentication)。

在本教程中,我们将向你展示如何在 Debian 12 服务器上安装 Cachet 状态页。你将使用 Docker 容器运行 Cachet,并配合 PostgreSQL 数据库和 Nginx Web 服务器。

准备工作

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

  • 一台 Debian 12 服务器。
  • 一个具有 sudo 权限的非 root 用户。
  • 已安装并配置好的 UFW 防火墙。
  • 一个已指向服务器 IP 地址的域名。

安装 Docker 引擎

在本示例中,你将通过 Docker 以容器方式安装 Cachet。因此你需要在 Debian 系统上安装 Docker 引擎。本示例将使用官方的 Docker 引擎软件包。

首先,运行以下命令安装 curl 和 ca-certificates 软件包。

sudo apt install ca-certificates curl -y

现在,通过执行以下命令添加 Docker 软件仓库的 GPG 密钥。

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

接下来,使用以下命令为 Debian 系统添加 Docker 引擎软件仓库。

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

添加 Docker 软件仓库后,使用以下命令更新并刷新你的软件包索引。

sudo apt update

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

现在,使用以下命令将 Docker 引擎安装到系统中。输入 Y 确认安装。

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

安装完成后,Docker 服务应该会自动运行。使用以下命令检查 Docker 服务状态。

sudo systemctl status docker

你将看到类似如下的运行输出:

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

为确保你的用户可以执行并运行容器,你必须使用以下命令将其加入 docker 用户组。

sudo usermod -aG sudo alice

最后,以你的用户身份登录,并执行以下 docker 命令运行一个 hello-world 容器。

su - alice
docker run hello-world

如果配置成功,你应该会看到类似如下的 'Hello Docker' 输出:

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

使用 Docker 和 PostgreSQL 数据库运行 Cachet

安装 Docker 后,你需要下载 Cachet 项目并配置安装。本示例中,你将使用 Docker 容器以非 root 用户身份安装并运行 Cachet。

将 Cachet 项目下载到 cachet-docker 目录并进入该目录。

git clone https://github.com/cachethq/Docker.git cachet-docker
cd cachet-docker

使用以下 nano 编辑器命令打开 docker-compose.yml 文件。

nano docker-compose.yml

将默认主机端口修改为 8000,如下所示。你也可以根据自己的信息自定义数据库详情,并暂时保留 Cachet 默认版本为 2.4。

 ports:
 - 8000:8000

保存文件并退出。

现在运行以下 docker 命令,构建你的 Cachet 镜像并运行 Cachet 和 PostgreSQL 的容器。

docker compose build
docker compose up

下方是构建 Cachet 的 Docker 镜像时的截图。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

下方是运行 Cachet 和 PostgreSQL 容器/服务时的截图。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

在 Cachet 容器的详细日志中,你会看到关于 APP_KEY 配置的错误。复制生成的 APP_KEY,然后按 Ctrl+C 终止容器。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

接下来,使用 nano 编辑器重新打开 docker-compose.yml 文件。

nano docker-compose.yml

如下所示修改默认的 APP_KEY 参数。请确保包含 base64 字符串。

APP_KEY=base64:WfKUhY0wAOyr5hkxoctZUSWPGdXbBUWFvNLCoI7kTU8=

保存文件并退出。

现在运行以下 docker 命令终止 Cachet 和 PostgreSQL 容器,然后重新启动。

docker compose down
docker compose up -d

容器启动后,使用以下命令验证正在运行的容器列表。

docker compose ps

如下图所示,Cachet 和 PostgreSQL 两个容器都在运行。Cachet 容器运行在 8000 端口。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

配置 Nginx 作为反向代理

现在 Cachet 已作为容器运行在 8000 端口,你将安装并配置 Nginx 作为 Cachet 的反向代理。

使用以下命令将 Nginx 安装到你的 Debian 服务器。

sudo apt install nginx -y

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

安装完成后,使用以下 nano 编辑器命令创建新的 Nginx 服务器块配置文件 /etc/nginx/sites-available/cachet。

sudo nano /etc/nginx/sites-available/cachet

插入以下配置,并确保将 server_name 参数修改为你自己的域名。

server {
 listen 80;
 server_name status.howtoforge.local;
 location / {
 proxy_pass http://127.0.0.1:8000;
 proxy_set_header Host $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;
 }
}

保存文件并退出编辑器。

接下来,运行以下 Nginx 命令以启用 Cachet 服务器块并检查 Nginx 语法。如果语法正确,你应该会看到 'syntax is ok' 的输出。

sudo ln -s /etc/nginx/sites-available/cachet /etc/nginx/sites-enabled/
sudo nginx -t

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

最后,重启 Nginx Web 服务器以应用 Cachet 服务器块配置,并验证 Nginx 服务确保其在运行。

sudo systemctl restart nginx
sudo systemctl status nginx

如果 Nginx 正在运行,你应该会看到 active(running) 的输出。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

配置 UFW(简易防火墙)

在访问 Cachet 之前,你必须确保 HTTP 和 HTTPS 端口都已放行。在 Ubuntu 上,你可以通过 UFW(简易防火墙)允许 HTTP 和 HTTPS 的流量。

确保 UFW 已启用,现在运行以下命令在 UFW 上启用 'Nginx Full' 配置文件。这将允许 HTTP 和 HTTPS 协议流量访问你的 Nginx Web 服务器。

sudo ufw allow 'Nginx Full'

现在使用以下命令验证 UFW 中已启用的规则列表。

sudo ufw status

你将看到 'Nginx Full' 配置文件已在 UFW 上启用。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

使用 HTTPS 保护 Cachet

此时,你的 Cachet 应该可以通过 Nginx 访问。为了保护你的安装,你将通过 Let's Encrypt 的 SSL 为 Cachet 启用 HTTPS。

运行以下命令安装 Certbot 和 Certbot Nginx 插件。输入 Y 确认安装。

sudo apt install certbot python3-nginx-certbot

安装完成后,执行以下 certbot 命令为你的 Cachet 安装生成 SSL/TLS 证书。请确保将域名和邮箱地址替换为你自己的信息。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email 
[email protected]
 -d status.howtoforge.local

一切完成后,你的 SSL/TLS 证书应存储在 /etc/letsencrypt/live/status.howtoforge.local 目录。同时,你的 Cachet 应该已通过 HTTPS 得到保护。

安装 Cachet

打开你常用的 Web 浏览器并访问你的 Cachet 安装地址 https://status.howtoforge.local/ 。如果安装成功,你应该会看到如下页面。

将默认的 Cache Driver、Queue Driver 和 Session Driver 都选择为 Database(数据库)。然后,填写你的邮件服务器信息。

点击 Next 继续。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

现在设置状态页名称、默认时区和默认语言。然后再次点击 Next。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

现在通过输入用户名、邮箱和密码为 Cachet 创建一个新的管理员用户。然后,点击 Complete Setup 确认。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

完成后,你将看到如下界面 —— 点击 Go to the dashboard 。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

使用你的用户名和密码登录 Cachet,然后点击 Login 。

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

如果安装成功,你应该会看到类似如下的 Cachet 仪表盘:

在 Debian 12 上通过 Docker 安装 Cachet 状态页系统

总结

恭喜!你已成功在 Debian 12 服务器上通过 Docker 安装了 Cachet 状态页。你的 Cachet 安装正运行在 PostgreSQL 数据库和 Nginx Web 服务器之上。现在你可以使用 Cachet 监控你的站点了。