phpプロジェクトをDockerで開発しレンタルサーバに公開【ベストプラクティス】

実現したい事

phpプロジェクトをDockerで開発しレンタルサーバーにアップロードしたい

githubリポジトリportfolioフォルダで管理(ローカル環境、本番環境でおなじ構成)

本番環境はさくらドキュメントルートのサブディレクトリ(名前はportfolio)

portfolioフォルダ内でsrc/public(公開ディレクトリ)とsrc/○○(非公開ディレクトリ)でセキュリティ
→.htaccessで制御

トップページへのアクセス
ローカル環境:localhostでportfolio/src/public/index.phpが表示
本番環境:https://siennahare23.sakura.ne.jp/portfolioでportfolio/src/public/index.phpが表示

環境変数を等セキュリティ

ディレクトリ構成

Webサーバーのドキュメントルートが src/public ディレクトリに設定されていることを前提

例)

プロジェクトルート/
├── src/
│   ├── public/
│   │   ├── css/
│   │   │   └── style.css
│   │   ├── index.php
│   │   ├── article.php
│   │   ├── wordpress-posts.php
│   │   └── .htaccess
│   ├── includes/
│   │   └── header.php
│   └── config/
│       └── config.php
├── vendor/
├── composer.json
├── composer.lock
├── Dockerfile
└── docker-compose.yml

Windowsの場合は、以下のPowerShellコマンドを使用でディレクトリ構造を出力できるので、はりつけで生成AIに状況を共有できます

Get-ChildItem -Recurse -Depth 3 | Where-Object { $_.PSIsContainer } | Select-Object FullName | ForEach-Object { $_.FullName.Replace($PWD.Path, "") }
ホストマシン ./src Dockerコンテナ /var/www/html マウント

ApacheのDocumentRootの設定と.htaccessのアクセス制御

DocumentRootの特徴:

  • Apacheの設定ファイル(通常はhttpd.confやapache2.conf)で指定します。
  • ウェブサーバーが公開するファイルシステムのルートディレクトリを定義します。
  • このディレクトリ以下のファイルのみがウェブを通じてアクセス可能になります。
  • サーバー全体またはバーチャルホスト単位で設定します。
Dockerコンテナ (/var/www/html) public (Document Root) index.php 他の公開ファイル config includes 非公開

.htaccessの特徴:

  • ディレクトリ単位で配置する設定ファイルです。
  • DocumentRoot内の特定のディレクトリやファイルへのアクセスをより細かく制御できます。
  • URLリライティング、リダイレクト、アクセス制限などの設定が可能です。
  • サーバー設定を変更せずに、特定のディレクトリの動作を変更できます。
DocumentRoot (/var/www/html) public index.php .htaccess config includes .htaccessによるアクセス制御 (config, includesへのアクセス禁止)

疑問点

src/public ディレクトリがウェブルートとして機能するよう設定する方法
・Dockerfileでの設定
・.htaccessでの設定
・レンタルサーバーでも機能するのか