ステータス管理画面のCachet をさくらのレンタルサーバーに設置したときのログ。
開発版の3.xを利用しているが、軽く叩いた感じはとりあえず使える気がする。
目次
確認時点でのさくらのレンタルサーバーではSQLiteでの動作は出来なかった。これはPHP拡張がJSONをサポートしていないからと思われる。
Env
Ver
Cachet 3.x
2b0fc68988309647bdc0ba8e0b40862a3b8ddef4
cachethq/core
87be2387c06264c672dad94c87d00408bf34536d
PHP
8.3.31
MySQL
8.0
Cachetには正確なバージョン番号がなさそうなのでコミットハッシュを書いている。最新のハッシュのコードが入っていることを確認済。
またCachet 3.xの中身は事実上からっぽで、vendor/配下にあるcachethq/coreが本体なので、そちらのバージョンも併記している。
以下のコマンドはすべてzshで実行しているため、さくら標準のcshでは動かない箇所があるかもしれない。
composerがなかったのでcomposerを入れた。ここから先は~/bin/にPATHが通っていることを前提で進める
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47') { echo 'Installer verified'.PHP_EOL; } else { echo 'Installer corrupt'.PHP_EOL; unlink('composer-setup.php'); exit(1); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mkdir ~/bin
mv composer.phar ~/bin/composer
Cacheの取得と設置
git clone -b 3.x https://github.com/cachethq/cachet.git
cd cachet
composer install --no-dev -o
# composerでエラーが出てupdateしろといわれたためupdate、これでインストールまでしてくれる
composer update
# 本体のアップデート
composer update cachethq/core
# 環境変数の編集
cp .env.example .env
.envの編集
デフォルトでAPP_DEBUGがtrueなのでfalseにした方が良い。まだ開発版のためかTIMEZONEを設定してもトップ画面には反映されない。管理画面の一部では反映される。
APP_DEBUG=false
APP_TIMEZONE="Asia/Tokyo"
APP_URL=https://status.example.com
DB_CONNECTION=mysql
DB_HOST=DBホスト
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=データベース名
DB_PASSWORD=パスワード
Cachetのセットアップ
php artisan key:generate
php artisan vendor:publish --tag=cachet
php artisan migrate
# envを閲覧不能にする
cat <<'EOF' | tee .htaccess
<Files .env>
deny from all
</Files>
EOF
# 403になることを確認
curl https://status.example.com/.env
php artisan cachet:make:user
crontの設定。ステータスページ表示する機能しかないのにやる意味があるのかは謎。
* * * * * php /home/<username>/www/path/to/artisan schedule:run >> /dev/null 2>&1
さくらのコンパネからドメインを開き、Web公開フォルダーをpath/to/cachet/publicにする。
Cachet v3.x is currently in development and not yet released. The following instructions are intended for development purposes only and are subject to change.
現時点では上記のようにあり、開発版なのでバグはあると思われる。
SQLiteを使っていて次のようなエラーが出る場合、MySQLに変えると直る。恐らくさくらのレンサバに入ってるSQLite拡張がjson_eachをサポートしてないのが原因。
!Illuminate\Database\QueryException
Internal Server Error
SQLSTATE[HY000]: General error: 1 no such table: json_each (Connection: sqlite, SQL: select *
from "webhook_subscriptions" where ("send_all_events" = 1 or exists (select 1 from
json_each("selected_events") where "json_each"."value" is component_updated)))
Expand vendor frames
app/Http/Middleware/TrustProxies.php :32
外形監視をして、その結果をステータスに表示してくれるツールだと思っていたら、ステータスの設定を行う機能と、それを表示する機能しかなかった。
つまり手動でメンテナンス中とか出したり、外形監視からAPIを蹴って何か表示するのには使えるが、このツールにはそれ以上の機能はないようだ。
これはダッシュボードを作る画面とAPIを提供してくれるツールということだ。
install.phpにアクセスして設定を書き換えるみたいな、一瞬ではあるものの脆弱な瞬間がないのは便利だと思った。
Cachetは画面操作によってステータスを変えたり、履歴を出したりできるが、curlを投げて落ちてたら画面に表示くらいならパパっと作れそうだなと思った。
とはいえ、画面のリッチさや、APIからも操作できることなどを考えると、そんなのを作るのも大変なので、Cachetのようなツールを使った方が楽なのは間違いない。
まぁあった方が豪華だし…みたいな…。
保守やオペのコストの方が高いので結局使わずじまいになる可能性も無きにしも非ずではある。