🌐 言語: 🇻🇳 Tiếng Việt · 🇬🇧 English · 🇯🇵 日本語(現在)
安全な本番環境の設定 — .env ファイル、HTTPS、サーバー
はじめに
このページでは、実際に稼働している(本番環境の)GP247 サイトを安全に設定する方法を説明します:.env ファイル、デバッグモード、HTTPS、
Cookie、Web のドキュメントルート、フォルダの権限、Docker。対象は技術担当者と、ホスティングに自分でインストールするサイトオーナーです。
読み終えると、各変数の正しい値の一覧、誤った値にしたときの影響、5 分でできるセルフチェックの方法がわかります。
ℹ️
.envファイルとは: サイトのルートフォルダにあるテキストファイルで、サイト固有の設定を含みます:データベースのパスワード、暗号化 キー、動作モードなど。このファイルを読める人は、サイトのすべての秘密情報を読めます。
ひと目でわかる
4 つの設定層がすべて正しくなければなりません。1 つでも誤ると脆弱性になります。
flowchart LR
A["Web サーバー<br/>HTTPS、public/ フォルダ"] --> B[".env ファイル<br/>production、デバッグ無効"]
B --> C["コードのインストール<br/>開発用パッケージなし、設定キャッシュ"]
C --> D["フォルダの権限<br/>storage、bootstrap/cache"]
.envに必須の 3 行:APP_ENV=production、APP_DEBUG=false、APP_URL=https://…。- Web のドキュメントルート(document root)は
public/でなければなりません — プロジェクトのルートフォルダを指していると、.envファイルをブラウザからダウンロードされるおそれがあります。 .env.exampleは開発マシン用のサンプルです(APP_ENV=local、LOG_LEVEL=debug)— 本番サイトにそのまま使わないでください。- サイトが設定キャッシュを使っている場合、
.envを編集した後はphp artisan config:clearを実行してください。
このページの内容
- 本番環境の環境変数一覧 — 正しい値と、誤ったときの影響
- 本番サイトでデバッグを有効にしてはいけない理由
- HTTPS と Cookie
- Web のドキュメントルートとフォルダの権限
- 本番環境向けのソースコードのインストール
- Docker で運用する
- 5 分でできるセルフチェック
本番環境の環境変数一覧
この表は、セキュリティに関わる変数、本番運用で設定すべき値、誤って設定した場合に起きることをまとめたものです。
| 変数 | 本番環境の値 | 初期値(.env.example/システム) |
誤るとどうなるか |
|---|---|---|---|
APP_ENV |
production |
local |
値が正確に production のときだけ、GP247 はデバッグを強制的に無効にします |
APP_DEBUG |
false |
false |
有効にすると、エラーページに設定、パス、クエリが表示され、誰でも見られます |
APP_URL |
https://your-domain |
http://localhost |
メール内のリンクや決済リンクが誤る、または http:// を指してしまいます |
APP_KEY |
固有のキー。運用開始後は変更しない | (インストール時に生成) | 変更すると全員がログアウトされ、Webhook のシークレットが壊れます — 暗号化キーとバックアップを参照 |
GP247_ENCRYPTION_KEY |
固有のキー。インストール直後に設定 | (空) | 空の場合、秘密情報は APP_KEY に依存します。gp247:doctor の項目 encryption_key_dedicated が通知します |
LOG_LEVEL |
warning または error |
debug |
debug はログに大量の詳細を記録し、ファイルが肥大化し、不要な情報を含みます |
SESSION_SECURE_COOKIE |
true(HTTPS 導入後) |
(未設定) | ログイン Cookie が暗号化されていない接続で送信されるおそれがあります |
GP247_ADMIN_PREFIX |
独自のパス。例:admin-7k2 |
gp247_admin |
初期のパスは自動スキャナーに先に見つけられます |
GP247_FINGERPRINT |
プラットフォームを公表したくなければ false |
true |
サイトが GP247 を使っていることを示すヘッダーと meta タグを返します |
DB_PASSWORD |
このサイト専用の強いパスワード | password |
誰もが知っているサンプルパスワードです |
GP247_API_MODE |
REST API も MCP も使わなければ 0 |
1 |
エラーではありません — ただ、使わない部分を完全に無効にすれば入口が 1 つ減ります |
💡 ヒント: キー用のランダムな値は
php artisan key:generate --showで生成できます — このコマンドはキーを画面に表示するだけで、何も変更しません。
本番サイトでデバッグを有効にしてはいけない理由
デバッグモードは開発用です。エラーが起きると、開発者が修正できるようにページにすべての詳細が表示されます。本番サイトでは、 エラーに遭遇したどの訪問者にもその詳細が見えてしまいます:サーバー上のフォルダのパス、データベースのクエリ、設定の一部。 攻撃者はわざとエラーを起こしてそれを読み取ります。
- GP247 が守ること:
APP_ENV=productionのとき、APP_DEBUGの値にかかわらず GP247 がデバッグを強制的に無効にします。デバッグが有効なときは、管理画面のヘッダーに赤い 「DEBUG ON」 ラベルが表示されます。 - あなたが行うこと:
APP_ENV=productionとAPP_DEBUG=falseを両方設定してください。本番サイトで「DEBUG ON」ラベルが表示されたら、すぐに.envを修正し、php artisan config:clearを実行してください。 - 本番サイトでエラーを確認したいときは? デバッグを有効にする代わりに、
storage/logs/gp247.logファイルを読んでください。
HTTPS と Cookie
HTTPS はブラウザとサイトの間の通信を暗号化し、パスワードやログイン Cookie が途中で盗み読みされないようにします。 GP247 は HTTPS を自動では有効にしません — ホスティングまたは Web サーバーで有効にする必要があります。
-
ホスティングのコントロールパネルで SSL 証明書を有効にします(多くの場合、無料の Let's Encrypt があります)。または Web サーバー/プロキシで設定します。
-
同じ場所で
http://→https://へのリダイレクトを有効にします。 -
.envを編集します:APP_URL=https://your-domain SESSION_SECURE_COOKIE=true -
サイトに設定キャッシュがある場合は、次を実行します:
php artisan config:clear -
(推奨)ブラウザが常に HTTPS を使うよう、Web サーバーで HSTS ヘッダーを有効にします。GP247 はこのヘッダーを自動では送信しません。
成功すると、http:// でサイトを開くと自動的に https:// に切り替わり、ブラウザに鍵のアイコンが表示されます。
⚠️ 注意: プロキシや CDN(Cloudflare、ロードバランサー)の背後で動くサイトは、
TRUSTED_PROXIESにプロキシの正しいアドレスを設定する必要があります。設定しないと、 GP247 にはすべての訪問者が同じ IP に見え、IP ごとのログイン制限が効かなくなります。必要がなければ*を設定しないでください。
Web のドキュメントルートとフォルダの権限
この項目は、機密ファイル(.env、ログ、バックアップ)がブラウザから直接ダウンロードされるのを防ぎます。
- ドキュメントルートはサイトの
public/フォルダを指す必要があります。プロジェクトのルートフォルダではありません。そうすれば、public/の外にあるもの(.env、storage/、vendor/を含む)は Web からアクセスできなくなります。 - 共有ホスティングに
public_htmlしかない場合:ソースコードをpublic_htmlの外に置き、public/の中身だけをpublic_htmlに入れます。またはコントロールパネルで、ドメインのドキュメントルートを…/publicに変更します。 - 書き込み権限:書き込みが必要なのは
storage/とbootstrap/cache/だけです(管理画面からプラグインをインストールする場合はapp/GP247/、public/GP247/も)。サイト全体に777を設定しないでください。 - 簡単な確認:ブラウザで
https://your-domain/.envを開きます。正しい結果は 404 または 403 エラーです。ファイルの中身が表示されたら — すぐにドキュメントルートを修正し、ファイル内のすべてのパスワードを変更してください。
本番環境向けのソースコードのインストール
この項目は、Composer、Git、Docker でインストールしたサイト向けです。
- 開発用パッケージなしでインストールする:
composer install --no-devを使います。開発用パッケージ(例:デバッグツールバー)は本番サイトには不要です。 .envを Git に入れない:.gitignoreに.envの行があるか確認してください。誤って入れてしまった場合は、ファイル内のすべての秘密情報が漏れたものとみなし、すべて変更してください(更新とインシデント対応を参照)。- 設定キャッシュ(
php artisan config:cache)はサイトを速くしますが、その後は**.envを編集するたびに**php artisan config:clear(またはconfig:cache)を再実行する必要があります。実行しないと、サイトは古い値を使い続けます — 古いAPP_DEBUGも含めてです。 storage/app/private/フォルダを削除しない:サイトの「インストール済み」の目印が入っています。
Docker で運用する
S-Cart の Docker 構成には、本番環境向けの保護層がいくつか組み込まれています。
docker-compose.prod.ymlはすべての PHP サービスでAPP_ENV=productionとAPP_DEBUG=falseを固定し、マシン上の.envに依存しません。.env.exampleのサンプルパスワードが残っていると起動を拒否します(DB_PASSWORD=password、同梱の MySQL を使う場合はSC_DOCKER_DB_ROOT_PASSWORD=change_me_root)。- nginx は隠しファイル(
.env、.git)と内部フォルダをブロックし、PHP は使わない機能を無効にしています。
あなたが行うこと:コンテナの前段のプロキシで HTTPS を設定する(構成内の nginx はポート 80 だけを待ち受けます)、すべてのサンプルパスワードを変更する、
DOCKER.md の「Security updates」の項目に沿ってイメージを更新する。本番マシンで
docker compose down -v を実行しないでください — このコマンドはデータベースを含むボリュームを削除します。
5 分でできるセルフチェック
順番に行ってください。各手順に、照らし合わせるための正しい結果があります。
-
管理画面:ログインしてヘッダーを見ます — 環境ラベルが production で、赤い「DEBUG ON」ラベルがないことを確認します。
-
ブラウザ:
http://your-domainを開きます — 自動的にhttps://に切り替わるはずです。 -
ブラウザ:
https://your-domain/.envを開きます — 404 または 403 エラーになるはずです。 -
ブラウザ:
https://your-domain/installを開きます — インストール済みのサイトなら、ログインページに切り替わるはずです。 -
コマンドライン(使える場合):次のコマンドを実行します。すべての行が PASS、または理由を理解している WARN であることを確認します:
php artisan gp247:doctorencryption_key_dedicatedとsecret_decryptableの行に注意してください — 暗号化キーとバックアップを参照してください。
ℹ️ 情報:
gp247:doctorは PHP 環境、書き込み権限、暗号化キー、データベースを確認します。このコマンドはAPP_DEBUG、HTTPS、 Cookie は確認しません — 上の手順 1〜3 がその役割を担います。
条件と制約(操作の前に確認)
GP247_DB_PREFIXはインストール後に変更できません — 変更するとサイトがデータテーブルを見つけられなくなります。GP247_ADMIN_PREFIXを変更すると管理画面のアドレスが変わります — すべての管理者に新しいアドレスを伝えてください。古いブックマークは使えなくなります。- HTTPS がないまま
SESSION_SECURE_COOKIE=trueを設定するとログインできません — 先に HTTPS を有効にしてください。 - 設定キャッシュがある状態で
.envを編集した場合 —php artisan config:clearを実行しないと変更は反映されません。 APP_ENVは大文字と小文字を区別します —Productionやprodは production とみなされません。
よくある質問(Q&A)
Q1: 本番サイトで APP_ENV=local のままにするとどうなりますか?
→ GP247 はデバッグを強制的に無効にしないため、守りは APP_DEBUG だけになります。production に変更し、php artisan config:clear を実行してください。
Q2: APP_DEBUG=false を設定したのに、ヘッダーに「DEBUG ON」が表示されます。
→ サイトが古い設定キャッシュを使っています。php artisan config:clear を実行してください。コマンドラインがない場合は、ホスティングのファイルマネージャーで bootstrap/cache/config.php ファイルを削除してください。
Q3: ブラウザで /.env を開けてしまいました。どうすればよいですか?
→ すぐにドキュメントルートを public/ フォルダに修正し、ファイル内のすべての秘密情報が漏れたものとみなしてください:データベース、SMTP のパスワードと、決済ゲートウェイのキーを変更します。更新とインシデント対応を参照してください。
Q4: GP247_ADMIN_PREFIX を変更すれば、強いパスワードの代わりになりますか?
→ なりません。自動スキャナーに見つかりにくくなるだけです。主な保護は強いパスワードと二要素認証です。
Q5: 共有ホスティングでドキュメントルートを変更できない場合は?
→ ソースコードを public_html の外に移し、public/ フォルダの中身だけを public_html にコピーしてください。コントロールパネルにこの選択肢がなければ、ホスティング事業者に問い合わせてください。
Q6: LOG_LEVEL=debug は危険ですか?
→ storage/ が Web からアクセスできなければ外部には漏れませんが、ログが肥大化し、不要な詳細を多く含みます。本番運用では warning または error を設定してください。
Q7: Docker で APP_DEBUG=false が固定されています。ほかに気をつけることはありますか?
→ 前段のプロキシでの HTTPS、サンプルパスワードの変更、イメージの定期的な更新、データベースのボリュームのバックアップです。
Q8: 手軽に TRUSTED_PROXIES=* を設定してはいけないのはなぜですか?
→ そうすると誰でもヘッダーで IP アドレスを偽装でき、IP ごとのログイン制限やログの IP が意味をなさなくなります。実際のプロキシのアドレスだけを設定してください。
📅 最終更新: 2026-11-04 · ✍️ 作成者 (Author): GP247