介绍
Cachet是一种自托管状态页面,可替代托管服务,如StatusPage.io和Status.io 。 它可以帮助您沟通应用程序的运行时间和停机时间,并分享有关任何中断的信息。
它是用PHP编写的,所以如果你已经有一个LAMP或者LEMP服务器,那么很容易安装。 它有一个干净的界面,旨在响应,所以它可以在所有设备上工作。 在本教程中,我们将在Debian上设置一个带有Cachet的状态页面。 我们将使用的软件是:
- 缓存状态页面本身
- Composer来管理Cachet的PHP依赖关系
- SQLite作为存储Cachet数据的数据库
- Nginx服务状态页面
请注意,Cachet不会监视您的网站或服务器的停机时间; Cachet记录事件,可以通过Web界面或使用Cachet的API手动更新事件。 如果您正在寻找监控解决方案,请查看生产建筑:Web应用程序 - 监控教程。
先决条件
要遵循本教程,您将需要:
通过遵循Debian 8教程的初始服务器安装程序设置一个Debian 8服务器,包括一个sudo非root用户。 Cachet将使用512MB的内存,但1GB或更多的内存将提供最佳性能。
具有A记录的完全限定域名(FQDN),将您的域指向服务器的IPv4地址。 您可以在Namecheap上购买FQDN或在Freenom上免费获得一个FQDN,您可以按照此主机名教程了解如何设置DNS记录。
Nginx安装并设置了我们的加密。 您可以通过以下方式安装Nginx: 如何在Debian 8教程中安装Nginx ,然后设置Let's Encrypt,按照如何使用Debian 8加密Nginx的前两个步骤。 剩下的步骤可以跳过,因为我们将为Cachet创建我们自己的配置文件。
Composer通过遵循Debian 8中如何安装和使用Composer的第1步和2进行安装 。
通过遵循Debian 8上如何安装Git的第1步 安装Git ,因此您可以从GitHub中提取Cachet的源代码。
一个SMTP服务器,所以Cachet可以向用户创建事件的邮件,并向在Cachet界面中创建的用户发送密码提醒。 例如,您可以使用Postfix作为发送SMTP服务器 ,或使用像Mailgun这样的第三方提供商。
第1步 - 创建Cachet用户
首先要做的是创建一个单独的用户帐户来运行Cachet。 这将有额外的安全和隔离的好处。
sudo useradd --create-home --shell /bin/bash cachet
此命令将在/home/cachet
的主目录创建一个名为cachet的用户,其shell将被设置为/bin/bash
。 默认值为/bin/sh
,但它的提示中没有提供足够的信息。 它将是一个无密码的用户,它将具有专用于Cachet将使用的组件的权限。
现在创建用户,让我们安装PHP依赖关系。
第2步 - 安装PHP依赖关系
接下来,我们需要安装Cachet的依赖项,这是一些PHP包以及wget
和unzip
,Composer用来下载和解压缩PHP库。
sudo apt-get install \
php5-fpm php5-curl php5-apcu php5-readline \
php5-mcrypt php5-apcu php5-cli php5-gd php5-sqlite\
wget unzip
您可以从官方PHP扩展列表中了解有关任何单个软件包的更多信息。
现在我们来配置php-fpm
,FastCGI Process Manager。 Nginx将使用它来代理对Cachet的请求。
首先,创建将承载php-fpm
需要的Cachet信息的文件。 打开/etc/php5/fpm/pool.d/cachet.conf
与nano
或您喜欢的编辑器。
sudo nano /etc/php5/fpm/pool.d/cachet.conf
贴在下面:
[cachet]
user = cachet
group = cachet
listen.owner = www-data
listen.group = www-data
listen = /var/run/php5-fpm-cachet.sock
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
request_terminate_timeout = 120s
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
pm.max_requests = 500
chdir = /
保存并关闭文件。
您可以在关于如何使用Nginx和Php-fpm安全地托管多个网站的文章中阅读有关这些设置的更多信息,但这是以下文件中的每一行:
-
[cachet]
是池的名称。 每个池必须有一个唯一的名称 -
user
和group
是Linux用户和新池将在其下运行的组。 它与我们在第1步中创建的用户相同。 -
listen.owner
和listen.group
定义监听器的所有权,即新的php-fpm
池的套接字。 Nginx必须能够读取这个套接字,所以我们使用的是www-data用户和组。 -
listen
指定每个池的套接字文件的唯一位置。 -
php_admin_value
允许您设置自定义PHP配置值。 在这里,我们使用它可以运行Linux命令的禁用功能(exec,passthru,shell_exec,system
)。 -
php_admin_flag
与php_admin_flag
类似,但它只是布尔值的开关,即on
和off
。 我们将禁用允许PHP脚本打开远程文件的PHP函数allow_url_fopen
,并且可以被攻击者使用。 -
pm
选项允许您配置池的性能。 我们将其设置为ondemand
,它提供了一个平衡,以保持内存使用率低,并且是合理的默认值。 如果你有足够的内存,那么你可以将其设置为static
。 如果您有很多CPU线程可以使用,那么dynamic
可能是一个更好的选择。 -
chdir
选项应该是/
which是文件系统的根目录。 除非您使用其他重要选项(chroot
),否则不应更改此选项。
重新启动php-fpm
以使更改生效。
sudo systemctl restart php5-fpm
如果尚未完成,请启用php-fpm
服务,以便在服务器重新启动时自动启动:
sudo systemctl enable php5-fpm
现在安装了一般的PHP包,我们来下载Cachet。
第3步 - 下载Cachet
Cachet的源代码托管在GitHub上。 这样可以轻松地使用Git来下载,安装和 - 我们稍后会看到 - 升级它。
接下来的几个步骤应该跟随作为cachet用户,所以切换到它。
sudo su - cachet
将克隆Cachet的源代码导入名为www
的新目录。
git clone https://github.com/cachethq/Cachet.git www
完成之后,浏览到Cachet源代码所在的新目录。
cd www
从这一点开始,您就拥有了Cachet开发的所有历史,包括Git分支和标签。 您可以从Cachet的发布页面看到最新的稳定版本,但您也可以在此目录中查看Git标签。
在发布时,最新的稳定版本的Cachet是v2.3.11。 使用Git查看该版本:
git checkout v2.3.11
接下来,让我们熟悉Cachet的配置文件。
第4步 - 配置Cachet
Cachet需要一个名为.env
的配置文件,它必须出现在Cachet才能启动。 在其中,您可以配置Cachet用于其设置的环境变量。
我们来复制Cachet附带的备份配置示例。
cp .env.example .env
我们将在这里添加两个配置:一个用于配置数据库,另一个用于配置邮件服务器。
对于数据库,我们将使用SQLite。 它易于配置,不需要安装任何其他服务器组件。
首先,创建将托管我们的数据库的空文件:
touch ./database/database.sqlite
接下来,使用nano
或您最喜欢的编辑器打开.env
,以配置数据库设置。
nano .env
因为我们将使用SQLite,我们需要删除很多设置。 找到以DB_
开头的设置块:
. . .
DB_DRIVER=mysql
DB_HOST=localhost
DB_DATABASE=cachet
DB_USERNAME=homestead
DB_PASSWORD=secret
DB_PORT=null
DB_PREFIX=null
. . .
删除除DB_DRIVER
行以外的所有内容,并将其从mysql
更改为sqlite
。
. . .
DB_DRIVER=sqlite
. . .
注意: 如果您正在使用另一个数据库(如MySQL或PostgreSQL),可以检查Cachet的数据库选项,以获取所有可能的数据库驱动程序名称。
接下来,您需要填写MAIL_*
设置的SMTP服务器详细信息:
. . .
MAIL_HOST=smtp.example.com
MAIL_PORT=25
MAIL_USERNAME=smtp_username
MAIL_PASSWORD=smtp_password
MAIL_ADDRESS=notifications@example.com
MAIL_NAME="Status Page"
. . .
哪里:
-
MAIL_HOST
应该是您的邮件服务器的URL。 -
MAIL_PORT
应该是邮件服务器监听的端口(通常为25
)。 -
MAIL_USERNAME
应该是SMTP帐户设置的用户名(通常是整个电子邮件地址)。 -
MAIL_PASSWORD
应该是SMTP帐户设置的密码。 -
MAIL_ADDRESS
应该是发送给订阅者的通知的电子邮件地址。 -
MAIL_NAME
是发送给订阅者的电子邮件中的名称。 请注意,任何带有空格的值都应包含在双引号内。
您可以在mail.php源代码和Laravel 的相应邮件文档中了解有关Cachet邮件驱动程序的更多信息。
完成文件编辑后,保存并退出。 接下来,您需要设置Cachet的数据库。
第5步 - 迁移数据库
Cachet依赖的PHP库由Composer处理。 首先,确保你在正确的目录。
cd /home/cachet/www
然后运行Composer并安装依赖项,不包括用于开发目的的依赖项。 根据您的互联网连接速度,这可能需要一些时间。
composer install --no-interaction --no-dev -o --no-scripts
创建数据库模式并运行迁移。
php artisan migrate
注意:在最新的稳定版本( 2.3.11
)中,使用SQLite时会出现一个错误 ,需要您在其他任何操作之前运行migrate
命令。
询问时键入yes
。 你会看到这样的输出:
Output**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:
> yes
Migration table created successfully.
Migrated: 2015_01_05_201324_CreateComponentGroupsTable
...
Migrated: 2016_06_02_075012_AlterTableMetricsAddOrderColumn
Migrated: 2016_06_05_091615_create_cache_table
下一个命令, php artisan app:install
,对数据库进行备份,运行迁移,并自动生成Cachet用于其所有加密的应用程序密钥(即APP_KEY
中的APP_KEY
值)。
警告:在生产环境中安装并开始使用Cachet后,切勿更改.env
文件中的APP_KEY
值。 这将导致您的所有加密/散列数据丢失。 仅使用php artisan app:install
命令一次。 因此,保留.env
的备份是个好主意。
完成安装。
php artisan app:install
输出将如下所示:
OutputClearing settings cache...
Settings cache cleared!
. . .
Clearing cache...
Application cache cleared!
Cache cleared!
作为最后一个主动的步骤,删除Cachet的缓存以避免500错误。
rm -rf bootstrap/cache/*
现在数据库已经准备就绪,我们可以配置Cachet的任务队列。
第6步 - 配置任务队列
Cachet使用一个队列来调度需要异步运行的任务,比如发送电子邮件。 推荐的方法是使用Supervisor ,一个进程管理器,它提供一个一致的界面,通过该界面可以监视和控制进程。
首先,确保您注销了用户的会话,并切换回sudo非root用户。
exit
安装主管
sudo apt-get install supervisor
然后创建将包含Supervisor从Cachet需要的信息的文件。 打开/etc/supervisor/conf.d/cachet.conf
。
sudo nano /etc/supervisor/conf.d/cachet.conf
该文件告诉主管如何运行和管理其进程。 您可以在Ubuntu和Debian VPS中如何安装和管理主管的文章中阅读有关Supervisor的更多信息。
并添加以下内容。 如果您使用不同的级别,请确保更新Cachet的目录和用户名。
[program:cachet-queue]
command=php artisan queue:work --daemon --delay=1 --sleep=1 --tries=3
directory=/home/cachet/www/
redirect_stderr=true
autostart=true
autorestart=true
user=cachet
保存并关闭文件,然后重新启动主管。
sudo systemctl restart supervisor
启用Supervisor服务,以便在服务器重新启动时自动启动。
sudo systemctl enable supervisor
数据库和任务队列就绪; 要设置的下一个组件是Web服务器。
第7步 - 配置Nginx
我们将使用Nginx作为与php-fpm
交谈的Web服务器代理。 先决条件部分有关于如何使用Let's Encrypt颁发的TLS证书设置Nginx的教程。
我们添加CacheT所需的Nginx配置文件。 打开/etc/nginx/sites-available/cachet.conf
与nano
或您最喜爱的编辑器。
sudo nano /etc/nginx/sites-available/cachet.conf
这是文件的全文,您应该复制并粘贴。请确保用您的域名替换example.com
。 下面更详细地描述每个部分的功能。
server {
server_name example.com;
listen 80;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
server_name example.com;
root /home/cachet/www/public;
index index.php;
ssl on;
## Location of the Let's Encrypt certificates
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
## From https://cipherli.st/
## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
## Disable preloading HSTS for now. You can use the commented out header line that includes
## the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_buffer_size 1400;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm-cachet.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_keep_conn on;
}
}
这是这个文件的每个部分。
第一个server
块将所有HTTP流量重定向到HTTPS:
server {
server_name example.com;
listen 80;
return 301 https://$server_name$request_uri;
}
. . .
第二个server
块包含有关此设置的特定信息,如SSL详细信息和php-fpm
配置。
root
指令告诉Nginx Cachet的根目录。 应该指向public
目录,因为我们在/home/cachet/www/
克隆了Cachet,最终成为root /home/cachet/www/public;
。
. . .
server {
listen 443;
server_name example.com;
root /home/cachet/www/public;
index index.php;
. . .
}
SSL证书存在于Let's Encrypt目录中,该目录应以您的域名命名:
. . .
server {
. . .
ssl on;
## Location of the Let's Encrypt certificates
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
. . .
}
其余的SSL选项直接从Nginx和我们的加密教程中获取 :
. . .
server {
. . .
## From https://cipherli.st/
## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
## Disable preloading HSTS for now. You can use the commented out header line that includes
## the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_buffer_size 1400;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
. . .
}
location ~ \.php$
部分告诉Nginx如何提供PHP文件。 最重要的部分是指向我们在创建/etc/php5/fpm/pool.d/cachet.conf
时使用的Unix套接字文件。 具体来说,这是/var/run/php5-fpm-cachet.sock
。
. . .
server {
. . .
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm-cachet.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_keep_conn on;
}
}
保存并关闭文件,如果你还没有。
现在,创建了Nginx的Cachet配置,为sites-enabled
了sites-enabled
目录创建一个符号链接,因为这是Nginx看起来并选择要使用的配置文件的位置:
sudo ln -s /etc/nginx/sites-available/cachet.conf /etc/nginx/sites-enabled/cachet.conf
重新启动Nginx以使更改生效。
sudo systemctl restart nginx
并启用Nginx服务,以便在服务器重新启动时自动启动。
sudo systemctl enable nginx
而已! 如果您现在浏览浏览器中的域名,您将看到Cachet的设置页面。 我们来看看吧
第8步 - 完成Cachet的初始设置
Cachet的其余设置通过浏览器中的GUI完成。 它包括设置站点名称和时区以及创建管理员帐户。 有三个步骤(设置环境,状态页面和管理员帐户),您可以随时在Cachet设置仪表板中更改配置。
环境设置
第一个配置步骤是环境设置。
注意:我们使用的Cachet版本有一个错误 ,即使您已经在.env
设置了电子邮件设置,即使环境设置页面中也没有显示电子邮件设置。 这将在2.4版中修复。
字段应填写如下:
- 缓存驱动程序应为ACP(u) 。
- 会话驱动程序应为ACP(u) 。
- 邮件驱动程序应该是SMTP 。
- 邮件主机应该是您的电子邮件服务器地址。
- 邮件地址应该是发送订户的通知的电子邮件地址。
- 邮件用户名应该是SMTP帐户设置的用户名(通常是整个电子邮件地址)。
- 邮件密码应为SMTP帐户设置的密码。
单击下一步转到下一步。
状态页面设置
在本节中,您将设置站点名称,站点域名,时区和语言。
注意: Cachet支持许多语言,但它是一个社区驱动的项目,这意味着非英语语言中可能会有一些非翻译的字符串。 您可以查看支持的语言列表 ,其中还包括已翻译内容的百分比。
字段应填写如下:
- 网站名称:将显示在仪表板中的名称。
- 站点域:您为Cachet选择的FQDN。
- 选择您的时区:根据观众选择时区。 一个很好的默认是选择UTC。
- 选择您的语言:选择Cachet界面将使用的语言。
- 显示对Cachet的支持:如果选择此选项,则通过Cachet消息显示在公用仪表板的页脚。
单击下一步转到下一步。
管理员帐户设置
最后,设置管理员帐号。 选择您的用户名,并输入有效的电子邮件地址和强大的密码。
单击完成设置以保存所有更改。
完成安装
在“完成设置”页面上,您将被告知Cachet已成功配置。 您现在可以点击“返回仪表板”按钮,使用您的管理员凭据登录,并访问Cachet的仪表板页面。
Cachet现在已经完全设置和运行。 最后一步将介绍如何在将来升级Cachet。
第9步 - 升级Cachet
使用Git可以在新版本的Cachet出来时非常容易升级。 所有您需要做的是检出相关标签,然后运行数据库迁移。
注意:在尝试升级到新版本之前,始终最好备份Cachet及其数据库。 对于SQLite,您只需复制database/database.sqlite
文件。
首先,切换到cachet用户,并转到Cachet的安装目录。
sudo su - cachet
cd /home/cachet/www
您可以选择打开维护页面。
php artisan down
从GitHub获取最新的Cachet代码。
git fetch --all
并列出所有标签。
git tag -l
您将看到所有当前标签以字母v
开头。 您可能会注意到某些是beta或Release Candidate(RC)状态。 因为这是一个生产服务器,你可以忽略它们。 您还可以访问Cachet发行页 ,查看最新的标签。
当您找到要用于升级的标签时,请使用Git查看该标签。 例如,如果要升级到2.4.0版本,则可以使用:
git checkout v2.4.0
在继续之前删除Cachet的缓存。
rm -rf bootstrap/cache{,t}/*
接下来,升级Composer依赖项,通常包含错误修复,性能增强和新功能。
composer install --no-interaction --no-dev -o --no-scripts
最后,运行迁移。
php artisan app:update
如果您打开了维护页面,则可以再次启用访问。
php artisan up
新版本的Cachet将会启动并运行。
结论
您已经使用SQLite设置了带有SSL的Cachet,并且知道如何保持与Git的一致。 您可以选择其他数据库,如MySQL或PostgreSQL。 要了解更多的Cachet选项,请查看官方的Cachet文档 。