序章

Cachet は、StatusPage.ioStatus.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を実行するための個別のユーザーアカウントを作成することです。 これには、セキュリティと分離という追加の利点があります。

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

このコマンドは、/home/cachetにホームディレクトリを持つcachet という名前のユーザーを作成します。このユーザーのシェルは、/bin/bashに設定されます。 デフォルトは/bin/shですが、プロンプトに十分な情報が表示されません。 Cachetが使用するコンポーネント専用の特権を持つのはパスワードなしのユーザーになります。

ユーザーが作成されたので、PHPの依存関係をインストールしましょう。

ステップ2—PHP依存関係のインストール

次に、いくつかのPHPパッケージであるCachetの依存関係と、ComposerがPHPライブラリのダウンロードと解凍に使用するwgetunzipをインストールする必要があります。

  1. sudo apt-get install \
  2. php5-fpm php5-curl php5-apcu php5-readline \
  3. php5-mcrypt php5-apcu php5-cli php5-gd php5-sqlite\
  4. wget unzip

個々のパッケージの詳細については、公式のPHP拡張機能リストを参照してください。

次に、FastCGIProcessManagerであるphp-fpmを構成しましょう。 Nginxはこれを使用してリクエストをCachetにプロキシします。

まず、php-fpmが必要とするCachetの情報をホストするファイルを作成します。 /etc/php5/fpm/pool.d/cachet.confnanoまたはお気に入りのエディターで開きます。

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

ファイルを保存して閉じます。

これらの設定の詳細については、NginxとPhp-fpmを使用して複数のWebサイトを安全にホストする方法に関する記事を参照してください。ただし、このファイルの各行の目的は次のとおりです。

  • [cachet]はプールの名前です。 各プールには一意の名前を付ける必要があります
  • usergroupは、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_flagphp_admin_valueに似ていますが、ブール値の単なるスイッチです。 onおよびoff。 PHP関数allow_url_fopenを無効にします。これにより、PHPスクリプトがリモートファイルを開くことができ、攻撃者が使用する可能性があります。
  • pmオプションを使用すると、プールのパフォーマンスを構成できます。 ondemandに設定しました。これは、メモリ使用量を低く抑えるためのバランスを提供し、妥当なデフォルトです。 十分なメモリがある場合は、staticに設定できます。 使用するCPUスレッドが多い場合は、dynamicの方が適している可能性があります。
  • chdirオプションは、ファイルシステムのルートである/である必要があります。 別の重要なオプション(chroot)を使用しない限り、これを変更しないでください。

php-fpmを再起動して、変更を有効にします。

  1. sudo systemctl restart php5-fpm

まだ行っていない場合は、php-fpmサービスを有効にして、サーバーの再起動時に自動的に開始されるようにします。

  1. sudo systemctl enable php5-fpm

一般的なPHPパッケージがインストールされたので、Cachetをダウンロードしましょう。

ステップ3—Cachetをダウンロードする

CachetのソースコードはGitHubでホストされています。 これにより、Gitをダウンロード、インストール、およびアップグレードするために簡単に使用できるようになります。

次のいくつかの手順は、 cachet ユーザーとして実行する必要があるため、それに切り替えます。

  1. sudo su - cachet

Cachetのソースコードをwwwという新しいディレクトリに複製します。

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

それが完了したら、Cachetのソースコードが存在する新しいディレクトリに移動します。

  1. cd www

この時点から、Gitブランチやタグを含む、Cachetの開発のすべての履歴があります。 Cachetのリリースページから最新の安定したリリースを確認できますが、このディレクトリでGitタグを表示することもできます。

公開時点では、Cachetの最新の安定バージョンはv2.3.11でした。 Gitを使用してそのバージョンをチェックアウトします。

  1. git checkout v2.3.11

次に、Cachetの構成ファイルについて理解しましょう。

ステップ4—Cachetを構成する

Cachetには、.envという構成ファイルが必要です。このファイルは、Cachetを起動するために存在している必要があります。 その中で、Cachetがセットアップに使用する環境変数を構成できます。

Cachetに付属している構成例をバックアップ用にコピーしてみましょう。

  1. cp .env.example .env

ここで追加する構成には2つのビットがあります。1つはデータベースを構成するためのもので、もう1つはメールサーバーを構成するためのものです。

データベースにはSQLiteを使用します。 構成は簡単で、追加のサーバーコンポーネントをインストールする必要はありません。

まず、データベースをホストする空のファイルを作成します。

  1. touch ./database/database.sqlite

次に、.envnanoまたはお気に入りのエディターで開いてデータベース設定を構成します。

  1. 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=sqlite
. . .

注: MySQLやPostgreSQLなどの別のデータベースを使用している場合は、Cachetのデータベースオプションですべての可能なデータベースドライバー名を確認できます。

次に、MAIL_*設定のSMTPサーバーの詳細を入力する必要があります。

.env
. . .
MAIL_HOST=smtp.example.com
MAIL_PORT=25
MAIL_USERNAME=smtp_username
MAIL_PASSWORD=smtp_password
MAIL_ADDRESS=[email protected]
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によって処理されます。 まず、正しいディレクトリにいることを確認してください。

  1. cd /home/cachet/www

次に、Composerを実行し、開発目的で使用される依存関係を除いて、依存関係をインストールします。 インターネット接続の速度によっては、これには少し時間がかかる場合があります。

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

データベーススキーマを作成し、移行を実行します。

  1. 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がすべての暗号化に使用する.env)のAPP_KEY値。

警告:実稼働環境でCachetをインストールして使用を開始した後は、.envファイルにあるAPP_KEYの値を変更しないでください。 これにより、暗号化/ハッシュ化されたデータがすべて失われます。 php artisan app:installコマンドは1回だけ使用してください。 このため、.envのバックアップを保持することをお勧めします。

インストールを完了します。

  1. php artisan app:install

出力は次のようになります。

Output
Clearing settings cache... Settings cache cleared! . . . Clearing cache... Application cache cleared! Cache cleared!

最後のプロアクティブな手順として、500エラーを回避するためにCachetのキャッシュを削除します。

  1. rm -rf bootstrap/cache/*

データベースの準備ができたので、Cachetのタスクキューを構成できます。

ステップ6—タスクキューの構成

Cachetはキューを使用して、電子メールの送信など、非同期で実行する必要のあるタスクをスケジュールします。 推奨される方法は、スーパーバイザーを使用することです。これは、プロセスを監視および制御できる一貫したインターフェイスを提供するプロセスマネージャーです。

まず、 cachet ユーザーのセッションからログアウトし、sudoの非rootユーザーに切り替えてください。

  1. exit

スーパーバイザーをインストールします。

  1. sudo apt-get install supervisor

次に、SupervisorがCachetから必要とする情報を含むファイルを作成します。 /etc/supervisor/conf.d/cachet.confを開きます。

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

このファイルは、スーパーバイザーにそのプロセスを実行および管理する方法を指示します。 スーパーバイザーの詳細については、UbuntuおよびDebianVPSにスーパーバイザーをインストールして管理する方法を参照してください。

そして、以下の内容を追加します。 別の方法を使用したことがある場合は、必ずCachetのディレクトリとユーザー名を更新してください。

/etc/supervisor/conf.d/cachet.conf
[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を再起動します。

  1. sudo systemctl restart supervisor

サーバーの再起動時に自動的に開始されるように、スーパーバイザーサービスを有効にします。

  1. sudo systemctl enable supervisor

データベースとタスクキューの準備ができました。 次に設定するコンポーネントはWebサーバーです。

ステップ7—Nginxの構成

php-fpmと通信するWebサーバープロキシとしてNginxを使用します。 前提条件のセクションには、Let’sEncryptによって発行されたTLS証明書を使用してNginxを設定する方法に関するチュートリアルがあります。

Cachetに必要なNginx設定ファイルを追加しましょう。 /etc/nginx/sites-available/cachet.confnanoまたはお気に入りのエディターで開きます。

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

これはファイルの全文であり、コピーして貼り付ける必要があります。 必ずexample.comをドメイン名に置き換えてください。 各セクションの機能については、以下で詳しく説明します。

/etc/nginx/sites-available/cachet.conf
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にリダイレクトします。

部分的なcachet.conf
server {
    server_name example.com;
    listen 80;
    return 301 https://$server_name$request_uri;
}

. . .

2番目のserverブロックには、SSLの詳細やphp-fpm構成など、このセットアップに関する特定の情報が含まれています。

rootディレクティブは、CachetのルートディレクトリがどこにあるかをNginxに通知します。 publicディレクトリを指す必要があり、/home/cachet/www/にCachetのクローンを作成したため、最終的にはroot /home/cachet/www/public;になります。

部分的なcachet.conf
. . .
server {
    listen 443;
    server_name  example.com;

    root /home/cachet/www/public;
    index index.php;
    . . .
}

SSL証明書は、Let’s Encryptディレクトリ内にあります。このディレクトリには、ドメイン名にちなんで名前を付ける必要があります。

部分的なcachet.conf
. . .
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チュートリアルから直接取得されます。

部分的な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$セクションは、PHPファイルを提供する方法をNginxに指示します。 最も重要な部分は、/etc/php5/fpm/pool.d/cachet.confを作成したときに使用したUnixソケットファイルを指すことです。 具体的には、/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:/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が使用する構成ファイルを検索して選択する場所であるためです。

  1. sudo ln -s /etc/nginx/sites-available/cachet.conf /etc/nginx/sites-enabled/cachet.conf

変更を有効にするには、Nginxを再起動します。

  1. sudo systemctl restart nginx

また、Nginxサービスを有効にして、サーバーの再起動時に自動的に開始されるようにします。

  1. sudo systemctl enable nginx

それでおしまい! ブラウザでドメイン名に移動すると、Cachetの設定ページが表示されます。 それを見ていきましょう。

ステップ8—Cachetの初期設定を終了する

Cachetの残りのセットアップは、ブラウザのGUIを介して行われます。 これには、サイト名とタイムゾーンの設定、および管理者アカウントの作成が含まれます。 3つのステップ(環境、ステータスページ、および管理者アカウントのセットアップ)があり、後でCachetの設定ダッシュボードでいつでも構成を変更できます。

環境設定

最初の構成手順は、環境のセットアップです。

注:使用しているCachetバージョンにはバグ