序章
Cachet は、StatusPage.ioやStatus.ioなどのホストされたサービスに代わる自己ホスト型のステータスページです。 これは、アプリケーションの稼働時間とダウンタイムを伝達し、停止に関する情報を共有するのに役立ちます。
PHPで記述されているため、LAMPまたはLEMPサーバーを既にお持ちの場合は、簡単にインストールできます。 クリーンなインターフェイスを備えており、すべてのデバイスで動作できるように応答するように設計されています。 このチュートリアルでは、DebianでCachetを使用してステータスページを設定します。 使用するソフトウェアスタックは次のとおりです。
- ステータスページ自体のCachet
- Composer は、CachetのPHP依存関係を管理します
- Cachetのデータを保存するデータベースとしてのSQLite
- Nginxはステータスページを提供します
CachetはWebサイトまたはサーバーのダウンタイムを監視しないことに注意してください。 Cachetはインシデントを記録します。これは、WebインターフェイスまたはCachetのAPIを使用して手動で更新できます。 監視ソリューションをお探しの場合は、 Building for Production:Webアプリケーション–Monitoringチュートリアルをご覧ください。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
Debian 8 チュートリアルを使用した初期サーバーセットアップ(sudo非rootユーザーを含む)に従ってセットアップされた1台のDebian8サーバー。 Cachetは512MBのメモリで動作しますが、1GB以上で最高のパフォーマンスが得られます。
-
ドメインがサーバーのIPv4アドレスを指すAレコードを持つ完全修飾ドメイン名(FQDN)。 FQDNはNamecheapで購入するか、 Freenom で無料で入手できます。また、DNSレコードの設定方法の詳細については、このホスト名チュートリアルに従ってください。
-
Nginxがインストールされ、Let’sEncryptを使用してセットアップされました。 このDebian8にNginxをインストールする方法チュートリアルに従ってNginxをインストールし、 Debian8でLet’sEncryptを使用してNginxを保護する方法の最初の2つの手順に従ってLet’sEncryptを設定できます。 。 Cachet用に独自の構成ファイルを作成するため、残りの手順はスキップできます。
-
Debian8にComposerをインストールして使用する方法の手順1と2に従ってComposerをインストールします。
-
Debian 8 にGitをインストールする方法のステップ1に従ってインストールされたGit。これにより、GitHubからCachetのソースをプルできます。
-
SMTPサーバー。これにより、Cachetは、サブスクライバーへのインシデントの電子メールと、Cachetのインターフェイスで作成されたユーザーへのパスワードリマインダーを送信できます。 たとえば、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
個々のパッケージの詳細については、公式の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を使用して複数のWebサイトを安全にホストする方法を参照してください。ただし、このファイルの各行の目的は次のとおりです。
[cachet]
プールの名前です。 各プールには一意の名前を付ける必要がありますuser
とgroup
Linuxユーザーと、新しいプールが実行されるグループです。 手順1で作成したユーザーと同じです。listen.owner
とlisten.group
リスナーの所有権を定義します。 新しいのソケットphp-fpm
プール。 Nginxはこのソケットを読み取れる必要があるため、b 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スクリプトがリモートファイルを開くことができ、攻撃者が使用する可能性があります。- The
pm
オプションを使用すると、プールのパフォーマンスを構成できます。 に設定しましたondemand
これは、メモリ使用量を低く抑えるためのバランスを提供し、妥当なデフォルトです。 十分なメモリがある場合は、次のように設定できますstatic
. 使用するCPUスレッドが多い場合は、dynamic
より良い選択かもしれません。 - The
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
この時点から、Gitブランチやタグを含む、Cachetの開発のすべての履歴があります。 Cachetのリリースページから最新の安定したリリースを確認できますが、このディレクトリでGitタグを表示することもできます。
公開時点で、Cachetの最新の安定バージョンはv2.3.11でした。 Gitを使用してそのバージョンをチェックアウトします。
- git checkout v2.3.11
次に、Cachetの構成ファイルについて理解しましょう。
ステップ4—Cachetを構成する
Cachetには、という構成ファイルが必要です .env
、これはCachetを開始するために存在する必要があります。 その中で、Cachetがセットアップに使用する環境変数を構成できます。
Cachetに付属している構成例をバックアップ用にコピーしてみましょう。
- cp .env.example .env
ここで追加する構成には2つのビットがあります。1つはデータベースを構成するためのもので、もう1つはメールサーバーを構成するためのものです。
データベースにはSQLiteを使用します。 構成は簡単で、追加のサーバーコンポーネントをインストールする必要はありません。
まず、データベースをホストする空のファイルを作成します。
- touch ./database/database.sqlite
次に、開く .env
と nano
または、データベース設定を構成するためのお気に入りのエディター。
- 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のデータベースオプションですべての可能なデータベースドライバー名を確認できます。
次に、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の対応するメールドキュメントをご覧ください。
ファイルの編集が終了したら、保存して終了します。 次に、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
、データベースのバックアップを取り、移行を実行し、アプリケーションキーを自動的に生成します(つまり、 the APP_KEY
の値 .env
)Cachetがすべての暗号化に使用します。
警告:決して変更しないでください APP_KEY
にある値 .env
実稼働環境でCachetをインストールして使用を開始した後のファイル。 これにより、暗号化/ハッシュ化されたデータがすべて失われます。 使用 php artisan app:install
コマンドは1回だけです。 このため、のバックアップを保持することをお勧めします .env
.
インストールを完了します。
- php artisan app:install
出力は次のようになります。
OutputClearing settings cache...
Settings cache cleared!
. . .
Clearing cache...
Application cache cleared!
Cache cleared!
最後のプロアクティブな手順として、500エラーを回避するためにCachetのキャッシュを削除します。
- rm -rf bootstrap/cache/*
データベースの準備ができたので、Cachetのタスクキューを構成できます。
ステップ6—タスクキューの構成
Cachetはキューを使用して、電子メールの送信など、非同期で実行する必要のあるタスクをスケジュールします。 推奨される方法は、スーパーバイザーを使用することです。これは、プロセスを監視および制御できる一貫したインターフェイスを提供するプロセスマネージャーです。
まず、 cachet ユーザーのセッションからログアウトし、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およびDebianVPSにスーパーバイザーをインストールして管理する方法を参照してください。
そして、以下の内容を追加します。 別の回数を使用したことがある場合は、必ず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
サーバーの再起動時に自動的に開始されるように、スーパーバイザーサービスを有効にします。
- sudo systemctl enable supervisor
データベースとタスクキューの準備ができました。 次に設定するコンポーネントはWebサーバーです。
ステップ7—Nginxの構成
と通信するWebサーバープロキシとしてNginxを使用します php-fpm
. 前提条件のセクションには、Let’sEncryptによって発行された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
構成。
The root
ディレクティブは、CachetのルートディレクトリがどこにあるかをNginxに通知します。 を指す必要があります public
ディレクトリと、Cachetのクローンを作成してから /home/cachet/www/
、最終的には 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およびLet’sEncryptチュートリアルから直接取得されます。
. . .
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;
. . .
}
The location ~ \.php$
セクションでは、PHPファイルを提供する方法をNginxに指示します。 最も重要な部分は、作成時に使用した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;
}
}
まだ行っていない場合は、ファイルを保存して閉じます。
NginxのCachet構成が作成されたので、へのシンボリックリンクを作成します 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を介して行われます。 これには、サイト名とタイムゾーンの設定、および管理者アカウントの作成が含まれます。 3つのステップ(環境、ステータスページ、および管理者アカウントのセットアップ)があり、後でCachetの設定ダッシュボードでいつでも構成を変更できます。
環境設定
最初の構成手順は、環境のセットアップです。
注:使用しているCachetバージョンにはバグがあり、メール設定がすでに設定されている場合でも、環境設定ページに表示されません。 .env
. これはバージョン2.4で修正される予定です。
フィールドは次のように入力する必要があります。
- キャッシュドライバーはACP(u)である必要があります。
- セッションドライバーはACP(u)である必要があります。
- メールドライバはSMTPである必要があります。
- メールホストをメールサーバーアドレスにする必要があります。
- Mail From Address は、サブスクライバーへの通知の送信元となる電子メールアドレスである必要があります。
- メールユーザー名は、SMTPアカウント設定のユーザー名(通常はメールアドレス全体)である必要があります。
- メールパスワードはSMTPアカウント設定のパスワードである必要があります。
次へをクリックして次のステップに進みます。
ステータスページの設定
このセクションでは、サイト名、サイトドメイン、タイムゾーン、および言語を設定します。
注: Cachetは多くの言語をサポートしていますが、これはコミュニティ主導のプロジェクトであるため、英語以外の言語で翻訳されていない文字列が存在する可能性があります。 サポートされている言語のリストを表示できます。これには、翻訳されたコンテンツの割合も含まれています。
フィールドは次のように入力する必要があります。
- サイト名:ダッシュボードに表示される名前。
- サイトドメイン:Cachetに選択したFQDN。
- タイムゾーンを選択してください:視聴者に応じてタイムゾーンを選択してください。 良いデフォルトはUTCを選択することです。
- 言語を選択してください:Cachetのインターフェースが使用する言語を選択してください。
- Cachetのサポートを表示:このオプションを選択すると、 Powered byCachetメッセージがパブリックダッシュボードのフッターに表示されます。
次へをクリックして次のステップに進みます。
管理者アカウントの設定
最後に、管理者アカウントを設定します。 ユーザー名を選択し、有効なメールアドレスと強力なパスワードを入力してください。
完全なセットアップをクリックして、すべての変更を保存します。
完全なセットアップ
[完全なセットアップ]ページで、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
. ベータ版またはリリース候補(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ドキュメントをご覧ください。