Debian8でCachetを使用してステータスページを作成する方法
序章
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
このコマンドは、/home/cachet
にホームディレクトリを持つcachet という名前のユーザーを作成します。このユーザーのシェルは、/bin/bash
に設定されます。 デフォルトは/bin/sh
ですが、プロンプトに十分な情報が表示されません。 Cachetが使用するコンポーネントに対して排他的に特権を持つのはパスワードなしのユーザーになります。
ユーザーが作成されたので、PHPの依存関係をインストールしましょう。
ステップ2—PHP依存関係のインストール
次に、いくつかのPHPパッケージであるCachetの依存関係と、ComposerがPHPライブラリのダウンロードと解凍に使用するwget
とunzip
をインストールする必要があります。
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拡張機能リストを参照してください。
次に、FastCGIプロセスマネージャーであるphp-fpm
を構成しましょう。 Nginxはこれを使用してリクエストをCachetにプロキシします。
まず、php-fpm
が必要とするCachetの情報をホストするファイルを作成します。 /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 = /
ファイルを保存して閉じます。
これらの設定の詳細については、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スクリプトがリモートファイルを開くことができ、攻撃者が使用する可能性があります。pm
オプションを使用すると、プールのパフォーマンスを構成できます。ondemand
に設定しました。これは、メモリ使用量を低く抑えるためのバランスを提供し、妥当なデフォルトです。 十分なメモリがある場合は、static
に設定できます。 使用するCPUスレッドが多い場合は、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
この時点から、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_
で始まる設定のブロックを見つけます。
元の.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 [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によって処理されます。 まず、正しいディレクトリにいることを確認してください。
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
は、データベースのバックアップを取り、移行を実行し、アプリケーションキーを自動的に生成します(つまり、 Cachetがすべての暗号化に使用する.env
)のAPP_KEY
値。
警告:実稼働環境でCachetをインストールして使用を開始した後は、.env
ファイルにあるAPP_KEY
の値を変更しないでください。 これにより、暗号化/ハッシュ化されたデータがすべて失われます。 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のディレクトリとユーザー名を更新してください。
/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を再起動します。
sudo systemctl restart supervisor
サーバーの再起動時に自動的に開始されるように、スーパーバイザーサービスを有効にします。
sudo systemctl enable supervisor
データベースとタスクキューの準備ができました。 次に設定するコンポーネントはWebサーバーです。
ステップ7—Nginxの構成
php-fpm
と通信するWebサーバープロキシとしてNginxを使用します。 前提条件のセクションには、Let'sEncryptによって発行されたTLS証明書を使用してNginxを設定する方法に関するチュートリアルがあります。
Cachetに必要なNginx設定ファイルを追加しましょう。 /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 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が使用する構成ファイルを検索して選択する場所であるためです。
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ドキュメントをご覧ください。