トップ / インストール方法

インストール方法

このページでできること

  • クヌギGEO(PHP + SQLite)をご自身のサーバへ最短で立ち上げる手順を確認できます。
  • 必須の Basic 認証設定、cron 設定、DataForSEO / GA4 連携の起動準備までを把握できます。

1. 動作要件

項目要件
PHP8.1 以上(拡張: pdo_sqlite, mbstring, json, curl, fileinfo, openssl
Web サーバApache 2.4+ + mod_rewrite + mod_headers(推奨)/Nginx 可(.htaccess 相当を別途記述)
SQLitePHP に同梱されているバージョンで可(WAL モードを利用します)
外部到達性api.dataforseo.com および oauth2.googleapis.com / analyticsdata.googleapis.com への HTTPS アウトバウンド
SSL/TLSHTTPS 必須(Google OAuth はリダイレクト URI が http://localhost 以外では HTTPS が必要)
PHP メモリ制限memory_limit = 512M 推奨。cron スクリプトは内部で 512M を強制設定します。
PHP 実行時間cron 用 CLI は無制限(自動)。ブラウザ経由の手動調査は 1 件ごとに同期 HTTP を行うため、max_execution_time = 0 または十分な値を確保してください。
動作確認済み環境 本ツールの動作確認は エックスサーバー(Xserver)の PHP 8.3.30 で実施しています。Xserver の標準構成(Apache + mod_rewrite、SQLite 同梱)でそのまま動作します。
その他の環境(さくらのレンタルサーバ、ConoHa WING、自前 VPS など)でも、上記の要件を満たしていれば動作するはずですが、現時点では未検証です。

2. ファイル配置

  1. kunugi_geo_Ver0.1.zip をダウンロードします。
  2. ZIP を解凍すると下記のファイル群が直接展開されます(ZIP の中に system/ のような上位ディレクトリは含まれていません)。
    これらをまるごと、クヌギGEO を公開したいディレクトリへ配置してください。配置先のディレクトリ名は任意です。

    例 1(ドメイン直下に公開):https://example.com/ を起点にする場合 → ドキュメントルート(/var/www/example.com/public_html/ など)に直接展開。

    例 2(サブディレクトリに公開):https://example.com/kunugi-geo/ として公開する場合 → /var/www/example.com/public_html/kunugi-geo/ を作成し、その中に展開。

  3. 展開後のディレクトリ構成(抜粋)。以降のドキュメント中の data/api/cron/ などのパスは、すべてこの配置ディレクトリを起点とした相対パスとして表記しています。
    index.php          ← ブラウザで開く起点
    matrix.php
    settings.php
    .htaccess          ← Apache 用:書換え+Basic 認証
    LICENSE            ← MIT 本文(再配布時、内容を別の場所に転記しても可)
    admin/             ← システム管理画面群
    api/               ← REST API & ブートストラップ
                         ※ bootstrap.php / auth_helpers.php / routes.php /
                            ga4_handlers.php / catalog_handlers.php は
                            .htaccess で HTTP からの直接アクセスを禁止
    auth/              ← ログイン・初回設定
    backup/            ← DB バックアップ格納(.htaccess で HTTP 直接アクセス禁止)
    cron/              ← CLI で動かす自動実行スクリプト(.htaccess で HTTP 直接アクセス禁止)
    css/, js/, img/    ← 静的アセット
    img/custom/        ← アップロードロゴ等の配置先
                         (.htaccess で .php / .phtml / .phar / .cgi 等の
                           スクリプト実行を無効化)
    data/              ← SQLite DB / 認証鍵 / ログ(書込み権限が必要・
                         .htaccess で HTTP 直接アクセス禁止)
    data/products/     ← プロダクトごとの DB ファイル(自動生成・data/ の禁止に内包)
    includes/          ← 内部 require 専用(.htaccess で HTTP 直接アクセス禁止)
    manage/            ← プロダクト管理者向け画面群
    products/          ← レポート画面群
    templates/         ← レイアウト共有
    vendor/chartjs/    ← Chart.js v4(MIT・LICENSE 同梱)
    

3. ディレクトリ権限

SQLite DB を含む data/ 配下は Web サーバプロセス(Apache/Nginx)が読み書きできる必要があります。共用サーバなどでは 755 / 644 程度から始め、書き込めなければ 775 / 664 へ緩めてください。

下表のパスは、いずれもクヌギGEO を配置したディレクトリ直下の相対表記です。

パス必要な権限備考
data/Web サーバから読み書き可SQLite DB(app.db, WAL/SHM)と認証鍵 auth_secret.bin、ログを格納します
data/products/Web サーバから読み書き可プロダクトごとの SQLite DB を自動生成します
backup/Web サーバから読み書き可「DB バックアップ」操作で app_YYYY-MM-DD_HHmmss.db が生成されます
data/ga4_cache/Web サーバから読み書き可GA4 レスポンスの一時キャッシュ
img/Web サーバから読み書き可アップロードしたカスタムロゴが配置されます
外部公開禁止のディレクトリ/ファイル 同梱の .htaccess により、以下は HTTP からの直接アクセスを禁止しています。Nginx で運用する場合は同等のロケーション拒否設定を必ず追加してください。
  • ディレクトリ全体を拒否data/(SQLite DB・秘密鍵・インストールトークン)、 includes/(内部 require 専用)、 cron/(CLI 専用スクリプト)、 backup/(DB バックアップ)。
  • 個別ファイルを拒否auth_web.phpapi/bootstrap.phpapi/auth_helpers.phpapi/routes.phpapi/ga4_handlers.phpapi/catalog_handlers.php(いずれも内部 require 専用のため、HTTP からの直接アクセスを拒否)。
  • スクリプト実行のみ無効化img/custom/(アップロードされた画像の閲覧は許可するが、 .php / .phtml / .phar / .pl / .py / .cgi / .sh 等の実行を遮断)。

4. Basic 認証の設定(必須級)

同梱の .htaccess 末尾に以下のような記述があります。ご自身のサーバの htpasswd ファイル絶対パスへ書き換えて有効化してください。

AuthUserFile "/path/to/htpasswd/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user
  1. 適当な場所(例: /etc/apache2/htpasswd/kunugi_geo)に htpasswd ファイルを作成。
    htpasswd -c /etc/apache2/htpasswd/kunugi_geo your_user
  2. .htaccessAuthUserFile をそのファイルパスに書き換える。
  3. ブラウザで配置先 URL(例: https://<サーバ>/)を開き、Basic 認証ダイアログが出るかを確認。
  4. パスワード入力後にクヌギGEO のログイン画面に進めることを確認。
なぜ Basic 認証が必要か クヌギGEO は SQLite DB に DataForSEO のパスワードGoogle OAuth クライアントシークレットGA4 リフレッシュトークンを平文で保持します。DB ファイル本体は同梱の .htaccess により HTTP からの直接ダウンロードは拒否していますが、それだけではアプリ側のログイン画面・各種フォームが不特定多数からアクセスできる状態になり、以下のリスクが残ります。
  • ログイン画面に対するパスワードの総当たり攻撃(ブルートフォース)を、Web サーバ手前で遮断できない。
  • OAuth コールバックや各種フォームに直接アクセスされ、未知のアプリ側脆弱性を突かれるリスクが残る。
  • DataForSEO 認証情報・OAuth クライアント/リフレッシュトークンが入力・編集される画面が、URL を知っているだけで開ける状態になる。
Basic 認証を入れて「Web サーバの段階で認証を通っていない人にはログイン画面すら見せない」二重の防御を作ってください。

5. 初回ブラウザアクセスと初期管理者の登録

  1. 配置先 URL(例: https://<サーバ>/)にアクセス → Basic 認証 → クヌギGEO のログイン画面。
  2. ログイン画面で admin / admin でログインを試みると、自動的に「初期管理者情報」画面(auth/initial_setup.php)に飛びます。
  3. 管理者ログイン ID(メール形式)」と「管理者パスワード(4 文字以上)」を入力 → 「登録して続行」を押下。
  4. 以後はそのメールアドレス+パスワードで auth/login.php(配置先 URL からの相対)でログインします。パスワード再発行メールも、このアドレス宛に送信されます。

6. DataForSEO API の登録

  1. DataForSEO のアカウント登録ページでアカウント作成(個人メール: $1 / ビジネスメール: $5 のテストクレジット付与)。
  2. 本格運用する場合は最低 $50 をデポジット(入金)。クレジットカード等で入金できます。
  3. クヌギGEO の 「システム → DataForSEO API 管理」にログイン名(メール)と API パスワードを入力 → 「API 設定を保存」。
  4. 同画面で「残高を表示」を押し、現在の残高が取得できれば連携 OK。
  5. 必要に応じて実行プラン(Live / Priority / Standard)各 LLM のモデルを選択して保存。
  6. キーワード × 軸の組み合わせから月額・年額コストを試算する DataForSEO 料金シミュレーション も用意しています。

7. GA4 連携(OAuth)の準備

本機能は GA4 流入レポート・GA4 × AI 言及相関を使う場合のみ必要です。詳細手順は GA4 連携(OAuth) を参照。

  1. Google Cloud Console でプロジェクトを作成し、Google Analytics Data API を有効化。
  2. OAuth 同意画面を作成(テスト 段階で構いません。本ツール利用者の Google アカウントを「テストユーザー」に登録)。
  3. OAuth クライアント ID(種別: ウェブ アプリケーション)を作成。承認済みのリダイレクト URI にはクヌギGEO 画面で表示される URI(配置先に応じて https://<サーバ>/api/ga4_callback.php など)を登録。
  4. クヌギGEO の 「システム → GA4 連携」 画面でクライアント ID/シークレットを保存。
  5. 各プロダクトの 「プロダクト管理 → GA4 連携・設定」で GA4 プロパティ ID(数字のみ)を入力 → 「Google で認証」。

8. プロダクトとキーワードの登録

  1. 「システム → プロダクト管理」でプロダクトを 1 件以上作成(自社サービス、商品ライン等)。
  2. 画面上部の「プロダクト」セレクトで対象プロダクトを選択。
  3. 「プロダクト管理 → キーワード登録」でキーワード(最大 2000 件)と自社/競合ブランド、調査軸(順位 / AI Overview / AI Mode / 各 LLM)を登録。
  4. 「プロダクト管理 → 手動での調査実行」で初回のスナップショットを取得。

9. cron による自動調査の設定

毎日同じ時刻に「すべてのプロダクトの本日未取得分」を自動取得するには、サーバの cron に以下を登録してください。

# crontab -e の例(毎日 4:00 に実行 / 配置先が /var/www/example.com/public_html/ の場合)
0 4 * * * /usr/bin/php /var/www/example.com/public_html/cron/run_survey.php --product=all --mode=missingToday >> /var/www/example.com/public_html/data/cron.log 2>&1

エックスサーバー(Xserver)での Cron 設定例

本ツールの動作確認環境(Xserver / PHP 8.3.30)での具体的な手順です。GUI から登録できるので、crontab -e を直接編集する必要はありません。

  1. Xserver サーバーパネル にログイン。
  2. 「アカウント」セクションの 「Cron 設定」 をクリック。
  3. 初回のみ、上部の「Cron 結果の通知アドレス」にエラー通知用メールアドレスを設定して保存(推奨)。
  4. Cron 追加」タブを開き、以下のとおり入力。
    入力例
    0(毎時 0 分に実行)
    4(深夜 4 時に実行)
    日 / 月 / 曜日すべて *(毎日)
    コマンド下のコード参照
  5. 「確認画面へ進む」→「追加する」で登録完了。
cd /home/<サーバーID>/<ドメイン>/public_html && /usr/bin/php8.3 /home/<サーバーID>/<ドメイン>/public_html/cron/run_survey.php --product=all --mode=missingToday >> /home/<サーバーID>/<ドメイン>/public_html/data/cron.log 2>&1

サブディレクトリ(例 /public_html/kunugi-geo/)に配置している場合は、cd 先と /cron//data/ の親パスを実際の配置先に合わせて差し替えてください。

Xserver 特有の注意
  • Cron 実行ユーザーには通常の FTP ユーザーと同等の権限があり、配置ディレクトリ配下の data/ への書き込みは問題ありません(パーミッション 705/755 で OK)。
  • 同時実行数や 1 回あたりの最大実行時間に制限がかかる場合があります(共用サーバの仕様)。大量キーワード×全軸の取得が長時間に渡る場合は、調査実行管理 で曜日を分散させるか、プロダクトごとに別 cron 行に分けてください。
  • Cron スクリプトの php cron/run_survey.php はサーバの sapi が「cli」であることを要求します。Xserver の /usr/bin/php8.3 は CLI モードなので問題ありません。

10. よくあるトラブルと対処法

症状対処
初回アクセスで「DB に接続できません」 配置ディレクトリ配下の data/ に Web サーバプロセスが書き込めるか確認。chown/chmod を見直してください。
ログインしても画面が真っ白 サーバの PHP エラーログを確認。display_errors=Off が一般的なので、エラーログを必ず参照。memory_limit 不足が典型例。
GA4「Google で認証」でリダイレクト URI 不一致エラー Google Cloud Console の OAuth クライアントの「承認済みリダイレクト URI」と、クヌギGEO 画面に表示される URI が完全一致していない。HTTPS / 末尾スラッシュ / 大文字小文字を確認。
DataForSEO 残高が「0」と表示される 未入金、または別アカウントの認証情報が混ざっている。data/app.dbapp_settings.dataforseo_login を確認するか、画面から「認証情報を削除」→ 再入力。
cron が動かない / 実行されない 絶対パスで php を呼んでいるか/cron ユーザに配置ディレクトリ配下の data/ への書き込み権限があるか/data/cron.log にエラーが出ていないか確認。
「ロックファイルを取得できません」 過去のジョブが異常終了して data/cron_survey.lock が残っている。プロセスが本当に居ないことを確認のうえ、ファイルを手動削除。
次に進む 動作確認ができたら、アカウント管理登録 で複数のロール(システム管理者(admin)/プロダクト管理者(product_manager)/閲覧者(viewer))を発行し、拡張レポート(GA4 × AI 相関) の使い方や 拡張レポートの作り方 をご確認ください。