Web巡回・通知システム 移植ガイド.html

Web巡回・通知システム 移植ガイド

Web巡回・通知システム 移植ガイド

開発環境で動作しているPHP版Web巡回・通知システムを、貴社サーバー環境へ安定稼働させるためのガイドです。
特にroot権限がない環境を想定しております。
以下に内容を記載しておりますので、ご確認ください。


1. 事前ご確認事項 (移植前または初期段階で確認)

移植作業を始めるにあたり、お手数ですが以下の情報についてご確認またはご教示いただけますようお願いします。

  • 1.1. Webサーバーの種類とバージョン

    • 貴社サーバーではNginxApacheのどちらが稼働してますか?また、そのバージョンも確認いただければ助かります。
    • 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 コマンドはサーバー上で利用可能ですか?
  • 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の場合: DocumentRootpublic ディレクトリを指していることを確認。.htaccess ファイルが有効(AllowOverride All)で、mod_rewrite が有効になっていることを確認。.htaccess に正しいリライトルールが記述されているか確認。Apacheのログ(error_log)をご確認いただき、エラーメッセージから原因を特定するようご協力ください。
    • 権限: public ディレクトリとその中のファイルがWebサーバープロセスに読み取り権限(r)があるか確認。必要に応じて権限調整をサーバー管理者へご依頼ください。

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 curlcurl拡張が有効になっているかご確認いただければ助かります。無効な場合は管理者へ有効化をご依頼ください。

2.5. ログのタイムスタンプがずれる

  • 原因: PHPのデフォルトタイムゾーン設定が、期待するタイムゾーン(例: Asia/Tokyo)と異なっている。
  • 改善(対策)):
    • php.inidate.timezone 設定をご確認いただき、Asia/Tokyo に設定されていることをご確認いただければ助かります。
    • もし php.ini を編集できない場合、cli_monitor.phpMonitorService.php の両方で date_default_timezone_set('Asia/Tokyo'); をコード冒頭に記述することで対応可能です。

2.6. 「Invalid parameter number」エラー (Cron制御ボタン)

  • 原因: src/Models/Setting.phpset メソッド内で、SQLのプレースホルダと execute に渡されるパラメータの数が一致しない。
  • 改善(対策):
    • Setting.phpset メソッドが、SQLステートメント内の各プレースホルダが execute メソッドの配列で明確にバインドされるように修正済みであることをご確認いただければ助かります。
    • 修正後、Webサーバー (Nginx/Apache) およびPHP-FPMを再起動し、キャッシュの影響を排除するようご協力ください。

2.7. settings テーブルの導入が難しい場合

  • 本システムは、Web管理画面からCronの自動実行を有効・無効にする機能を提供するために、settings テーブルを利用しております。
  • もし、セキュリティポリシーなどの理由によりこのテーブルの導入が難しい場合は、以下の影響がございます。
    • Web管理画面の「巡回・通知 自動実行制御」ボタンは機能しなくなります。
    • cli_monitor.php(Cronから実行される監視スクリプト)は、settings テーブルが存在しない、またはアクセスできない場合、正常に動作しない(致命的エラーが発生する)可能性があります。
    • そのため、もしsettingsテーブルが導入できない場合は、別途システム側でsettingsテーブルへの依存関係を削除する修正が必要となります。その際には、お手数ですが改めてお申し付けください。

3. 移植の進め方と留意点

  • 3.1. 段階的なデプロイ

    全体を一度に移行するのではなく、以下のステップで進めることを推奨いたします。

    1. ファイル配置とWebサーバー設定を行い、Web管理画面が表示されるか確認する。
    2. データベース接続を確認し、ユーザー・ウェブサイトのCRUD操作ができるか確認する。
    3. Cronジョブを設定し、自動巡回とログ出力が正常に行われるか確認する。
    4. 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_PASSWORDCOMMON_CHATWORK_API_TOKENなど機密情報が含まれるため、このファイルの取り扱いには十分ご注意ください。