Как создать страницу состояния с помощью Cachet в Debian 8

Вступление

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

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

  • * Cachet * для самой страницы статуса

  • * Composer * для управления PHP-зависимостями Cachet

  • * SQLite * как база данных для хранения данных Cachet

  • * Nginx * для обслуживания страницы статуса

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

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Один сервер Debian 8, настроенный с помощью учебника Initial Server Setup с Debian 8, включая sudo без полномочий root пользователь. Cachet будет работать с 512 МБ памяти, но 1 ГБ или более даст лучшую производительность.

  • Полное доменное имя (FQDN) с записью A, указывающей ваш домен на IPv4-адрес вашего сервера. Вы можете приобрести полное доменное имя на https://namecheap.com [Namecheap] или получить его бесплатно на Freenom, а также подписаться на https: // www. .digitalocean.com / community / tutorials / how-to-set-up-a-host-name-with-digitalocean [это руководство по имени хоста] для получения подробной информации о том, как настроить записи DNS.

  • Nginx установлен и настроен с Let’s Encrypt. Вы можете установить Nginx, следуя этому How для установки Nginx в Debian 8 учебному пособию, а затем настроить Let’s Encrypt выполнив первые два шага из How для защиты Nginx с помощью Let’s Encrypt на Debian 8. Остальные шаги можно пропустить, потому что мы создадим наш собственный файл конфигурации для Cachet.

  • Composer устанавливается с помощью следующих шагов 1 и 2 из Как установить и использовать Composer в Debian 8 .

  • Git установлен, следуя шагу 1 из How для установки Git на Debian 8, так что вы можете получить исходный код Cachet с GitHub.

  • SMTP-сервер, поэтому Cachet может отправлять электронные письма подписчикам об инцидентах и ​​напоминания паролей пользователям, созданным в интерфейсе Cachet. Вы можете use Postfix например SMTP-сервер только для отправки, или используйте стороннего поставщика, такого как Mailgun.

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

Самое первое, что нужно сделать, это создать отдельную учетную запись пользователя для запуска Cachet. Это будет иметь дополнительное преимущество безопасности и изоляции.

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

Эта команда создаст пользователя с именем * cachet * с домашним каталогом в + / home / cachet +, оболочка которого будет установлена ​​в + / 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

Вы можете узнать больше о любом отдельном пакете из the официальный список расширений 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

Вставьте в следующее:

/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 = /

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

Вы можете прочитать больше об этих настройках в статье на https://www.digitalocean.com/community/tutorials/how-to-host-multiple-websites-securely-with-nginx-and-php-fpm-on-ubuntu -14-04 [Как безопасно разместить несколько сайтов с помощью Nginx и Php-fpm], но вот для чего каждая строка в этом файле:

  • + [cachet] + - имя пула. Каждый пул должен иметь уникальное имя

  • + user и` + group` - пользователь Linux и группа, в которой будет работать новый пул. Он такой же, как пользователь, которого мы создали на шаге 1.

  • + listen.owner + и + listen.group + определяют владельца прослушивателя, т.е. сокет нового пула + php-fpm +. Nginx должен уметь читать этот сокет, поэтому мы используем пользователя и группу theb * 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

Теперь, когда установлены общие пакеты 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

Затем откройте + .env + с помощью + nano + или вашего любимого редактора, чтобы настроить параметры базы данных.

nano .env

Поскольку мы будем использовать SQLite, нам нужно будет удалить множество настроек. Найдите блок настроек, начинающийся с + DB_ +:

Оригинал .env

. . .
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.

Обновлен .env

. . .
DB_DRIVER=
. . .

Затем вам нужно будет ввести данные вашего SMTP-сервера для настроек + MAIL _ * +:

env
. . .
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ADDRESS=
MAIL_NAME=
. . .

Куда:

  • + MAIL_HOST + должен быть URL вашего почтового сервера.

  • + MAIL_PORT + должен быть портом, который прослушивает почтовый сервер (обычно + 25 +).

  • + MAIL_USERNAME + должно быть именем пользователя для настройки учетной записи SMTP (обычно это полный адрес электронной почты).

  • + MAIL_PASSWORD + должен быть паролем для настройки учетной записи SMTP.

  • + MAIL_ADDRESS + должен быть адресом электронной почты, с которого будут отправляться уведомления подписчикам.

  • + MAIL_NAME + - это имя, которое будет отображаться в электронных письмах, отправляемых подписчикам. Обратите внимание, что любые значения с пробелами в них должны быть заключены в двойные кавычки.

Вы можете узнать больше о почтовых драйверах Cachet в the исходный код mail.php и https://laravel.com/docs /5.2/mail[the соответствующая почтовая документация от Laravel].

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

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

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

cd /home/cachet/www

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

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

Создайте схему базы данных и запустите миграции.

php artisan migrate

Введите + yes +, когда вас спросят. Вы увидите вывод так:

Output**************************************
*     Application In Production!     *
**************************************

Do you really wish to run this command? (yes/no) [no]:
>

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 использует для всего своего шифрования.

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

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, менеджера процессов, который обеспечивает согласованный интерфейс, через который можно отслеживать и контролировать процессы.

Во-первых, убедитесь, что вы вышли из сеанса пользователя * cachet * и переключились обратно на пользователя sudo, не являющегося пользователем root.

exit

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

sudo apt-get install supervisor

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

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

Этот файл сообщает Supervisor, как запустить и управлять его процессом. Вы можете прочитать больше о Supervisor в статье https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps[How для установки и управления Супервайзер по Ubuntu и Debian VPS.

И добавьте следующее содержание. Обязательно обновите каталог и имя пользователя Cachet, если вы использовали разные типы.

/etc/supervisor/conf.d/cachet.conf

[program:cachet-queue]
command=php artisan queue:work --daemon --delay=1 --sleep=1 --tries=3
directory=
redirect_stderr=true
autostart=true
autorestart=true
user=

Сохраните и закройте файл, затем перезапустите Supervisor.

sudo systemctl restart supervisor

Включите службу Supervisor, чтобы она автоматически запускалась при перезагрузке сервера.

sudo systemctl enable supervisor

База данных и очередь задач готовы; Следующий компонент для настройки - это веб-сервер.

Шаг 7 - Настройка Nginx

Мы будем использовать Nginx в качестве прокси веб-сервера, который будет общаться с + php-fpm +. В разделе предварительных требований есть учебники по настройке Nginx с сертификатом TLS, выданным Let Encrypt.

Давайте добавим файл конфигурации Nginx, необходимый для Cachet. Откройте + / etc / nginx / sites-available / cachet.conf + с помощью + nano + или вашего любимого редактора.

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

Это полный текст файла, который вы должны скопировать и вставить. Обязательно замените + example.com + на ваше доменное имя. Функция каждого раздела более подробно описана ниже.

/etc/nginx/sites-available/cachet.conf

server {
   server_name  ;
   listen 80;
   return 301 https://$server_name$request_uri;
}

server {
   listen 443;
   server_name  ;

   root ;
   index index.php;

   ssl on;
   ## Location of the Let's Encrypt certificates
   ssl_certificate /etc/letsencrypt/live//fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live//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:;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_index index.php;
       fastcgi_keep_conn on;
   }
}

Вот что делает каждый раздел этого файла.

Первый блок + server + перенаправляет весь HTTP-трафик на HTTPS:

Частичный cachet.conf

server {
   server_name ;
   listen 80;
   return 301 https://$server_name$request_uri;
}

. . .

Второй блок + server + содержит конкретную информацию об этой настройке, такую ​​как подробности SSL и конфигурацию + php-fpm +.

Директива + root + сообщает Nginx, где находится корневой каталог Cachet. Должен указывать на каталог + public +, и поскольку мы клонировали Cachet в + / home / cachet / www / +, он в конечном итоге становится + root / home / cachet / www / public; +.

Частичный cachet.conf

. . .
server {
   listen 443;
   server_name  ;

   root ;
   index index.php;
   . . .
}

Сертификаты SSL находятся в каталоге Let Encrypt, который должен быть назван в честь вашего доменного имени:

Частичный cachet.conf

. . .
server {
   . . .
   ssl on;
   ## Location of the Let's Encrypt certificates
   ssl_certificate /etc/letsencrypt/live//fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
   . . .
}

Остальные параметры SSL взяты непосредственно из Nginx и Let’s Руководство по шифрованию:

Частичный cachet.conf

. . .
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 +.

Частичный cachet.conf

. . .
server {
   . . .
   location / {
       try_files $uri /index.php$is_args$args;
   }

   location ~ \.php$ {
       include fastcgi_params;
       fastcgi_pass unix:;
       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.

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

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

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

  • * Драйвер кэша * должен быть * ACP (u) *.

  • * Драйвер сеанса * должен быть * ACP (u) *.

  • * Почтовый драйвер * должен быть * SMTP *.

  • * Mail Host * должен быть адресом вашего почтового сервера.

  • * Mail From Address * должен быть адресом электронной почты, с которого будут отправляться уведомления подписчикам.

  • * Имя пользователя почты * должно быть именем пользователя для настройки учетной записи SMTP (обычно это весь ваш адрес электронной почты).

  • * Mail Password * должен быть паролем для настройки учетной записи SMTP.

Нажмите * Next *, чтобы перейти к следующему шагу.

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

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

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

  • * Имя сайта: * Имя, которое будет отображаться на вашей панели.

  • * Домен сайта: * Полное доменное имя, которое вы выбрали для Cachet.

  • * Выберите свой часовой пояс: * Выберите часовой пояс в зависимости от вашей аудитории. Хорошим значением по умолчанию является выбор UTC.

  • * Выберите ваш язык: * Выберите язык, который будет использовать интерфейс Cachet.

  • * Показать поддержку Cachet: * Если вы выберете эту опцию, сообщение * Powered by Cachet * будет отображаться в нижней части вашей общедоступной панели инструментов.

Нажмите * Next *, чтобы перейти к следующему шагу.

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

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

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

Полная настройка

На странице Complete Setup вы будете проинформированы, что Cachet был успешно настроен. Теперь вы можете нажать кнопку «Перейти на панель инструментов», чтобы войти в систему с учетными данными администратора и перейти на страницу панели управления Cachet.

Cachet теперь полностью настроен и функционален. Последний шаг описывает, как обновить Cachet в будущем.

Шаг 9 - Обновление Cachet

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

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

sudo su - cachet
cd /home/cachet/www

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

php artisan down

Получите последний код Cachet от GitHub.

git fetch --all

И перечислите все теги.

git tag -l

Вы увидите все текущие теги, начинающиеся с буквы + v +. Вы можете заметить некоторые из них, которые находятся в бета-версии или статусе Кандидата (RC). Поскольку это производственный сервер, вы можете игнорировать их. Вы также можете посетить the страница релизов Cachet, чтобы увидеть, какой будет последний тег.

Когда вы найдете тег, который хотите использовать для обновления, используйте Git, чтобы проверить этот тег. Например, если бы вы обновились до версии 2.4.0, вы бы использовали:

git checkout

Удалите кэш 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 с SSL на основе SQLite и знаете, как поддерживать его с помощью Git. Вы можете выбрать другие базы данных, такие как MySQL или PostgreSQL. Чтобы узнать больше о возможностях Cachet, ознакомьтесь с official документацией Cachet.

Related