如何在 Debian 8 上使用 Cachet 创建状态页面

介绍

Cachet是一个自我托管的状态页面替代托管的服务,如 StatusPage.ioStatus.io

它是用PHP编写的,所以如果你已经有一个LAMP或LEMP服务器,它很容易安装,它有一个干净的界面,并设计为响应性,所以它可以在所有设备上工作。

Cachet 用于状态页面本身* Composer* 用于管理 Cachet 的 PHP 依赖性** SQLite* 作为存储 Cachet 数据的数据库** Nginx* 用于服务状态页面

请注意,Cachet 不会监控您的网站或服务器的停机时间;Cachet 会记录事件,这些事件可以通过 Web 界面或使用 Cachet 的 API 手动更新。 如果您正在寻找监控解决方案,请参阅 Bild for Production: Web Applications - Monitoring教程。

前提条件

要遵循本教程,您将需要:

  • 1个Debian 8服务器通过跟随[与Debian 8的初始服务器设置 (https://andsky.com/tech/tutorials/initial-server-setup-with-debian-8) 教程设置,包括一个sudo非root用户. Cachet将使用512MB的内存来工作,但1GB或更多会给出最好的性能.
  • 一个完全合格的域名(FQDN),有一个记录将您的域指向服务器的IPv4地址. 您可以在 [Namecheap] (https://namecheap.com) 上购买一个FQDN, 或者在 [Freenom] (http://www.freenom.com/en/index.html 上免费获得一个, 您可以跟随 [此主机名的教程] (https://andsky.com/tech/tutorials/how-to-set-up-a-host-name-with-digitalocean) 来了解如何设置 DNS 记录的细节 。
  • Nginx 已安装和安装,我们加密。 您可以通过遵循此 [如何在 Debian 8 上安装 Nginx (https://andsky.com/tech/tutorials/how-to-install-nginx-on-debian-8) 教程来安装 Nginx, 然后设置 Let's Encrypt, 通过遵循 [如何用 Let's Encrypt on Debian 8] (https://andsky.com/tech/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-8)的前两个步骤来设置 。 其余步骤可以跳过,因为我们将为凯奇创建自己的配置文件.
  • 如何安装和使用Debian 8上的作曲机步骤1和步骤2所安装的作曲器。
  • Git通过[如何在Debian 8上安装Git (https://andsky.com/tech/tutorials/how-to-install-git-on-debian-8)的第1步被安装,这样你就可以从GitHub中拉出Cachet的来源.
  • 联合国 一个SMTP服务器,因此Cachet可以向订阅者发送事件邮件,向在Cachet接口所创建的用户发送密码提醒. 例如,可以使用Postfix作为Send-Only SMTP Server,也可以使用Mailgun等第三方供应商. .

步骤 1 – 创建缓存用户

首先要做的是创建一个单独的用户帐户来运行缓存,这将有安全和隔离的额外好处。

1sudo useradd --create-home --shell /bin/bash cachet

此命令将创建一个名为 cachet 的用户,在 /home/cachet 中有一个主目录,其壳将设置为 /bin/bash. 默认值是 `/bin/sh,但它在提示中没有提供足够的信息。

现在用户已经创建了,让我们安装PHP依赖。

第2步:安装PHP依赖

接下来,我们需要安装Cachet的依赖,这些是几个PHP包,以及wget和unzip,Composer用来下载和解压缩PHP库。

1sudo apt-get install \
2  php5-fpm php5-curl php5-apcu php5-readline \
3  php5-mcrypt php5-apcu php5-cli php5-gd php5-sqlite\
4  wget unzip

您可以从 官方的PHP扩展列表了解更多有关任何个别包的信息。

现在让我们配置php-fpm,即FastCGI 流程管理器, Nginx 将使用此功能来向缓存提供代理请求。

首先,创建该文件,将托管信息的缓存,即 php-fpm 需要. 打开 /etc/php5/fpm/pool.d/cachet.confnano 或你最喜欢的编辑器。

1sudo nano /etc/php5/fpm/pool.d/cachet.conf

面包如下:

 1[label /etc/php5/fpm/pool.d/cachet.conf]
 2[cachet]
 3user = cachet
 4group = cachet
 5listen.owner = www-data
 6listen.group = www-data
 7listen = /var/run/php5-fpm-cachet.sock
 8php_admin_value[disable_functions] = exec,passthru,shell_exec,system
 9php_admin_flag[allow_url_fopen] = off
10request_terminate_timeout = 120s
11pm = ondemand
12pm.max_children = 5
13pm.process_idle_timeout = 10s
14pm.max_requests = 500
15chdir = /

保存并关闭文件。

您可以阅读更多关于这些设置的文章在 如何安全地托管多个网站与 Nginx 和 Php-fpm,但这里是这个文件中的每个行是什么:

  • `[cachet]'是游泳池的名称。 每个游泳池必须有一个独特的名字
  • " 用户 " 和 " 组 " 是Linux用户,是新池运行的组。 这和我们在第1步中创造的用户相同.
  • " listen.owner " 和 " listen.group " 界定听众的所有权,即新的 " php-fpm " 池的插座。 Nginx必须能够读取这个套接字,所以我们使用b www-data** 用户和组.
  • " listen " 为每个池指定了套接字文件的独特位置。
  • `php_admin_value'允许您设置自定义的PHP配置值。 在这里,我们正在使用它来禁用能够运行 Linux 命令的函数( 'exec, passthru, sell_exec, system') 。
  • php_admin_flag'与php_admin_value'相似,但它只是布尔值的开关,即on'和off'。 我们将禁用 PHP 函数allow_url_fopen , 它允许 PHP 脚本打开远程文件, 并可供攻击者使用 。
  • 联合国 pm 选项允许您配置池的性能 。 我们把它设定为按需提供平衡,以保持内存使用率低,是合理的默认。 如果你有足够的记忆,那么你可以把它设定为`静态'。 如果有很多CPU线程可以配合,那么"动力学"可能是更好的选择.
  • 联合国 chdir'选项应为/',这是文件系统的基础。 这不应该改变,除非你使用另一个重要的选项("chroot"). .

重新启动php-fpm以便更改生效。

1sudo systemctl restart php5-fpm

如果您尚未完成,请启用php-fpm服务,以便在重新启动服务器时自动启动:

1sudo systemctl enable php5-fpm

现在一般的PHP包已安装,让我们下载缓存。

第3步:下载缓存

缓存的源代码是托管在GitHub上,这使得它很容易使用Git来下载,安装,以及 - 正如我们稍后看到的 - 升级它。

接下来的几个步骤应该作为 缓存 用户,所以切换到它。

1sudo su - cachet

克隆Cachet的源代码到一个名为www的新目录中。

1git clone https://github.com/cachethq/Cachet.git www

一旦完成,导航到Cachet的源代码居住的新目录。

1cd www

从现在开始,你可以看到Cachet的所有开发历史,包括Git分支和标签,你可以从Cachet的发布页面(https://github.com/CachetHQ/Cachet/releases)查看最新的稳定版本,但你也可以在本目录中查看Git标签。

在发布时,Cachet 的最新稳定版本是 v2.3.11。

1git checkout v2.3.11

接下来,让我们熟悉Cachet的配置文件。

步骤4:配置缓存

Cachet 需要一个名为 .env 的配置文件,该文件必须在 Cachet 启动时存在,您可以配置 Cachet 用于设置的环境变量。

让我们复制带有缓存备份的配置示例。

1cp .env.example .env

我们将在这里添加两个配置位:一个用于配置数据库,一个用于配置邮件服务器。

对于数据库,我们将使用SQLite,易于配置,不需要安装任何额外的服务器组件。

首先,创建将托管我们的数据库的空格文件:

1touch ./database/database.sqlite

接下来,使用nano或您最喜欢的编辑器打开.env,以配置数据库设置。

1nano .env

因为我们将使用SQLite,我们需要删除很多设置,找到以DB_开头的设置块:

 1[label Original .env]
 2. . .
 3DB_DRIVER=mysql
 4DB_HOST=localhost
 5DB_DATABASE=cachet
 6DB_USERNAME=homestead
 7DB_PASSWORD=secret
 8DB_PORT=null
 9DB_PREFIX=null
10. . .

删除除了DB_DRIVER行之外的所有内容,并将其从mysql更改为sqlite

1[label Updated .env]
2. . .
3DB_DRIVER=sqlite
4. . .

請注意:您可以檢查 Cachet的資料庫選項如果您正在使用其他資料庫,如MySQL或PostgreSQL,所有可能的資料庫驅動程式名稱。

接下来,您需要填写您的SMTP服务器详细信息,以选择MAIL_* 设置:

1[label .env]
2. . .
3MAIL_HOST=smtp.example.com
4MAIL_PORT=25
5MAIL_USERNAME=smtp_username
6MAIL_PASSWORD=smtp_password
7[email protected]
8MAIL_NAME="Status Page"
9. . .

何处:

  • `Mail_Host'应成为您的邮件服务器的URL。
  • MIL-PORT'应是邮件服务器所收听的港口(通常是25')。
  • `MIL_USERNAME'应为SMTP账户设置的用户名(通常是整个电子邮件地址)。
  • MIL_PASWORD应为SMTP账户设置的密码。
  • `电子邮件-地址 ' 应为发送通知给订阅者的电子邮件地址。
  • MIL_NAME是发往订阅者的电子邮件中将出现的名称。 请注意,其中任何有空格的值都应被收录在双引号中. .

您可以了解更多關於Cachet的郵件驅動程式在(https://github.com/CachetHQ/Cachet/blob/v2.3.10/config/mail.php)和 Laravel的相應郵件文件

完成编辑后,保存并退出文件,接下来,您需要设置Cachet的数据库。

第5步:迁移数据库

Cachet 所依赖的 PHP 库由 Composer 管理,首先,请确保您在正确的目录中。

1cd /home/cachet/www

然后运行 Composer 并安装依赖程序,不包括用于开发目的的依赖程序。

1composer install --no-interaction --no-dev -o --no-scripts

创建数据库方案并运行迁移。

1php artisan migrate

注意:在最新的稳定版本(2.3.11)中, 有一个错误在使用SQLite时,需要在任何其他事情之前运行迁移命令。

输入时,你会看到这样的输出:

 1[secondary_label Output]
 2**************************************
 3*     Application In Production!     *
 4**************************************
 5
 6 Do you really wish to run this command? (yes/no) [no]:
 7 > yes
 8
 9Migration table created successfully.
10Migrated: 2015_01_05_201324_CreateComponentGroupsTable
11...
12Migrated: 2016_06_02_075012_AlterTableMetricsAddOrderColumn
13Migrated: 2016_06_05_091615_create_cache_table

下一个命令,php artisan app:install,备份数据库,运行迁移,并自动生成应用程序密钥(即在),Cachet 将其用于所有加密。

<$>[警告] 警告: 在您在生产环境中安装并开始使用缓存后,永远不要更改 APP_KEY 值在 .env 文件中。这会导致所有加密/缓存的数据丢失。只使用 php artisan app:install 命令一次。

完成安装。

1php artisan app:install

结果将是这样的:

1[secondary_label Output]
2Clearing settings cache...
3Settings cache cleared!
4. . .
5Clearing cache...
6Application cache cleared!
7Cache cleared!

作为最后一个积极的步骤,删除Cachet的缓存以避免500个错误。

1rm -rf bootstrap/cache/*

现在数据库已经准备好了,我们可以配置缓存的任务排列。

步骤6 - 配置任务队列

Cachet 使用队列来安排需要非同步执行的任务,例如发送电子邮件. 建议的方法是使用 Supervisor,一个流程管理器,提供一个可监控和控制流程的一致界面。

首先,请确保您退出缓存用户的会话,然后返回您的 sudo 非根用户。

1exit

安装监视器。

1sudo apt-get install supervisor

然后创建包含 Supervisor 从缓存中需要的信息的文件,打开 /etc/supervisor/conf.d/cachet.conf

1sudo nano /etc/supervisor/conf.d/cachet.conf

您可以阅读更多关于 Supervisor 的文章 如何在 Ubuntu 和 Debian VPS 上安装和管理 Supervisor

并添加以下内容. 如果您使用了不同的 onces,请确保更新 Cachet 的目录和用户名。

1[label /etc/supervisor/conf.d/cachet.conf]
2[program:cachet-queue]
3command=php artisan queue:work --daemon --delay=1 --sleep=1 --tries=3
4directory=/home/cachet/www/
5redirect_stderr=true
6autostart=true
7autorestart=true
8user=cachet

保存并关闭文件,然后重新启动 Supervisor。

1sudo systemctl restart supervisor

启用 Supervisor 服务,以便在重新启动服务器时自动启动。

1sudo systemctl enable supervisor

数据库和任务队列已准备好,下一个要设置的组件是 Web 服务器。

第7步:配置 Nginx

我们将使用 Nginx 作为 Web 服务器的代理,它将与php-fpm交谈,前提部分包含如何使用 Let’s Encrypt 发布的 TLS 证书来设置 Nginx 的教程。

让我们添加对缓存所需的 Nginx 配置文件. 打开 /etc/nginx/sites-available/cachet.conf 使用 nano 或您最喜欢的编辑器。

1sudo nano /etc/nginx/sites-available/cachet.conf

这是文件的完整文本,您应该复制并粘贴它. 请确保用您的域名更换example.com

 1[label /etc/nginx/sites-available/cachet.conf]
 2server {
 3    server_name example.com;
 4    listen 80;
 5    return 301 https://$server_name$request_uri;
 6}
 7
 8server {
 9    listen 443;
10    server_name example.com;
11
12    root /home/cachet/www/public;
13    index index.php;
14
15    ssl on;
16    ## Location of the Let's Encrypt certificates
17    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
18    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
19
20    ## From https://cipherli.st/
21    ## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
22    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
23    ssl_prefer_server_ciphers on;
24    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
25    ssl_ecdh_curve secp384r1;
26    ssl_session_cache shared:SSL:10m;
27    ssl_session_tickets off;
28    ssl_stapling on;
29    ssl_stapling_verify on;
30    resolver 8.8.8.8 8.8.4.4 valid=300s;
31    resolver_timeout 5s;
32    ## Disable preloading HSTS for now. You can use the commented out header line that includes
33    ## the "preload" directive if you understand the implications.
34    #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
35    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
36    add_header X-Frame-Options DENY;
37    add_header X-Content-Type-Options nosniff;
38    ssl_buffer_size 1400;
39
40    ssl_dhparam /etc/ssl/certs/dhparam.pem;
41
42    location / {
43        try_files $uri /index.php$is_args$args;
44    }
45
46    location ~ \.php$ {
47        include fastcgi_params;
48        fastcgi_pass unix:/var/run/php5-fpm-cachet.sock;
49        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
50        fastcgi_index index.php;
51        fastcgi_keep_conn on;
52    }
53}

这是这个文件的每个部分做什么。

第一个服务器块将所有HTTP流量重定向到HTTPS:

1[label Partial cachet.conf]
2server {
3    server_name example.com;
4    listen 80;
5    return 301 https://$server_name$request_uri;
6}
7
8. . .

第二个服务器块包含有关此设置的特定信息,例如SSL详细信息和php-fpm配置。

指令告诉 Nginx Cachet 的根目录所在地,应该指向公共目录,并且由于我们在/home/cachet/www/中克隆了 Cachet,它最终成为root /home/cachet/www/public;

 1[label Partial cachet.conf]
 2. . .
 3server {
 4    listen 443;
 5    server_name example.com;
 6
 7    root /home/cachet/www/public;
 8    index index.php;
 9    . . .
10}

SSL 证书生活在 Let’s Encrypt 目录中,该目录应该以您的域名命名:

 1[label Partial cachet.conf]
 2. . .
 3server {
 4    . . .
 5    ssl on;
 6    ## Location of the Let's Encrypt certificates
 7    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
 8    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
 9    . . .
10}

其余的SSL选项是直接从(https://andsky.com/tech/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-8):

 1[label Partial cachet.conf]
 2. . .
 3server {
 4    . . .
 5    ## From https://cipherli.st/
 6    ## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
 7    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 8    ssl_prefer_server_ciphers on;
 9    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
10    ssl_ecdh_curve secp384r1;
11    ssl_session_cache shared:SSL:10m;
12    ssl_session_tickets off;
13    ssl_stapling on;
14    ssl_stapling_verify on;
15    resolver 8.8.8.8 8.8.4.4 valid=300s;
16    resolver_timeout 5s;
17    ## Disable preloading HSTS for now. You can use the commented out header line that includes
18    ## the "preload" directive if you understand the implications.
19    #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
20    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
21    add_header X-Frame-Options DENY;
22    add_header X-Content-Type-Options nosniff;
23    ssl_buffer_size 1400;
24
25    ssl_dhparam /etc/ssl/certs/dhparam.pem;
26    . . .
27}

位置 ~.php$ 部分告诉 Nginx 如何服务 PHP 文件. 最重要的部分是指向我们创建 `/etc/php5/fpm/pool.d/cachet.conf 时使用的 Unix 接口文件。

 1[label Partial cachet.conf]
 2. . .
 3server {
 4    . . .
 5    location / {
 6        try_files $uri /index.php$is_args$args;
 7    }
 8
 9    location ~ \.php$ {
10        include fastcgi_params;
11        fastcgi_pass unix:/var/run/php5-fpm-cachet.sock;
12        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
13        fastcgi_index index.php;
14        fastcgi_keep_conn on;
15    }
16}

保存并关闭文件,如果您还没有。

现在为 Nginx 创建了缓存配置,请创建一个 symlink 到网站启用目录,因为这是 Nginx 查看并选择配置文件的位置:

1sudo ln -s /etc/nginx/sites-available/cachet.conf /etc/nginx/sites-enabled/cachet.conf

重新启动 Nginx 以便更改生效。

1sudo systemctl restart nginx

并启用 Nginx 服务,以便在重新启动服务器时自动启动。

1sudo systemctl enable nginx

如果你现在在浏览器中导航到域名,你会看到Cachet的设置页面。

步骤8 - 完成缓存的初始设置

其余的缓存设置是通过浏览器中的GUI完成的,包括设置网站名称和时区以及创建管理员帐户,有三个步骤(设置环境、状态页面和管理员帐户),您可以随时在缓存的设置仪表板中更改配置。

环境设置

配置的第一步是环境设置。

注意:我们正在使用的缓存版本(https://github.com/CachetHQ/Cachet/issues/2218)即使在环境设置页面中也未显示电子邮件设置,如果您已经在 .env 中设置了它们。

这些领域应如下填写:

缓存驱动程序 应该是* ACP(u)** .** 会话驱动程序** 应该是** ACP(u)** .** 邮件驱动程序** 应该是** SMTP** .** 邮件主机** 应该是您的电子邮件服务器地址.** 邮件从地址** 应该是向订阅者发送通知的电子邮件地址。

点击下一步进入下一步。

状态页面设置

在本节中,您将设置网站名称、网站域、时区和语言。

<$>[注] 注: 缓存支持许多语言,但它是一个社区驱动的项目,这意味着可能有一些未翻译的字符串在非英语语言. 你可以查看 支持的语言列表,其中还包括翻译的内容的百分比。

美元

这些领域应如下填写:

网站名称: 将出现在仪表板上的名称.* 网站域:* 您为 Cachet 选择的 FQDN.** 选择您的时区:* 根据您的受众选择一个时区. 好的默认是选择 UTC.** 选择您的语言:* 选择 Cachet 接口将使用的语言.** 显示 Cachet 支持:* 如果您选择此选项,将在公共仪表板的脚下显示一个** 由 Cachet 支持的 ** 消息。

点击下一步进入下一步。

管理员帐户设置

最后,设置管理员帐户,选择您的用户名,然后输入有效的电子邮件地址和强大的密码。

点击完整设置以保存所有更改。

完整设置

在完整设置页面上,您将被告知Cachet已成功配置,您现在可以点击 Go to dashboard 按钮以使用您的管理员凭证登录并访问Cachet的 dashboard页面。

缓存现在已经完全设置和功能。最后一步涵盖了如何在未来升级缓存。

第9步:升级缓存

使用 Git 非常容易在发布新的缓存版本时进行升级. 您所需要做的就是查询相关标签,然后运行数据库迁移。

注意:在尝试升级到新版本之前,始终要备份缓存和其数据库,只需复制database/database.sqlite文件。

首先,切换到 缓存 用户,然后转到 Cachet 的安装目录。

1sudo su - cachet
2cd /home/cachet/www

您可以选择转到维护页面。

1php artisan down

获取来自GitHub的最新缓存代码。

1git fetch --all

列出所有日期。

1git tag -l

您将看到所有当前的标签从字母 v 开始. 您可能会注意到一些处于 Beta 或 Release Candidate (RC) 状态。 因为这是一个生产服务器,您可以忽略这些。 您也可以访问 cachet 发布页面 查看最新的标签是什么。

当你找到你想要升级的标签时,请使用 Git 查看该标签,例如,如果你要升级到版本 2.4.0,你会使用:

1git checkout v2.4.0

继续前删除Cachet的缓存。

1rm -rf bootstrap/cache{,t}/*

接下来,升级 Composer 依赖,这些依赖通常包含错误修复、性能改进和新功能。

1composer install --no-interaction --no-dev -o --no-scripts

最后,管理移民。

1php artisan app:update

如果您打开了维护页面,您现在可以再次启用访问。

1php artisan up

新的Cachet版本将上线和运行。

结论

您已设置了由 SQLite 支持的 SSL 缓存,并知道如何与 Git 保持维护。您可以选择其他数据库,如 MySQL 或 PostgreSQL. 要探索更多缓存的选项,请参阅 官方缓存文档.

Published At
Categories with 技术
comments powered by Disqus