Web巡回・通知システム 移植ガイド
開発環境で動作しているPHP版Web巡回・通知システムを、貴社サーバー環境へ安定稼働させるためのガイドです。
特にroot権限がない環境を想定しております。
以下に内容を記載しておりますので、ご確認ください。
1. 事前ご確認事項 (移植前または初期段階で確認)
移植作業を始めるにあたり、お手数ですが以下の情報についてご確認またはご教示いただけますようお願いします。
-
1.1. Webサーバーの種類とバージョン
- 貴社サーバーではNginxとApacheのどちらが稼働してますか?また、そのバージョンも確認いただければ助かります。
- Webサーバーの主要な設定ファイル(例:
nginx.conf
,httpd.conf
)へのアクセス権限はありますか? もしくは、設定変更が必要な場合はサーバー担当者へご依頼することは可能でしょうか?
-
1.2. PHP-FPMの稼働状況と設定
- PHP-FPMは稼働してますか?また、そのバージョンも確認いただければ助かります。
- PHP-FPMのソケットファイルパス(例:
/var/run/php/php8.2-fpm.sock
)またはIPアドレスとポート(例:127.0.0.1:9000
)について、ご教示いただけますか? - PHP-FPMプロセスが動作しているユーザーとグループ(例:
www-data
)につきましても、確認いただければ助かります。
-
1.3. アプリケーション配置ディレクトリと所有者
- 本システムを配置するにあたり、推奨されるディレクトリパスはありますか?(例:
/home/youruser/public_html/web-monitor-app/
,/var/www/html/web-monitor-app/
など) - 当該ディレクトリの所有者とグループは、どのユーザーが適切となりますか?(ご担当者様のユーザー、またはWebサーバーユーザーなど)
- 本システムを配置するにあたり、推奨されるディレクトリパスはありますか?(例:
-
1.4. データベース接続情報とテーブル構成
- MySQLのホスト名、データベース名、ユーザー名、パスワードについて、ご教示いただけますか?
- 本システムでは、以下の4つのテーブルを使用します。これらのテーブルを作成する権限が、指定いただくデータベースユーザーに付与されていますか?
users
: ユーザー情報websites
: 巡回対象のWebサイト情報website_checks
: Webサイトの巡回履歴settings
: Web管理画面からのCron自動実行の有効/無効制御およびシステム設定の保存
- また、テーブルの作成、データの挿入・更新・削除に必要な権限は付与されていますか?
-
1.5. Cronジョブの設定方法
crontab -e
コマンドでのCronジョブ設定は可能でしょうか?- PHP CLIの実行ファイルパス(例:
/usr/bin/php
)を、ご教示いただけますか? - Cronジョブのログ(本システムの
php_cron_task.log
以外のサーバー側Cronログ)の出力先はどちらになりますか?
-
1.6. ネットワークアクセス
- サーバーから外部のChatwork API (
api.chatwork.com
) へのHTTPS (ポート 443) 通信は許可されていますか? curl
コマンドはサーバー上で利用可能ですか?
- サーバーから外部のChatwork API (
-
1.7. Composerの利用
- 貴社サーバーにはComposerがインストールされてますか?
- もしComposerがインストールされていない場合、本システムに同梱の
vendor
ディレクトリ(Composerがインストールするライブラリ群)をそのままデプロイしても問題ありませんか?
2. 発生しうる障害とその改善(対策)
2.1. Web管理画面が表示されない / CSSが適用されない / ルーティングエラー (404)
- 原因: Webサーバー(Nginx/Apache)がPHPファイルを正しく処理できていない、アプリケーションのルートディレクトリ設定が間違っている、URLリライティングルールが正しく設定されていない、ファイルやディレクトリの権限不足、PHP-FPMが稼働していないかWebサーバーと連携できていない。
- 改善(対策):
- Nginxの場合:
location /
ブロック内のroot
ディレクティブがpublic
ディレクトリを指していることを確認。try_files $uri $uri/ /index.php?$query_string;
のようなルーティング設定がされていることを確認。fastcgi_pass
がPHP-FPMのソケットまたはポートを正しく指していることを確認。Webサーバーのログ(error.log
)をご確認いただき、エラーメッセージから原因を特定するようご協力ください。 - Apacheの場合:
DocumentRoot
がpublic
ディレクトリを指していることを確認。.htaccess
ファイルが有効(AllowOverride All
)で、mod_rewrite
が有効になっていることを確認。.htaccess
に正しいリライトルールが記述されているか確認。Apacheのログ(error_log
)をご確認いただき、エラーメッセージから原因を特定するようご協力ください。 - 権限:
public
ディレクトリとその中のファイルがWebサーバープロセスに読み取り権限(r
)があるか確認。必要に応じて権限調整をサーバー管理者へご依頼ください。
- Nginxの場合:
2.2. Cronログが出力されない / PHP Warning (init.sql の読み込みエラー)
- 原因:
cli_monitor.php
が指定されたログディレクトリ(logs/
)に書き込み権限がない、init.sql
ファイルの読み取り権限がない、Cronジョブの実行ユーザーがアプリケーションのディレクトリやファイルにアクセスできない、Cronコマンドのパスやオプションが間違っている。 - 改善(対策):
- 権限:
web-monitor-php-app
ディレクトリ、特にlogs/
およびmysql_init/
ディレクトリの所有者とパーミッションをご確認ください。Cronジョブが実行されるユーザーがこれらのディレクトリに書き込み(logs/
)および読み取り(mysql_init/
)権限を持つように設定を管理者へご依頼ください。特に親ディレクトリの「その他」の読み取り権限(o+r
,755
)が必要になる場合がございます。 - Cron設定:
crontab -e
で設定されたコマンドのパスが正しいか、PHP CLIのパスが正しいかをご確認ください。ログリダイレクトが正しく記述されているかご確認ください。 - Cronジョブ実行後、サーバー側のCronログ(例:
/var/log/syslog
や/var/log/cron
)をご確認ください。
- 権限:
2.3. データベース接続エラー / データが保存・表示されない
- 原因:
.env
ファイルのデータベース接続情報が間違っている、指定されたデータベースユーザーに適切な権限がない、MySQLサーバーが稼働していないかリモート接続が許可されていない、初回デプロイ時にinit.sql
が実行されていない。 - 改善(対策):
.env
ファイルのDB接続情報を依頼者から提供された正確な情報に更新いたします。- DBユーザーに最低限必要な権限が付与されていることをご確認いただき、不足していれば管理者へご依頼ください。
- 初回デプロイ時に
php cli_monitor.php
を手動で実行し、テーブル作成が正常に行われるかご確認ください。
2.4. Chatwork通知が送信されない
- 原因: サーバーから
api.chatwork.com
へのネットワーク接続がファイアウォールなどでブロックされている、Chatwork APIトークンやルームIDが間違っている、curl
拡張がPHPにインストールされていない。 - 改善(対策):
- サーバー上で
curl https://api.chatwork.com/v2/me
など簡単なcurl
コマンドを実行し、Chatwork APIへの接続テストを行っていただけますでしょうか。ファイアウォールが原因であれば管理者へポート開放をご依頼ください。 - ご登録いただくAPIトークンやルームIDが正しいか、再度ご確認いただければ助かります。
php -m | grep curl
でcurl
拡張が有効になっているかご確認いただければ助かります。無効な場合は管理者へ有効化をご依頼ください。
- サーバー上で
2.5. ログのタイムスタンプがずれる
- 原因: PHPのデフォルトタイムゾーン設定が、期待するタイムゾーン(例:
Asia/Tokyo
)と異なっている。 - 改善(対策)):
php.ini
のdate.timezone
設定をご確認いただき、Asia/Tokyo
に設定されていることをご確認いただければ助かります。- もし
php.ini
を編集できない場合、cli_monitor.php
とMonitorService.php
の両方でdate_default_timezone_set('Asia/Tokyo');
をコード冒頭に記述することで対応可能です。
2.6. 「Invalid parameter number」エラー (Cron制御ボタン)
- 原因:
src/Models/Setting.php
のset
メソッド内で、SQLのプレースホルダとexecute
に渡されるパラメータの数が一致しない。 - 改善(対策):
Setting.php
のset
メソッドが、SQLステートメント内の各プレースホルダがexecute
メソッドの配列で明確にバインドされるように修正済みであることをご確認いただければ助かります。- 修正後、Webサーバー (Nginx/Apache) およびPHP-FPMを再起動し、キャッシュの影響を排除するようご協力ください。
2.7. settings
テーブルの導入が難しい場合
- 本システムは、Web管理画面からCronの自動実行を有効・無効にする機能を提供するために、
settings
テーブルを利用しております。 - もし、セキュリティポリシーなどの理由によりこのテーブルの導入が難しい場合は、以下の影響がございます。
- Web管理画面の「巡回・通知 自動実行制御」ボタンは機能しなくなります。
cli_monitor.php
(Cronから実行される監視スクリプト)は、settings
テーブルが存在しない、またはアクセスできない場合、正常に動作しない(致命的エラーが発生する)可能性があります。- そのため、もし
settings
テーブルが導入できない場合は、別途システム側でsettings
テーブルへの依存関係を削除する修正が必要となります。その際には、お手数ですが改めてお申し付けください。
3. 移植の進め方と留意点
-
3.1. 段階的なデプロイ
全体を一度に移行するのではなく、以下のステップで進めることを推奨いたします。
- ファイル配置とWebサーバー設定を行い、Web管理画面が表示されるか確認する。
- データベース接続を確認し、ユーザー・ウェブサイトのCRUD操作ができるか確認する。
- Cronジョブを設定し、自動巡回とログ出力が正常に行われるか確認する。
- Chatwork通知が正しく送信されるか確認する。
-
3.2. ログの活用
Webサーバーのログ、PHPのエラーログ、Cronのシステムログ、そして本アプリケーションの独自ログ(
php_cron_task.log
)を常に確認し、問題発生時の手がかりとしてください。 -
3.3. コミュニケーション
root権限がない環境では、サーバー管理者との連携が不可欠です。事前に確認いただきたい事項をリストアップし、発生した障害や必要な変更を明確にお伝えすることで、迅速にご対応いただけるようご協力をお願いします。
-
3.4. 環境差異の吸収
開発環境と本番環境の差異を把握し、それらに対応できるように設定ファイルやスクリプトを柔軟に調整ください。可能であれば、本番環境と似たステージング環境をご用意いただくのが理想的です。
-
3.5. 環境設定ファイル(
.env
)の更新本システムは、データベース接続情報や外部サービス(Chatwork)のAPIトークンなどを、ルートディレクトリに配置される
.env
ファイルから読み込みます。移植先のサーバー環境に合わせて、以下の設定値を正確に更新する必要があります。
DB_HOST
: データベースのホスト名DB_NAME
: データベース名DB_USER
: データベース接続ユーザー名DB_PASSWORD
: データベース接続パスワードCOMMON_CHATWORK_API_TOKEN
: 共通のChatwork APIトークン(個別APIを使用しない場合)
【重要】
.env
ファイルはアプリケーションの動作に不可欠です。上記の設定が正しくないと、データベース接続エラーやChatwork通知の失敗など、システム全体の機能に影響が出ます。
また、DB_PASSWORD
やCOMMON_CHATWORK_API_TOKEN
など機密情報が含まれるため、このファイルの取り扱いには十分ご注意ください。