介绍
Cachet是一个自我托管的状态页面替代托管的服务,如 StatusPage.io和 Status.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.conf
与 nano
或你最喜欢的编辑器。
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. 要探索更多缓存的选项,请参阅 官方缓存文档.