Создание страницы состояния с помощью Cachet в Debian 8

Cachet – это открытый сервис для создания страниц состояния, хорошая альтернатива сервисам типа StatusPage.io и Status.io. Сервис сообщает время работы и простоя ваших приложений и позволяет получать информацию о любых сбоях.

Cachet написан на PHP, поэтому, если у вас уже есть сервер LAMP или LEMP, его легко установить. Он предлагает простой интерфейс и может работать на всех устройствах. В этом мануале вы научитесь создавать страницу состояния в Cachet на сервере Debian. Для этого используются такие программы:

  • Cachet для создания страницы состояния.
  • Composer для управления зависимостями PHP.
  • SQLite как база данных для хранения данных Cachet.
  • Nginx для обслуживания страницы состояния.

Обратите внимание: Cachet не мониторит простои вашего сайта или сервера; Cachet записывает события, которые могут обновляться вручную через веб-интерфейс или с помощью API Cachet. Если вы ищете средства для мониторинга, читайте мануал Разработка и производство веб-приложений: мониторинг.

Требования

  • Сервер Debian 8, настроенный по этому мануалу. Для работы Cachet хватит и 512 Мб памяти, но для хорошей производительности лучше иметь хотя бы 1 Гб.
  • FQDN.
  • Веб-сервер Nginx (инструкции по установке вы найдете здесь). Установить сертификат Let’s Encrypt для веб-сервера вам поможет мануал Создание сертификата Let’s Encrypt для Nginx в Debian 8.
  • Composer (установить программу вам поможет раздел 1 и 2 мануала Установка и использование Composer в Debian 8).
  • Git (инструкции по установке – в разделе 1 мануала Установка Git на Debian 8).
  • SMTP-сервер, с помощью которого Cachet сможет отправлять электронные письма и напоминания пароля пользователям, созданным через интерфейс Cachet. Вы можете использовать Postfix как SMTP-сервер для отправки почты или обратиться к стороннему провайдеру (например Mailgun).

1: Создание пользователя для Cachet

Сначала нужно создать отдельную учетную запись пользователя для запуска Cachet.

Эта команда создаст пользователя по имени cachet с домашним каталогом в /home/cachet, который будет использовать оболочку /bin/bash. Это будет пользователь без пароля, который будет иметь права исключительно на компоненты, которые будет использовать Cachet.

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. Nginx будет использовать этот пакет для проксирования запросов Cachet.

Сначала создайте файл, где будет размещена информация о Cachet, которая нужна php-fpm. Откройте /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 в Ubuntu 14.04

  • [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_value, но это параметр для включения или отключения булевых значений (on и off). Отключите функцию PHP allow_url_fopen, которая позволяет скрипту PHP открывать удаленные файлы и может использоваться злоумышленниками.
  • Параметр pm позволяет вам настроить производительность пула. Здесь он имеет значение ondemand, что позволяет поддерживать низкий уровень использования памяти и хорошо подходит как значение по умолчанию. Если у вас много памяти, вы можете установить значение static. Если у вас есть много потоков ЦП, с которыми можно работать, тогда вам больше подойдет значение dynamic.
  • Параметр chdir должен иметь значение / (это указывает корень файловой системы). Это значение не следует изменять, если вы не используете параметр chroot.

Перезапустите php-fpm:

sudo systemctl restart php5-fpm

Если вы ранее не сделали этого, добавьте сервис php-fpm в автозагрузку:

sudo systemctl enable php5-fpm

3: Загрузка Cachet

Исходный код Cachet хранится на GitHub. Потому его очень легко загрузить и обновлять с помощью Git.

Перейдите в сессию пользователя cachet.

sudo su - cachet

Клонируйте репозиторий в новый каталог:

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

После этого перейдите в новый каталог, где хранится исходный код Cachet.

cd www

Теперь у вас есть вся история разработки Cachet, включая ветки и теги Git. Вы можете найти последнюю стабильную версию на странице релизов Cachet или же просто просмотреть теги Git в этом каталоге.

Используйте Git, чтобы проверить версию:

git checkout v2.3.11

4: Настройка Cachet

Cachet использует конфигурационный файл .env, он необходим для запуска Cachet. В нем вы можете настроить переменные среды для настройки Cachet.

Создайте резервную копию образца конфигурации, который поставляется с Cachet.

cp .env.example .env

После этого нужно добавить два фрагмента конфигурации: один для настройки базы данных, второй для почтового сервера.

В качестве базы данных можно использовать SQLite. Ее легко настроить и она не требует установки каких-либо дополнительных серверных компонентов.

Сначала создайте пустой файл, в котором будет размещаться база данных:

touch ./database/database.sqlite

Откройте исходный файл .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
. . .

Примечание: Вы можете ознакомиться с опциями БД Cachet, чтобы узнать имена других драйверов, если вы хотите использовать другую БД типа MySQL или PostgreSQL.

Затем нужно указать параметры SMTP сервера в строках MAIL_*:

. . .
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 – имя, которое будет отображаться в письмах, отправленных подписчикам. Обратите внимание, значения с пробелами здесь нужно брать в двойные кавычки.

Узнать больше о почтовых драйверах Cachet можно в исходном коде mail.php и соответствующей документации от Laravel.

Сохраните и закройте файл.

5: Миграция базы данных

Библиотеки PHP, от которых зависит Cachet, обрабатываются Composer. Убедитесь, что вы находитесь в правильном каталоге.

cd /home/cachet/www

Затем запустите Composer и установите зависимости, за исключением тех, которые используются для целей разработки. В зависимости от скорости интернет-соединения это может занять некоторое время.

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

Создайте схему БД и запустите миграцию:

php artisan migrate

Примечание: В версии 2.3.11 при работе с SQLite есть баг, который требует, чтобы команда migrate была запущена прежде всех остальных.

Введите yes по запросу.

**************************************
*     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) берет резервную копию базы данных, запускает миграцию и автоматически генерирует ключ приложения (значение APP_KEY в .env), который Cachet использует для всего шифрования.

Важно! Никогда не изменяйте значение APP_KEY, которое находится в файле .env после того, как вы установили и начали использовать Cachet в среде производства. Это приведет к потере всех зашифрованных и хешированных данных. Используйте команду php artisan app:install только один раз. По этой причине рекомендуется сохранить резервную копию .env.

Завершите установку:

php artisan app:install
Clearing settings cache...
Settings cache cleared!
. . .
Clearing cache...
Application cache cleared!
Cache cleared!

Теперь удалите кэш Cachet, чтобы избежать ошибок:

rm -rf bootstrap/cache/*

6: Настройка очереди задач

Cachet использует очередь для планирования задач, которые должны выполняться асинхронно.

Рекомендуется использовать для этого Supervisor – это менеджер процессов, который предлагает удобный интерфейс для управления процессами.

Выйдите из сессии cachet и вернитесь в сессию пользователя с доступом к sudo.

exit

Установите Supervisor.

sudo apt-get install supervisor

Затем создайте файл, который будет содержать информацию о Cachet для Supervisor. Откройте /etc/supervisor/conf.d/cachet.conf.

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

Этот файл сообщает Supervisor, как запускать и управлять процессом Cachet.

Читайте также: Установка и управление Supervisor на сервере Ubuntu и Debian

Добавьте в файл следующие строки, указав данные о своей установке 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

Сохраните и закройте файл.

Перезапустите Supervisor.

sudo systemctl restart supervisor

Добавьте Supervisor в автозагрузку.

sudo systemctl enable supervisor

7: Настройка Nginx

Nginx будет работать в качестве прокси-сервера и взаимодействовать с php-fpm.

Создайте конфигурационный файл Nginx для Cachet. Откройте /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, и поскольку вы клонировали Cachet в /home/cachet/www/, в конечном итоге это будет путь /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 взяты прямо из мануала Создание сертификата Let’s Encrypt для Nginx в Debian 8:

. . .
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. Наиболее важно указать файл сокета Unix, который вы использовали при создании /etc/php5/fpm/pool.d/cachet.conf. В данном случае это /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;
}
}

Сохраните и закройте файл.

Теперь, когда конфигурация Cachet для Nginx готова, создайте симлинк на каталог 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 выполняется через графический интерфейс в браузере. Здесь находятся настройки имени сайта, часового пояса, а также учетной записи администратора. Настройка состоит из трех этапов (настройка среды, страницы состояния и учетной записи администратора). Изменить конфигурацию можно позже в панели настроек Cachet.

Настройка среды

Первым этапом является настройка среды.

Примечание: В используемой здесь версии Cachet есть баг, из-за которого параметры электронной почты не отображаются на странице настройки среды, даже если вы уже установили их в .env. Баг исправлен в версии 2.4.

Поля должны быть заполнены следующим образом:

  • Cache Driver: ACP(u).
  • Session Driver: ACP(u).
  • Mail Driver: SMTP.
  • Mail Host: ваш адрес электронной почты.
  • Mail From Address: адрес электронной почты, с которого будут отправляться уведомления подписчикам.
  • Mail Username: имя пользователя для настройки учетной записи SMTP (обычно это весь адрес электронной почты).
  • Mail Password: пароль аккаунта SMTP.

Нажмите Next.

Настройка страницы состояния

В этом разделе можно настроить имя сайта, домен, часовой пояс и язык.

Примечание: Cachet поддерживает много языков, но это проект, разрабатываемый сообществом, а это означает, что все языки, кроме английского, могут содержать непереведенные фрагменты. Вы можете просмотреть список поддерживаемых языков здесь (в нем также отмечается процент переведенного контента).

Поля нужно заполнить так:

  • Site Name: имя, которое будет отображаться на странице.
  • Site Domain: FQDN для Cachet.
  • Select your timezone: часовой пояс (по умолчанию можно использовать UTC).
  • Select your language: язык интерфейса Cachet.
  • Show support for Cachet: если вы выберете эту опцию, в футере будет отображаться сообщение Powered by Cachet.

Нажмите Next, чтобы продолжить.

Настройка учетной записи администратора

Выберите имя пользователя и введите адрес электронной почты и надежный пароль.

Нажмите Complete Setup, чтобы сохранить все изменения.

Завершение настройки

На странице Complete Setup вы увидите, что Cachet был успешно настроен. Теперь вы можете нажать кнопку Go the dashboard, чтобы войти в систему с учетными данными администратора и перейти на страницу панели инструментов Cachet.

Cachet теперь полностью настроен и готов к работе.

9: Обновление Cachet

Git очень сильно упрощает обновление, когда выходит новая версия Cachet. Все, что вам нужно сделать, это проверить соответствующий тег и выполнить миграцию базы данных.

Примечание: Рекомендуется создавать резервные копии Cachet и соответствующей базы данных, прежде чем пытаться перейти на новую версию. Для SQLite нужно только скопировать файл database/database.sqlite.

Сначала перейдите в сессию пользователя cachet, а затем – в каталог установки Cachet.

sudo su - cachet
cd /home/cachet/www

Вы можете по желанию включить страницу обслуживания.

php artisan down

Извлеките последний код Cachet из GitHub.

git fetch --all

Запросите список тегов:

git tag -l

Вы увидите все текущие теги, начинающиеся с v. Вы можете заметить, что некоторые из них находятся в бета-версии или состоянии 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 будет запущена на сервере.

Чтобы узнать больше о возможностях Cachet, ознакомьтесь с официальной документацией проекта.

Tags: ,