0x01 前言
如果有多个业务系统对外提供服务,那么一个状态展示系统可以为客户提供直观的服务状态展示。当出现系统故障或安排更新计划时可以为客户提供一个信息公开的平台,以便作出相应的准备。
经过寻找后,我决定使用一款名为Cachet的开源软件,它支持部署在Linux、Windows与Docker环境中,而在我的应用环境中,我将部署在centos 7里。
0x02 准备
Cachet需要PHP的支持,需要选择PHP 5.6.4或以上的版本,但对PHP 7的支持不太友好。
在实际的测试中,Cachet v2.4.0是支持PHP 7的,但在调用某些API时出现500错误,经过了解后发现v2.4.0还处于开发状态,因此建议部署PHP 5.6的最新版本并使用v2.3.9的Cachet。
首先需要准备LNMP环境,或者像我一样准备LNMPA环境,具体的的配置过程可以参考以下文章:
至于数据库的部分,可以选择以下数据库:
- MySQL
- PostgreSQL
- SQLite
在我的环境中会使用MySQL,如果没有相关的数据库环境,可以选用SQLite。
首先新建数据库用户以及数据库:
#新建用户 MariaDB [(none)]> create user 'cachet'@'%' identified by 'cachet'; #新建数据库 MariaDB [(none)]> create database cachet; #将cachet数据库授权给相关用户 MariaDB [(none)]> grant all privileges on cachet.* to 'cachet'@'%';
然后新建相关目录并进入该目录:
#新建目录 [root@cachet ~]# mkdir -p /usr/local/html/cachet.t.com #进入该目录 [root@cachet ~]# cd /usr/local/html/cachet.t.com/
clone源码并切换分支:
#clone [root@cachet cachet.t.com]# git clone https://github.com/cachethq/Cachet.git 正克隆到 'Cachet'... remote: Counting objects: 44417, done. remote: Compressing objects: 100% (11/11), done. remote: Total 44417 (delta 4), reused 10 (delta 4), pack-reused 44402 接收对象中: 100% (44417/44417), 31.20 MiB | 721.00 KiB/s, done. 处理 delta 中: 100% (29599/29599), done. #进入源码目录 [root@cachet cachet.t.com]# cd Cachet/ #查看标签 [root@cachet Cachet]# git tag -l #checkout [root@cachet Cachet]# git checkout v2.3.9 Note: checking out 'v2.3.9'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD 目前位于 57988f0... Release v2.3.9
先来查看源码跟目录下的文件与文件夹:
[root@cachet Cachet]# tree -a -L 1 . ├── app ├── artisan ├── bootstrap ├── composer.json ├── composer.lock ├── config ├── CONTRIBUTING.md ├── database ├── .editorconfig ├── .env.example ├── .git ├── .gitattributes ├── .github ├── .gitignore ├── gulpfile.js ├── LICENSE ├── package.json ├── phpunit.xml.dist ├── public ├── README.md ├── resources ├── server.php ├── storage ├── tests ├── .travis.yml └── VERSION
需要注意的是.env.example,这个是配置文件的模版,下面需要配置这个文件。
0x03 配置文件
先复制一份:
[root@cachet Cachet]# cp .env.example .env
配置文件有以下内容:
[root@cachet Cachet]# cat .env APP_ENV=production APP_DEBUG=false #设置默认地址 APP_URL=http://cachet.t.com #APP_KEY将用于加密 APP_KEY=SomeRandomString #数据库类型 DB_DRIVER=mysql #数据IP或域名 DB_HOST=localhost #数据库名称 DB_DATABASE=cachet #数据库用户名 DB_USERNAME=cachet #数据库密码 DB_PASSWORD=cachet #数据库端口 DB_PORT=3306 #数据库表前缀 DB_PREFIX=null #缓存类型 CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync CACHET_EMOJI=false #邮件配置 MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ADDRESS=null MAIL_NAME=null MAIL_ENCRYPTION=tls #redis配置 REDIS_HOST=null REDIS_DATABASE=null REDIS_PORT=null #GitHub token GITHUB_TOKEN=null
其实这个文件里除了默认地址与数据库信息以外,其他参数都不需要配置,因为等下安装完成后,首次通过浏览器打开cachet会有一个配置过程。
0x04 安装
安装过程需要用到composer,可以通过以下命令一键安装:
[root@cachet ~]# curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
如果你是按照我的文章编译的PHP,那么可能会出现以下告警:
-bash: php: 未找到命令
这时候需要执行以下命令,将php的可执行文件链接到相关的文件夹即可:
[root@cachet ~]# ln /usr/local/php5/bin/php /usr/bin/
然后再次执行安装composer的命令即可:
[root@cachet ~]# curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer All settings correct for using Composer Downloading... Composer (version 1.6.5) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer
完成后进入cachet的源码文件夹并执行composer install:
#进入相关目录 [root@cachet ~]# cd /usr/local/html/cachet.t.com/Cachet/ #执行composer install [root@cachet Cachet]# composer install --no-dev -o
最后出现以下提示:
Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postInstall > php artisan optimize --force Generating optimized class loader Compiling common classes > php artisan config:cache Configuration cache cleared! Configuration cached successfully! > php artisan route:cache Route cache cleared! Routes cached successfully!
然后执行以下命令生成APP_KEY,这个命令会自动生成base64字符串并替换配置文件中的APP_KEY:
[root@cachet Cachet]# php artisan key:generate Application key [base64:N3boVwx3zkhxCiI24SoY86qEojcFgGtZGt1z6eq7jus=] set successfully.
在进行下一步时,如果使用mysql作为数据库,则需要确认配置文件中数据库的信息是否正确,确认无误后即可执行以下命令:
[root@cachet Cachet]# php artisan app:install
执行完该命令后会在数据库中建立相关的表:
MariaDB [cachet]> show tables; +--------------------+ | Tables_in_cachet | +--------------------+ | cache | | component_groups | | component_tag | | components | | failed_jobs | | incident_templates | | incidents | | invites | | jobs | | metric_points | | metrics | | migrations | | sessions | | settings | | subscribers | | subscriptions | | tags | | users | +--------------------+ 18 rows in set (0.00 sec)
0x05 ngx、http与fpm
首先配置nginx,以下是我的nginx配置文件:
[root@cachet conf.d]# cat /usr/local/nginx/conf.d/cachet.t.com.ngx.conf server { listen 80; server_name cachet.t.com; root /usr/local/html/cachet.t.com/public_html/public/; access_log /var/log/nginx/access.log main; location / { proxy_pass http://127.0.0.1:8080; index index.php index.html; proxy_ignore_headers Set-Cookie Expires Cache-Control X-Accel-Expires; proxy_cache off; } }
以下是apache的配置文件:
[root@cachet ~]# cat /etc/httpd/conf.d/cachet.t.com.apa.conf <VirtualHost 127.0.0.1:8080> ServerAdmin [email protected] DocumentRoot /usr/local/html/cachet.t.com/public_html/public/ ServerName cachet.t.com ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9004/usr/local/html/cachet.t.com/public_html/public/$1 ErrorLog /usr/local/html/cachet.t.com/logs/apa.error.log </VirtualHost>
以下是我的php-fpm配置文件:
[root@cachet ~]# cat /usr/local/php7/etc/php-fpm.d/cachet.t.com.conf [cachettcom] ;useradd -M -s /sbin/nologin -n cachettcom listen = 127.0.0.1:9004 user = cachettcom group = daemon pm = dynamic pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 10 php_admin_flag[log_errors] = on php_admin_value[error_log] = /usr/local/html/cachet.t.com/logs/fpm-php.log php_flag[display_errors] = off php_admin_value[memory_limit] = 256M pm.max_requests = 3000 request_terminate_timeout = 300
为了安全起见,需要给php-fpm分配一个低权限用户,可以通过以下命令新建:
[root@cachet ~]# useradd -M -s /sbin/nologin -n cachettcom
然后重命名cachet的文件夹名称并修正权限:
#重命名 [root@cachet ~]# mv /usr/local/html/cachet.t.com/Cachet /usr/local/html/cachet.t.com/public_html/ #设置权限 [root@cachet ~]# chown -R cachettcom:daemon /usr/local/html/cachet.t.com/
一切完成后就启动各个服务,最终通过浏览器打开配置文件中所配置的域名。
但在首次打开会出现HTTP 500的错误,这时候需要删除以下文件:
[root@cachet ~]# ll /usr/local/html/cachet.t.com/public_html/bootstrap/cache total 744 -rw-r--r-- 1 root root 589494 Jun 16 22:29 compiled.php -rw-r--r-- 1 root root 21824 Jun 16 22:37 config.php -rw-r--r-- 1 root root 133607 Jun 16 22:37 routes.php -rw-r--r-- 1 root root 11574 Jun 16 22:29 services.php
使用以下命令即可:
[root@cachet ~]# rm -rf /usr/local/html/cachet.t.com/public_html/bootstrap/cache/*
再次尝试通过浏览器打开:
0x06 初始化配置
因为某些需要的服务我没有配置,所以会选择file或其他适合我测试环境的选项。如果你希望用在生产环境中,建议根据实际情况选择。
首先是配置上图中的基本环境设置:
- Cache Driver:file,缓存
- Session Driver:file,会话session
- Mail Host (optional):smtp.office365.com,SMTP服务器地址
- Mail From Address:[email protected],发件人地址
- Mail Username:邮箱用户名
- Mail Password:邮箱密码
然后是站点的基本信息配置:
- Site Name:cachet test,站点名称
- Site Domain:http://cachet.t.com,站点域名
- Select your timezone:ShangHai,时区
- Select your language:简体中文,默认语言
- Show support for Cachet?:建议勾选,支持开源,勾选后会在底部显示cachet的链接
最后是管理员账户信息:
- Username:admin,管理员用户名
- Email:[email protected],管理员邮箱
- Password:admin,管理员账号的密码
所有信息确认无误后,点击complete setup即可:
0x07 结语
cachet仅仅提供了一个展示的平台,至于数据的自动化更新,可以调用这个软件的API,支持的API可以从以下地址找到:
我也将某些私有项目的状态展示出来:
其中还包含我家中机柜的实时功率与维护计划:
以下是我services status page的地址: