Debian 8でCachetを使用してステータスページを作成する方法

前書き

Cachetは、https://www.statuspage.io/ [StatusPage.io]やhttps://status.io/[Status .io]。 アプリケーションのアップタイムとダウンタイムを伝え、停止に関する情報を共有するのに役立ちます。

PHPで記述されているため、LAMPまたはLEMPサーバーが既にある場合は、簡単にインストールできます。 すっきりしたインターフェイスを持ち、すべてのデバイスで動作できるように応答するように設計されています。 このチュートリアルでは、DebianのCachetでステータスページを設定します。 使用するソフトウェアスタックは次のとおりです。

  • ステータスページ自体の* Cachet *

  • 作曲家 CachetのPHP依存関係を管理します

  • Cachetのデータを保存するデータベースとしての* SQLite *

  • * Nginx *ステータスページを提供する

CachetはダウンタイムについてWebサイトまたはサーバーを監視しないことに注意してください。 Cachetはインシデントを記録します。これは、ウェブインターフェースまたはCachetのAPIを使用して手動で更新できます。 監視ソリューションをお探しの場合は、https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-monitoring [本番用の構築:Webアプリケーション–監視]チュートリアルをご覧ください。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • Debian 8での初期サーバー設定チュートリアルに従って設定された1つのDebian 8サーバー(sudo非ルートを含む)ユーザー。 Cachetは512MBのメモリで動作しますが、1GB以上で最高のパフォーマンスが得られます。

  • ドメインがサーバーのIPv4アドレスを指すAレコードを持つ完全修飾ドメイン名(FQDN)。 FQDNはhttps://namecheap.com [Namecheap]で購入するか、http://www.freenom.com/en/index.html [Freenom]で無料で入手でき、https:// wwwをフォローできます。 DNSレコードを設定する方法の詳細については、.digitalocean.com / community / tutorials / how-to-set-up-a-host-name-with-digitalocean [このホスト名チュートリアル]。

  • Nginxをインストールして、Let’s Encryptでセットアップします。 このhttps://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-debian-8[Debian 8にNginxをインストールする方法]チュートリアルに従ってNginxをインストールし、Let’s Encryptをセットアップします。 Let’s EncryptでNginxを保護する方法Debian 8。 Cachet用の独自の構成ファイルを作成するため、残りの手順は省略できます。

  • Composerはhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-debian-8のステップ1および2に従ってインストールされます[Debian 8でComposerをインストールおよび使用する方法]。

  • Gitはhttps://www.digitalocean.com/community/tutorials/how-to-install-git-on-debian-8[Debian 8にGitをインストールする方法]のステップ1に従ってインストールされるため、Cachetのソースを取得できます。 GitHubから。

  • SMTPサーバー。Cachetは、インシデントのメールをサブスクライバーに送信し、パスワードリマインダーをCachetのインターフェースで作成されたユーザーに送信できます。 Postfixを使用たとえば、送信専用SMTPサーバーとして、またはhttps://www.mailgun.com/[Mailgun]などのサードパーティプロバイダーを使用します。

手順1-Cachetユーザーの作成

最初に行うことは、Cachetを実行するための個別のユーザーアカウントを作成することです。 これには、セキュリティと分離の利点が追加されます。

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

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

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

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

次に、Cachetの依存関係をインストールする必要があります。これは、ComposerがPHPライブラリをダウンロードおよび解凍するために使用する、多数の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

個々のパッケージの詳細については、http://php.net/manual/en/extensions.php [公式のPHP拡張機能リスト]をご覧ください。

FastCGI Process Managerである `+ php-fpm +`を設定しましょう。 Nginxはこれを使用してリクエストをCachetにプロキシします。

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

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 [複数のWebサイトをNginxとPhp-fpmで安全にホストする方法]が、このファイルの各行の目的は次のとおりです。

  • `+ [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の開発のすべての履歴があります。 最新の安定版リリースはhttps://github.com/CachetHQ/Cachet/releases[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

次に、データベース設定を構成するために、 `+ nano `またはお気に入りのエディターで ` .env +`を開きます。

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

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

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のメールドライバーの詳細については、https://github.com/CachetHQ/Cachet/blob/v2.3.10/config/mail.php [the mail.php source code]およびhttps://laravel.com/docsをご覧ください。 /5.2/mail[Laravelからの対応するメール文書]。

ファイルの編集が終了したら、保存して終了します。 次に、Cachetのデータベースを設定する必要があります。

ステップ5-データベースの移行

Cachetが依存するPHPライブラリは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 」は、データベースのバックアップを取得し、移行を実行し、アプリケーションキーを自動的に生成します(つまり、 Cachetがすべての暗号化に使用する ` .env `の ` APP_KEY +`値。

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

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はキューを使用して、電子メールの送信など、非同期で実行する必要があるタスクをスケジュールします。 推奨される方法は、http://supervisord.org/ [Supervisor]を使用することです。これは、プロセスを監視および制御できる一貫したインターフェイスを提供するプロセスマネージャーです。

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

exit

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

sudo apt-get install supervisor

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

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

このファイルは、Supervisorにプロセスの実行および管理方法を指示します。 スーパーバイザーの詳細については、https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps [インストール方法と管理方法]をご覧ください。 UbuntuおよびDebian VPSのスーパーバイザー]。

そして、次の内容を追加します。 別の1回使用した場合は、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

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

sudo systemctl enable supervisor

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

手順7-Nginxの構成

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

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

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;
}

. . .

2番目の「+ server 」ブロックには、SSLの詳細や「 php-fpm +」設定など、この設定に関する特定の情報が含まれています。

`+ root `ディレクティブは、Cachetのルートディレクトリの場所をNginxに伝えます。 isは ` public `ディレクトリを指し、 ` / home / cachet / www / `にCachetをクローンしたため、最終的には ` root / home / cachet / www / public; +`になります。

部分的なcachet.conf

. . .
server {
   listen 443;
   server_name  ;

   root ;
   index index.php;
   . . .
}

SSL証明書はLet’s 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オプションの残りの部分は、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-8 [Nginx and 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 $ `セクションは、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:;
       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の設定ダッシュボードでいつでも構成を変更できます。

環境設定

最初の構成手順は、環境設定です。

フィールドは次のように入力する必要があります。

  • キャッシュドライバー*は ACP(u)*である必要があります。

  • セッションドライバー*は ACP(u)*である必要があります。

  • メールドライバ*は SMTP *である必要があります。

  • *メールホスト*はメールサーバーのアドレスでなければなりません。

  • * Mail From Address *は、サブスクライバーへの通知の送信元の電子メールアドレスである必要があります。

  • * Mail Username *は、SMTPアカウントのセットアップのユーザー名(通常はメールアドレス全体)である必要があります。

  • * Mail Password *は、SMTPアカウント設定のパスワードである必要があります。

[次へ]をクリックして、次の手順に進みます。

ステータスページのセットアップ

このセクションでは、サイト名、サイトドメイン、タイムゾーン、および言語を設定します。

フィールドは次のように入力する必要があります。

  • *サイト名:*ダッシュボードに表示される名前。

  • サイトドメイン: Cachetに選択したFQDN。

  • *タイムゾーンを選択:*視聴者に応じてタイムゾーンを選択します。 適切なデフォルトはUTCを選択することです。

  • 言語を選択: Cachetのインターフェースで使用する言語を選択します。

  • * Cachetのサポートを表示:このオプションを選択すると、パブリックダッシュボードのフッターに Powered by Cachet *メッセージが表示されます。

[次へ]をクリックして、次の手順に進みます。

管理者アカウントのセットアップ

最後に、管理者アカウントを設定します。 ユーザー名を選択し、有効なメールアドレスと強力なパスワードを入力します。

[完了]をクリックして、すべての変更を保存します。

完全なセットアップ

[セットアップの完了]ページで、Cachetが正常に構成されたことが通知されます。 [ダッシュボードに移動]ボタンをクリックして、管理者の資格情報でログインし、Cachetのダッシュボードページにアクセスできます。

Cachetが完全にセットアップされ、機能するようになりました。 最後のステップでは、将来Cachetをアップグレードする方法について説明します。

ステップ9-Cachetのアップグレード

Gitを使用すると、Cachetの新しいバージョンがリリースされたときにアップグレードが非常に簡単になります。 必要なのは、関連するタグをチェックアウトしてから、データベースの移行を実行することです。

まず、* 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

続行する前に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のオプションの詳細については、https://docs.cachethq.io/v1.0/docs/welcome [Cachetの公式ドキュメント]をご覧ください。

Related